流媒体协议
流媒体(streaming media)是指将一连串数据压缩后,经过网络分段发送,即时传输以供观看音视频的一种技术。
通过使用 streaming media 技术,用户无需将文件下载到本地即可播放。由于媒体是以连续的数据流发送的,因此在媒体到达时即可播放。可以像下载的文件一样进行暂停、快进或后退操作。
对于流视频协议,大多数数字视频是为了两件事情:存储和播放。要满足这样的需求,视频需要满足小文件和通用播放这两点。 大多数视频文件都不适合流式传输。流式传输需要将音视频分割成小块(chunk),将这些小块按顺序发送,并在接收时播放。
如果正在直播,则视频源来自于摄像机;否则,来自于文件。 流媒体协议是一种标准化的传递方法,用于将视频分解为多个块,将其发送给视频播放器,播放器重新组合播放。
大部分流协议是码率自适应(adaptive bitrate)的,这项技术可以在任一时间为用户提供最佳质量视频。 编、解码器(codec)指视频压缩技术。不同的编、解码器用于不同的目的。 即使不需要使用流式协议,视频也需要使用解编码器进行编码、解码。 通常,视频格式指视频文件格式(container format)。常见 container format 包括 .mp4、.m4v、.avi、.mov等,container format 只是一个框(box),框中通常包含视频文件、音频文件和元数据。视频文件格式并不是流式的核心概念。
形象比喻: 假设你是商人,需要批量运输衣服(衣服就是视频)。编解码器就是将衣服压缩成捆以节省空间的机器。容器格式就是装压缩后衣服的集装箱。流协议就是将其运输到目的地的铁轨。 常见的流协议有:RTMP、MPEG-DASH、MSS、HDS、HLS
私有流VS标准流
“标准流”通常指的是那些遵循公开、广泛接受的行业标准和协议的视频流。这些标准定义了视频数据的编码方式、传输方式、封装格式以及通信协议等。
“私有流”则指的是那些不遵循公开标准,而是由特定厂商、特定设备或特定软件自行定义和实现的视频流。这些流的编码方式、传输协议、封装格式或数据结构可能是 proprietary(专有的),不公开给第三方使用或解析。
流媒体体系结构
第一层:Streaming applications (流媒体应用)
- 这是最顶层,代表了用户直接交互的应用程序。
- 例如:视频会议软件、在线视频播放器、直播推流/收流客户端、网络电话 (VoIP) 等。
第二层:应用层协议
- 这一层包含了一系列用于建立、控制和管理流媒体会话的协议。它们为流媒体应用提供接口和功能。
- SDP (Session Description Protocol): 用于描述多媒体会话的参数。它包含了会话的类型、媒体(如视频、音频)、编解码格式、传输协议、地址等信息。SDP 通常与信令协议(如 SIP、RTSP)一起使用,来告诉接收方如何参与会话。
- RTSP (Real-Time Streaming Protocol): 这是用于控制实时媒体流的协议。它类似于播放器的“播放”、“暂停”、“停止”、“快进”等命令,但它不是传输媒体数据本身,而是向媒体服务器发送这些指令,然后媒体服务器再通过其他协议(如 RTP)传输媒体。图片中的箭头表示 RTSP 控制着下面的 RTP/RTCP 传输。
- HTTP (Hypertext Transfer Protocol): 虽然 HTTP 主要用于 Web 浏览,但它也可以用于流媒体。例如,HLS (HTTP Live Streaming) 和 DASH (Dynamic Adaptive Streaming over HTTP) 都是基于 HTTP 的流媒体传输协议。HTTP 在这里可以用于传输流媒体的会话描述文件,或者直接传输切片后的媒体片段。
- SIP (Session Initiation Protocol): 主要用于建立、修改和终止互联网通信会话,包括语音和视频呼叫。SIP 通常会携带 SDP 来描述会话。在很多 VoIP 和视频会议系统中扮演核心角色。
- H.323: 这是另一个早期的、用于提供音频、视频和数据通信的标准协议集,尤其在传统的电话和视频会议领域应用较广。它比 SIP 更为庞大和复杂。
第三层:RTP (RTCP) 和 媒体传输 (Media Transport - TCP, UDP)
-
RTP (RTCP): 这一层是实际传输媒体数据的核心。RTP 负责打包媒体数据(音频、视频帧),并包含时间戳、序列号等信息,以支持同步和丢包检测。RTCP 则负责控制和反馈。
-
Media transport (TCP, UDP): RTP/RTCP 本身是应用层协议,它们需要底层的传输层协议来实际发送数据。
- UDP (User Datagram Protocol): 如您所知,UDP 是 RTP 的主要承载协议。因为它简单、低延迟,非常适合实时媒体传输,允许容忍少量丢包。
- TCP (Transmission Control Protocol): 有时候,RTP/RTCP 也可以运行在 TCP 之上,但这会引入 TCP 的可靠性机制带来的延迟,通常用于对可靠性要求极高但对实时性要求略低的场景,或者当网络环境不允许 UDP 的情况下。
第四层:RSVP 和 网络层 (Network Layer - IPv4, IPv6)
- RSVP (Resource Reservation Protocol): RSVP 是一个网络资源预留协议。它允许应用程序在发送媒体流之前向网络请求特定的服务质量 (QoS)。例如,它可以请求保证一定的带宽或较低的延迟。在某些需要严格 QoS 控制的网络环境中,RSVP 可以帮助确保流媒体的流畅播放。
- Network (IPv4, IPv6): 这是网络的底层,负责将数据包从源地址路由到目标地址。IP 协议(IPv4 或 IPv6)是数据在网络中传输的基础。
RTP(Real-time Transport Protocol)实时传输协议
-
RTP 的定义和目的: RTP 是一个网络传输协议,专门用于在互联网上传递音频和视频等实时数据,并定义了标准的数据包格式。
-
RTP 的两个子协议:
- RTP (Real-time Transport Protocol): 负责实际的数据传输。
- **RTCP (RTP Control Protocol):**RTP本身并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,它依靠RTCP提供这些服务。
-
RTP 数据传输协议 (RTP) 的功能:
- 时间戳 (Timestamp): 用于确保音视频同步播放,让不同来源的媒体能够正确地按照时间顺序播放。
- 序列号 (Sequence Number): 用于检测丢包(例如,发送了包 1、2、4,说明丢失了包 3)和乱序(包 1、3、2 到达),以便接收方进行重组和处理。
- 负载格式 (Payload Format): 表明当前数据包中包含的是什么编码格式的媒体数据(如 H.264、AAC 等),以便接收方选择正确的解码器。
-
RTCP 控制协议的功能:
- QoS 反馈 (Quality of Service feedback): 提供关于网络质量的信息,例如丢包率、延迟抖动等,供发送方调整发送策略。
- 同步媒体流 (Synchronizing media streams): 通过接收 RTP 时间戳信息,帮助不同媒体流(如音频和视频)在播放时保持同步。
- 带宽占用小: 相对于 RTP,RTCP 所占用的带宽非常少(通常是 5%),确保了主要的带宽用于媒体数据本身。
-
RTP 与 TCP 的对比(以及 RTP 基于 UDP 的原因):
-
TCP 的缺点(针对实时传输):
- 可靠性导致复杂性: TCP 的可靠性(保证每比特都正确)是通过超时和重传机制实现的,这使得协议实现和传输过程都非常复杂。
- 重传导致延迟: 当发生丢包时,TCP 的重传机制会强制暂停并等待重传,这会引入不可接受的延迟,破坏实时性。
-
RTP 的优势(基于 UDP):
- 简单高效: RTP 运行在 UDP 之上,UDP 本身是无连接、不可靠的传输协议,没有复杂的握手和重传机制,因此协议简单,开销小。
- 实时性优先: RTP 允许为了保持实时性而容忍一定的丢包(例如,一个音视频帧丢失了影响不大,比整个流都停下来等待重传要好得多)。
- RTP 本身不保证可靠性: RTP 不提供像 TCP 那样的按顺序传送和重传机制。这些功能(如丢包检测和重排序)由 RTP 的序列号提供信息,但处理(如重传)本身不由 RTP 实现。
- 依靠 RTCP 实现服务: RTP 将可靠性、流量控制、拥塞控制等高级服务委托给 RTCP 来实现。RTCP 通过反馈来让发送方了解网络状况,并可以指导发送方如何调整(例如,降低码率以应对拥塞)。
-
RTP对话过程
- 确定通信目标:应用确定了接收方的网络地址和一对UDP端口(一个偶数用于RTP,一个奇数用于RTCP)。
- 数据打包:RTP将媒体数据打包,RTCP将控制信息打包。
- 分发传输:RTP数据包通过偶数端口发送,RTCP控制包通过相邻的奇数端口发送。
主码流、子码流、Mjpeg流
海康威视首家提出了主码流与子码流这样的概念,是为了解决在网络情况不好时为了满足远程预览的流畅性降低码率,而不影响本地录像提出的双码流技术。主码流分辨率高于子码流,主码流用来录像,子码流用来网传。
双码流能实现本地和远程传输的两种不同的带宽码流需求,本地传输可以用主码流,能获得更清晰的存储录像,远程传输就因为带宽限制的原因,而使用子码流来获得流畅的图像和录像。 MJPEG(Motion JPEG)是一种视频编码格式。它并不是像H.264或H.265那样将连续的视频帧进行压缩编码,而是将每一帧视频都独立地当作一张JPEG图片进行压缩。
-
H.264 (AVC) 是当前应用最广泛、兼容性最好的视频编码标准,是“主流”。
- 块划分: H.264 可以将画面分割成不同大小的块,并为每个块选择最适合的编码方式,提高了效率。
- 帧内预测: 利用同一帧内相邻块的信息来预测当前块,减少冗余。
- 帧间预测: 利用过去或未来的帧中的相似块来预测当前块(运动补偿),这是视频压缩的核心技术之一。
-
H.265 (HEVC) 是 H.264 的进化版,在压缩效率上大幅提升,特别适合高分辨率视频,是未来的趋势,但对硬件要求更高且兼容性不如 H.264。
引用
流媒体协议初探(MPEG2-TS、RTSP、RTP、RTCP、SDP、RTMP、HLS、HDS、HSS、MPEG-DASH)_hds协议-CSDN博客