mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
sdp: Add an option for sending RTCP packets to the source of the last packets
An SDP description normally only contains the target IP address and port for the packets. This means that we don't really have any clue where to send the RTCP RR packets - previously they're sent to the destination IP written in the SDP (at the same port), which rarely is the actual peer. And if the source for the packets is on a different port than the destination, it's never correct. With a new option, we can choose to send the packets to the address that the latest packet on each socket arrived from. --- Some may even argue that this should be the default - perhaps, but I'd rather keep it optional at first. Additionally, I'm not sure if sending RTCP RR directly back to the source is desireable for e.g. multicast. Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
6b58e11a83
commit
b56fc18b20
@ -96,6 +96,7 @@ const AVOption ff_rtsp_options[] = {
|
||||
static const AVOption sdp_options[] = {
|
||||
RTSP_FLAG_OPTS("sdp_flags", "SDP flags"),
|
||||
{ "custom_io", "Use custom IO", 0, AV_OPT_TYPE_CONST, {.i64 = RTSP_FLAG_CUSTOM_IO}, 0, 0, DEC, "rtsp_flags" },
|
||||
{ "rtcp_to_source", "Send RTCP packets to the source address of received packets", 0, AV_OPT_TYPE_CONST, {.i64 = RTSP_FLAG_RTCP_TO_SOURCE}, 0, 0, DEC, "rtsp_flags" },
|
||||
RTSP_MEDIATYPE_OPTS("allowed_media_types", "Media types to accept from the server"),
|
||||
RTSP_REORDERING_OPTS(),
|
||||
{ NULL },
|
||||
@ -2172,9 +2173,10 @@ static int sdp_read_header(AVFormatContext *s)
|
||||
namebuf, sizeof(namebuf), NULL, 0, NI_NUMERICHOST);
|
||||
ff_url_join(url, sizeof(url), "rtp", NULL,
|
||||
namebuf, rtsp_st->sdp_port,
|
||||
"?localport=%d&ttl=%d&connect=%d", rtsp_st->sdp_port,
|
||||
rtsp_st->sdp_ttl,
|
||||
rt->rtsp_flags & RTSP_FLAG_FILTER_SRC ? 1 : 0);
|
||||
"?localport=%d&ttl=%d&connect=%d&write_to_source=%d",
|
||||
rtsp_st->sdp_port, rtsp_st->sdp_ttl,
|
||||
rt->rtsp_flags & RTSP_FLAG_FILTER_SRC ? 1 : 0,
|
||||
rt->rtsp_flags & RTSP_FLAG_RTCP_TO_SOURCE ? 1 : 0);
|
||||
|
||||
append_source_addrs(url, sizeof(url), "sources",
|
||||
rtsp_st->nb_include_source_addrs,
|
||||
|
@ -401,6 +401,8 @@ typedef struct RTSPState {
|
||||
source address and port. */
|
||||
#define RTSP_FLAG_LISTEN 0x2 /**< Wait for incoming connections. */
|
||||
#define RTSP_FLAG_CUSTOM_IO 0x4 /**< Do all IO via the AVIOContext. */
|
||||
#define RTSP_FLAG_RTCP_TO_SOURCE 0x8 /**< Send RTCP packets to the source
|
||||
address of received packets. */
|
||||
|
||||
typedef struct RTSPSource {
|
||||
char addr[128]; /**< Source-specific multicast include source IP address (from SDP content) */
|
||||
|
Loading…
Reference in New Issue
Block a user