Contents

流媒体协议

常用流媒体协议

  • 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的 translatorsmixers

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:

  1. rtmp_client_create:live/vod 地址设置,回调设置
  2. rtmp_client_start:设置client模式,publish = 0-推流,1-拉流(live流/vod流), 2-仅推live流, 3-仅推vod流。开始握手,发送(c0/c1)包
  3. rtmp_client_input:继续完成握手三阶段。通过getstate判断当前握手状态,如果返回4,则可以开始传输video/audio
  4. rtmp_client_push_video/rtmp_client_push_audio:传输flv包,或h264/aac码流(NALU)

server:

  1. rtmp_server_create:设置回调
  2. 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)