概要
音视频的传输方式有两种,一种是基于TCP,一种是基于UDP。基于TCP由于有三次握手的过程,延迟较大。基于UDP由于可能会丢包,需要自己控制传输质量。RTSP是一种基于字符串的协议,主要用于信令,本身不传输音视频,音视频的传输要用到RTP协议,传输的质量主要由RTCP协议保证。
基本流程
- 创建socket server等待rtsp client的连接
- rtsp client和rtsp server信令交互,其中重要的信令如下:
- client告知server自己接收RTP包和RTCP包的端口号
- rtsp client向server 请求sdp,用于rtsp server告知client都支持哪些音视频的编码。
- 收到PLAY信令之后,开始connect rtsp client的指定端口,然后发送一包一包的视音频数据
需要注意的点
- RTSP包中的\r\n非常重要,如果少了一个\r\n,ffplay会解析失败
- RTP包中的sequence number非常重要,如果这个多了,ffplay会合并包失败
- RTP中的timestamp如果错误,会导致播放卡顿,效果像幻灯片
- 要注意网络字节序
- 主要参考协议有rfc3550和rfc6184
参考
个人实现的librtsp,https://github.com/felix-001/librtsp