summaryrefslogtreecommitdiffstats
path: root/libavformat/rtsp.c
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2012-12-04 15:28:29 +0200
committerMartin Storsjö <martin@martin.st>2016-05-11 10:35:26 +0300
commitbc2a32969eb4db17677971def5ad5b936d9d1648 (patch)
treeeaef38ba097ad7d0c912df2ab610e964091e389d /libavformat/rtsp.c
parent9ea78fd00a49f0691c1a5134eb59d4e5bb380a2a (diff)
downloadffmpeg-streaming-bc2a32969eb4db17677971def5ad5b936d9d1648.zip
ffmpeg-streaming-bc2a32969eb4db17677971def5ad5b936d9d1648.tar.gz
rtsp: Parse SSRC attributes in the SDP
When feeding input RTP packets to the depacketizer via custom IO, it needs to pick the right stream using the payload type for RTP packets, and using the SSRC for RTCP packets. If the first packet is an RTCP packet, we don't (currently) know the SSRC yet and thus can't pick the right RTP depacketizer to handle it. By parsing the SSRC attribute in the SDP, we can map initial RTCP packets to the right stream. Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavformat/rtsp.c')
-rw-r--r--libavformat/rtsp.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index 7e430e8..9e8733a 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -565,6 +565,10 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
s1->seen_fmtp = 1;
av_strlcpy(s1->delayed_fmtp, buf, sizeof(s1->delayed_fmtp));
}
+ } else if (av_strstart(p, "ssrc:", &p) && s->nb_streams > 0) {
+ rtsp_st = rt->rtsp_streams[rt->nb_rtsp_streams - 1];
+ get_word(buf1, sizeof(buf1), &p);
+ rtsp_st->ssrc = strtoll(buf1, NULL, 10);
} else if (av_strstart(p, "range:", &p)) {
int64_t start, end;
@@ -824,6 +828,8 @@ int ff_rtsp_open_transport_ctx(AVFormatContext *s, RTSPStream *rtsp_st)
if (!rtsp_st->transport_priv) {
return AVERROR(ENOMEM);
} else if (CONFIG_RTPDEC && rt->transport == RTSP_TRANSPORT_RTP) {
+ RTPDemuxContext *rtpctx = rtsp_st->transport_priv;
+ rtpctx->ssrc = rtsp_st->ssrc;
if (rtsp_st->dynamic_handler) {
ff_rtp_parse_set_dynamic_protocol(rtsp_st->transport_priv,
rtsp_st->dynamic_protocol_context,
OpenPOWER on IntegriCloud