文章

流媒体协议基础

流媒体协议基础

流媒体协议基础

一般分为指令控制(tcp传输),和数据传输(udp传输)两类协议,分开工作。

流媒体协议标准

  • GB28181 适用大规模监控系统。使用SIP作为信令协议,通过RTP/RTCP实现流控制和反馈。除了规范流媒体传输,还做了通道信息级联同步等规范定义。

流媒体协议分类

常见的有

  • RTMP (应用层,绑定依赖浏览器的Flash播放器插件。可用于推、拉流)
  • RTSP(应用层,控制协议,播放、暂停、终止等指令控制。可用于推、拉流)参考
    • RTP (传输层,数据包传输) rfc规范
    • RTCP (传输层,控制协议,数据包流量控制)
  • http-flv (基于html5技术,无需浏览器插件。使用http请求+flv格式容器。用于拉流播放)
  • ws-flv (同http-flv,传输改用websocket)
  • webrtc (谷歌主导技术)
  • hls (苹果主导技术,切片有延时。用于拉流播放)
  • onvif 私有协议

控制协议内容基本基于纯文本,抓包可以看到。

常见概念

  • SIP Session Initiation Protocol,信令协议,控制协议。包含SIP域(SIP Domain)和SIP ID(SIP Identifier)用户或设备唯一标识符。
  • SDP SDP(Session Description Protocol,会话描述协议)是一种用于描述多媒体会话的协议。它提供了一种标准化的格式,用于描述会话的媒体类型、网络传输参数和其他相关信息。SDP通常与SIP协议一起使用,作为SIP消息中传输会话相关信息的一部分。
  • SSRC Synchronization Source Identifier,同步信源标识符。指产生媒体流的信源,例如麦克风、摄像机、RTP混合器等。它通过RTP报头中的一个32位数字SSRC标识符来标识,而不依赖于网络地址,接收者将根据SSRC标识符来区分不同的信源,进行RTP报文的分组。

容器格式

此外还有flv、mp4等。

压缩编解码

比如h264、h265等。

sip信令简单抓包实验

在服务器上使用tcpdump抓包

1
2
3
4
5
## 捕获SIP协议流量,通常使用5060/5061端口
sudo tcpdump -i eth0 -w capture.pcap port 5060 or port 5061

## 如果还需要捕获RTP流量(媒体流)。假设RTP流量使用30000-40000范围的UDP端口
sudo tcpdump -i eth0 -w capture.pcap port 5060 or port 5061 or udp portrange 30000-40000

使用Wireshark分析抓包文件,在过滤框中输入SIP和RTP相关的过滤条件。

1
2
3
4
5
# 查看所有 SIP 消息
sip

# 根据Call-ID过滤。会话id在整个交互流程中唯一
sip.Call-ID == "your_caller_id_here"

参考

本文由作者按照 CC BY 4.0 进行授权