常用流媒体协议
- rtp(real-time transport protocol)实时传输协议
是一种用于实现实时音视频传输的协议。它为实时应用程序提供端到端传输服务,例如VoIP电话、视频会议、流媒体等应用。
RTP是IETF(Internet Engineering Task Force)标准化的协议,它通常运行在UDP之上,将音频、视频或其他实时数据划分成多个小的数据包进行传输,并增加了时间戳和序列号等信息。这些信息帮助接收方重组原始数据并保持同步,同时也有助于处理网络传输中的延迟、丢包等问题。
RTP还支持使用RTCP(Real-time Transport Control Protocol)进行控制信令 - rtcp(real-time transport control protocol)实时传输控制协议
RTCP用于发送控制消息以实现QoS(Quality of Service——服务质量)和流量管理。通过定期向发送方发送反馈信息,RTCP能够提供网络拥塞情况、传输质量和数据源信息等。 - rtsp(streaming)实时流传输协议
是一种用于实现音频和视频流的控制协议,RTSP通常运行在TCP或UDP之上,它提供了一种标准的方式来控制流式媒体传输。通过RTSP,客户端可以向服务器请求流媒体资源,并实现对流媒体的控制和管理,例如播放、暂停、快进、倒放、跳转和调整音量等操作。与其他流媒体协议不同的是,RTSP并不直接传输音视频数据,而是协调客户端和服务器之间的数据传输。
RTSP还支持使用RTCP(Real-time Transport Control Protocol)进行控制信令 - rtmp(messaging) 实时消息传输协议
是一种用于实现音频和视频流的传输协议。它由Adobe公司开发,主要用于支持Flash Player和Adobe AIR中的实时数据传输。
RTMP 可以在TCP/IP 协议栈上建立一个可靠的、实时的数据传输通道,用于传输音频、视频等实时数据。与 HTTP 或 FTP 等传输协议不同的是,RTMP 适合用于实时性要求高的场合,例如直播、网络电视等。
RTMP 分为两种,一种是 RTMP over TCP,另一种是 RTMPS over SSL/TLS。RTMP over TCP 是明文的,未进行加密;而 RTMPS over SSL/TLS 则对传输的数据进行了加密处理,数据更安全。 - hls(http live streaming)
是一种基于HTTP协议的流媒体传输协议,通过将媒体流切分为小片段,并通过M3U8索引文件动态请求媒体数据,实现了高度的兼容性和可扩展性
HLS最大的特点是支持直播和点播两种方式。在直播模式下,HLS将实时流媒体数据实时切割为小片段,同时通过M3U8索引文件来标识小片段的位置。播放器通过周期性地请求此M3U8索引文件来获取最新的媒体切片地址,并结合缓冲区和预加载,实现流畅的直播体验。而在点播模式下,HLS会将整个媒体文件分割成多个小片段,请求同样也是通过M3U8索引文件来获取对应的媒体切片地址。 - sip(session initiation protocol)
是一种应用层协议,用于建立、修改和终止多媒体会话,例如语音通话、视频通话和即时消息等。SIP协议是IETF(Internet Engineering Task Force)制定的标准,被广泛使用在VoIP(Voice over IP)网络中。
总的来说,SIP是一种用于建立、修改和终止多媒体会话的应用层协议,被广泛使用在VoIP网络中,通过SIP用户可以建立语音、视频通话和即时消息等通讯。
总结:
传输协议:rtp,rtmp,hls
传输控制协议:rtcp
传输会话控制协议:rtsp,sip
rtp协议
RTP协议详解
RFC 3550: RTP: A Transport Protocol for Real-Time Applications (rfc-editor.org)
摘要
这个memo描述RTP协议,RTP协议提供端到端的网络传输功能,适合于需要实时传输的数据,比如音频,视频或者simulation数据,通过multicast(多播)或者unicast的网络服务来实现。RTP不会address resource reservation也不对实时服务提供质量保证。数据传输通过RTCP协议扩充,RTCP协议允许监测数据传输在一个网络中,并且提供了最小化的控制和标识功能。RTP和RTCP设计用来独立于底层的传输层和网络层。该协议支持RTP-level的 translators
和 mixers
。
RTP
translators/mixers
-
mixers:放置在低速带宽区域,用于重新组合发送方每隔20ms发送过来的数据,将多个数据包组合成为一个
-
translators:放在防火墙的内外侧,用于将多播数据包转换到内部多播组中
-
rtp payload:音频数据/压缩的视频数据
-
rtp packet:固定的rtp头部 + 可能为空的csrc字段 + payload数据
-
rtcp packet:固定的rtcp头部 + 各种结构化的element,不同类型
-
rtp media type:rtp payload类型的集合
-
multimedia session:
-
rtp session:
-
synchronization source(ssrc):标识rtp packet的发送者,int32类型
-
contributing source(csrc):用在mixer中,标识rtp packet片段用于组合
rtmp
Adobe RTMP Specification · RTMP (veriskope.com)
Public Live:
client:
- rtmp_client_create:live/vod 地址设置,回调设置
- rtmp_client_start:设置client模式,publish = 0-推流,1-拉流(live流/vod流), 2-仅推live流, 3-仅推vod流。开始握手,发送(c0/c1)包
- rtmp_client_input:继续完成握手三阶段。通过getstate判断当前握手状态,如果返回4,则可以开始传输video/audio
- rtmp_client_push_video/rtmp_client_push_audio:传输flv包,或h264/aac码流(NALU)
server:
- rtmp_server_create:设置回调
- rtmp_server_input: 接收client数据,处理握手和chunk数据
流媒体协议开源实现
ireader/media-server: RTSP/RTP/RTMP/FLV/HLS/MPEG-TS/MPEG-PS/MPEG-DASH/MP4/fMP4/MKV/WebM (github.com)