|
|
|
@@ -65,6 +65,12 @@ |
|
|
|
{ name, longname, OFFSET(rtsp_flags), AV_OPT_TYPE_FLAGS, {0}, INT_MIN, INT_MAX, DEC, "rtsp_flags" }, \ |
|
|
|
{ "filter_src", "Only receive packets from the negotiated peer IP", 0, AV_OPT_TYPE_CONST, {RTSP_FLAG_FILTER_SRC}, 0, 0, DEC, "rtsp_flags" } |
|
|
|
|
|
|
|
#define RTSP_MEDIATYPE_OPTS(name, longname) \ |
|
|
|
{ name, longname, OFFSET(media_type_mask), AV_OPT_TYPE_FLAGS, { (1 << (AVMEDIA_TYPE_DATA+1)) - 1 }, INT_MIN, INT_MAX, DEC, "allowed_media_types" }, \ |
|
|
|
{ "video", "Video", 0, AV_OPT_TYPE_CONST, {1 << AVMEDIA_TYPE_VIDEO}, 0, 0, DEC, "allowed_media_types" }, \ |
|
|
|
{ "audio", "Audio", 0, AV_OPT_TYPE_CONST, {1 << AVMEDIA_TYPE_AUDIO}, 0, 0, DEC, "allowed_media_types" }, \ |
|
|
|
{ "data", "Data", 0, AV_OPT_TYPE_CONST, {1 << AVMEDIA_TYPE_DATA}, 0, 0, DEC, "allowed_media_types" } |
|
|
|
|
|
|
|
const AVOption ff_rtsp_options[] = { |
|
|
|
{ "initial_pause", "Don't start playing the stream immediately", OFFSET(initial_pause), AV_OPT_TYPE_INT, {0}, 0, 1, DEC }, |
|
|
|
FF_RTP_FLAG_OPTS(RTSPState, rtp_muxer_flags), |
|
|
|
@@ -74,11 +80,13 @@ const AVOption ff_rtsp_options[] = { |
|
|
|
{ "udp_multicast", "UDP multicast", 0, AV_OPT_TYPE_CONST, {1 << RTSP_LOWER_TRANSPORT_UDP_MULTICAST}, 0, 0, DEC, "rtsp_transport" }, |
|
|
|
{ "http", "HTTP tunneling", 0, AV_OPT_TYPE_CONST, {(1 << RTSP_LOWER_TRANSPORT_HTTP)}, 0, 0, DEC, "rtsp_transport" }, |
|
|
|
RTSP_FLAG_OPTS("rtsp_flags", "RTSP flags"), |
|
|
|
RTSP_MEDIATYPE_OPTS("allowed_media_types", "Media types to accept from the server"), |
|
|
|
{ NULL }, |
|
|
|
}; |
|
|
|
|
|
|
|
static const AVOption sdp_options[] = { |
|
|
|
RTSP_FLAG_OPTS("sdp_flags", "SDP flags"), |
|
|
|
RTSP_MEDIATYPE_OPTS("allowed_media_types", "Media types to accept from the server"), |
|
|
|
{ NULL }, |
|
|
|
}; |
|
|
|
|
|
|
|
@@ -325,6 +333,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1, |
|
|
|
case 'm': |
|
|
|
/* new stream */ |
|
|
|
s1->skip_media = 0; |
|
|
|
codec_type = AVMEDIA_TYPE_UNKNOWN; |
|
|
|
get_word(st_type, sizeof(st_type), &p); |
|
|
|
if (!strcmp(st_type, "audio")) { |
|
|
|
codec_type = AVMEDIA_TYPE_AUDIO; |
|
|
|
@@ -332,7 +341,8 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1, |
|
|
|
codec_type = AVMEDIA_TYPE_VIDEO; |
|
|
|
} else if (!strcmp(st_type, "application")) { |
|
|
|
codec_type = AVMEDIA_TYPE_DATA; |
|
|
|
} else { |
|
|
|
} |
|
|
|
if (codec_type == AVMEDIA_TYPE_UNKNOWN || !(rt->media_type_mask & (1 << codec_type))) { |
|
|
|
s1->skip_media = 1; |
|
|
|
return; |
|
|
|
} |
|
|
|
|