ffmpeg 之 RTSP 一

一 前沿

  打算花两篇文章来写RTSP ,第一篇介绍RTSP 协议,第二篇介绍RTSP 是如何在FFMPEG 中实现的。RTSP 是早期的流媒体协议,协议由RealNetworks,NetScape和哥伦比亚大学合作开发,并由IETF标准化(RFC2326),现在常用于安防摄像头监控。

我们在播放rtsp 连接,并开启wireshark 抓取其网络包是发现,其中不但有rtsp 包,还有大量的rtp, rtcp 包。 这是 怎么回事?

ffplay.exe -i rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov

rtmp, rtp, rtcp 到底有什么关系?

rtmp: 它是一个文件控制协议,用于控制stream 的播放/暂替。

rtp/rtcp: 它们是一对姐妹协议,前者用来传输video/audio数据,后者用来QOS,像服务器/客户端反馈当前的网络环境,传输质量等等。他们层级关系如下:

   因此RSTP 通常与RTP/RTCP 协议共同使用,其中RTSP 是服务器与客户端间的双向协议,它不负责传输音视频数据,而是用来控制多个音视频流。RTSP是基于ISO10646字符集的文本协议,基于TCP 建立会话,与HTTP1.1 很类似,例如404 代表错误码“Not Found”,200 代表“OK”。

二 RSTP 命令

   上面说到RTSP 它是一个文本控制协议,类似与HTTP,用于控制音视频播放的。那么它支持哪些控制命令呢? 如下图,是抓取的网络包,发送"OPTIONS",就会返回支持的控制命令,我们可知它支持:DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE,OPTIONS,ANNOUNCE,RECORD,GET_PARAMETER控制命令。

下面我们来分析一下这些命令的作用?

rtsp 播放流程如下图所示:

  RTSP通过不同的命令构建完整的控制会话,同时依赖RTP和RTCP或其他协议(例如在广播电视领域,有些方案采用TS作音视频传输)传输音视频本身的数据,一次典型的播放过程将在客户端和服务器间建立5个不同的Session:一路RTSP的Session、两路RTP的Session(音频和视频各一)以及两路RTCP Session(分别对应两路RTP Session),占用5个不同的端口(RTSP协议的默认端口是554,RTP及RTCP的端口由SETUP命令指定)。 使用多达5个会话交换数据的RTSP方式流媒体传输,很像是在双向多车道的马路上奔驰,无疑很大程度上解决了交通的问题,但“成也萧何,败也萧何”,多车道对资源的占用或许就是被后来的RTMP等协议挤占的根源。

三 RTP

RTP是Real-time Transport Protocol 的简称,定义与RFC1889标准中,基于UDP 传输,设计初衷是用来传递音视频数据的,后常与RTSP,H323,SIP,WebRTC等协议配合使用。RTP协议将不同编码格式和封装格式视频,在加上RTP header 进行发送,RTP 头重要信息包括序列号,时间戳,负载格式,并且RTP协议提供抖动补偿和数据无序到达的检测机制。其RTP 头格式如下图所示,前12bit 是可选的,后面CSRC 是可选的,最多15bit。

 V: 2bit, version版本号。

P:1bit, Pading , 数据是否有填充。

X: 1bit,eXtension,扩展位,该位被设置,还有个RTP extension 头

CC: 4bit,CRSC计数,用来表示CSRC的数目,用于表示RTP 数据包的来源。

M: 1 bit, 该位被设置,代表RTP 报文有特殊意义,比如每一帧的开始。

PT: 4bit ,payload Type, 载荷类型。

SN:16 bit,序列号,每发送一个同类型的RTP 包,序列号就加1 .

T: 32bit,时间戳,它反映RTP报文中数据第一个字节的采样时刻(时间)

SSRC: 32bit, Synchronization SouRce identifier, 用来识别RTP数据包的来源。

CSRC:32bit, Contributing SouRce identifier .

下面我们对照一个RTP 网络包,来看下RTP Header 的样子。

四 RTCP

实时传输控制协议(RTCP)与实时传输协议(RTP)是一对姐妹协议,它们 的IETF编码分别为:RFC 3550和RFC 3551 ,RTP 只负责传输数据,不能为传输质量提供保证,也不能提供流量控制和拥塞控制, 这需要与RTCP共同合作。

RTCP 的作用有:服务质量反馈,会话控制,信息标识,媒体间同步。

RTCP 报文类型:

1,发送端报告(SR, send report),类型号为200,S -> C。如下图抓的发送端报告,可知包含信息有ssrc确定发送源, timestamp用于计算延时, packet count 用于计算丢包率。

2 ,接收端报告(RR,receiver report),类型号为201, C -> S。如下图抓的是接收端报告网络包,包含信息有lost 丢包,延时等信息。

3,源描述项(SDES,source description items),类型号为202。如下图抓的是SDES , 其记录是的会话成员有关的标识信息。

4 ,参与结束标识(BYE, indicates End of participation),类型号为203, 用于指示关闭一个或几个数据流。

5, 特定应用功能(APP, application specific functions),类型号为204, 应用程序自定义,用于解决扩展性问题。

五 总结

  本文先后介绍了RTSP,RTP,RTCP,它们分别用于播放控制,传输数据,QOS。 RTSP它是一个文本控制协议,本文介绍了其控制报文与播放控制流程。RTP 它是它是数据传输协议,本文介绍其格式组成。RTCP 它用于QOS,本文介绍了其五种报文类型。因此RTSP 流是用RTSP协议控制,RTP传输,RTCP监测的数据流。

 

 

 

 

 

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值