本文作者:杉木@涂鸦智能安全实验室
流媒体协议介绍
流媒体协议是用于网络上音视频数据传输的一组规则和标准。这些协议确保了数据可以以流的形式从服务器传输到客户端,同时为用户提供了播放、暂停、快进和倒带等控制功能。
流媒体协议有很多,主要分为三大类:
- 传统视频流协议
- 基于 HTTP 的自适应协议
- 新技术
传统视频流协议
传统视频流协议主要有:
- RTMP
- RTSP
基于 HTTP 的自适应协议
基于 HTTP 的自适应协议主要有:
- Apple HLS
- Low-Latency HLS
- MPEG-DASH
- Adobe HDS
新技术
新技术主要有:
- SRT
- WebRTC
RTSP
RTSP(Real Time Streaming Protocol,实时流协议)是最早的视频传输协议,定义了一对多应用程序如何通过IP网络高效传输多媒体数据。RTSP位于RTP和RTCP之上,在体系结构上,它是一种双向实时数据传输协议,允许客户端向服务器端发送如回放、快进、倒退等操作的请求。RTSP可基于RTP传送数据,也可以选择TCP、UDP、组播UDP等通道发送数据,具有优良的扩展性。
- 底层协议:TCP 和 UDP
- 网络控制协议
- 视频编解码器:H.265
- 音频编解码器:AAC
- 延迟:2 秒
- 常见端口:554/8554
RTP/RTCP
RTP(Real-time Transport Protocol, 实时传输协议)是互联网上针对多媒体数据流的一种实时传输协议。RTP协议和RTP控制协议RTCP一起使用,而且它是建立在UDP协议上的。
RTCP(Real-time Transport Control Protocol或RTP Control Protocol,实时传输控制协议)与RTP配合使用的协议,也是RTP协议中不可分割的一部分。RTCP的主要功能:服务质量的监督和反馈,媒体数据间的同步,以及多播组中成员的标志。
RTCP的五种分组类型:
- 200: SR: sender report
- 201: RR: receiver report
- 202: SDES: source description items
- 203: BYE: indicates end of participation
- 204: APP: application specific functions
SRTP/SRTCP
安全实时传输协议(Secure Real-time Transport Protocol或SRTP)是在实时传输协议(Real-time Transport Protocol或RTP)基础上所定义的一个协议,旨在为单播和多播应用程序中的实时传输协议的数据提供加密、消息认证、完整性保证和重放保护。
网络层关系
RTSP协议分析与安全实践
RTMP
RTMP(Real Time Messaging Protocol)实时消息传送协议是 Adobe 公司为 Flash 播放器和服务器之间进行音频、视频和数据传输而开发的流媒体协议。
- 底层协议:TCP
- 应用级视频流协议
- 视频编解码器:H.264
- 音频编解码器:AAC
- 延迟:3 - 30 秒
- 常见端口:1935
RTMP 基于 TCP,是一个协议族,包括 RTMP 基本协议以及 RTMPT、RTMPS、RTMPE 等多种变体。它是一种用于实时数据通信的网络协议,主要用于 Flash/AIR 平台和支持 RTMP 协议的流媒体/交互服务器之间的音视频和数据通信。
HLS
HLS(HTTP Live Streaming,HTTP 实时流媒体协议)是由 Apple 公司提出的一种基于 HTTP 的流媒体传输协议。HLS 原先是为了实现 iOS 设备上的流媒体播放,但随着时间的推移,HLS 得到了越来越广泛的应用,已经成为事实上的流媒体传输标准。
HLS 工作方式是将多媒体流切成一系列连续的 HTTP 文件下载,每次下载一小段,通过串连它们的播放,可以做到所谓的"实时"播放。在开始播放之前,客户端会下载一个包含元数据的 m3u8 文件,用来获取媒体流的信息。
HLS 的主要优点在于可以根据网络状况调整视频质量,从而提供更好的用户体验。此外,由于 HLS 使用的是 HTTP 协议,因此可以直接利用现有的网络基础设施,如 CDN、缓存服务器等。
- 底层协议:HTTP
- 应用级视频流协议
- 视频编解码器:H.264
- 音频编解码器:AAC
- 延迟:10 - 30 秒
- 常见端口:80/443
MMS
MMS(Microsoft Media Server Protocol,微软媒体服务协议)是微软公司开发的一种流媒体协议。MMS主要用于流式应用(Streaming Media),包括音频、视频、图像等多媒体数据。
- 底层协议:UDP和TCP
- 应用级视频流协议
- 视频编解码器:H.264
- 音频编解码器:Windows Media Video
- 延迟:几秒到几十秒
- 常见端口:1755
其他使用流媒体协议的技术介绍
WebRTC
WebRTC(Web Real-Time Communication)是一种开放标准,允许网页浏览器之间进行实时的音频、视频和数据通信,无需安装额外的插件或第三方软件。它是由World Wide Web Consortium (W3C)和Internet Engineering Task Force (IETF)共同开发的,旨在通过简单的API集成,使得网页应用能够直接进行P2P(点对点)通信。
主要特点:
- 实时通信:支持浏览器间的实时音频、视频和数据传输。
- 点对点连接:能够直接在不同用户的浏览器之间建立连接,减少服务器负载和延迟。
- 无插件:所有功能都内置于支持WebRTC的浏览器中,无需下载或安装额外软件。
- 高度安全:利用安全的协议,如DTLS(Datagram Transport Layer Security)和SRTP(Secure Real-time Transport Protocol)来保护通信数据。
核心组件:
- MediaStream:获取用户媒体信息,如摄像头和麦克风输入。
- RTCPeerConnection:建立和维护两个浏览器之间稳定的通信连接。
- RTCDataChannel:允许浏览器之间交换任意数据,支持高吞吐量和低延迟的数据通信。
关联协议:
- ICE(Interactive Connectivity Establishment):负责找到两个终端之间最有效的通信路径。
- STUN(Session Traversal Utilities for NAT):用于NAT穿透,允许在私有网络后的设备发现其公共地址。
- TURN(Traversal Using Relays around NAT):在STUN不足以建立连接时,作为备用方案,提供中继服务器以确保连接的建立。
- SDP(Session Description Protocol):用于在通信双方之间协商媒体参数。
- DTLS:在UDP上提供安全层,用于加密媒体和数据通道。
- SRTP:用于加密和认证实时传输的音视频流。
P2P
P2P(Peer-to-Peer)是一种分布式网络架构,它允许网络中的每个节点既作为数据的提供者(服务器)也作为接收者(客户端)。这种架构使得数据(如视频和音频流)可以在没有中央服务器的情况下直接在用户之间传输,从而提高了数据传输的效率和可扩展性。
主要特点:
- 分布式传输:数据直接在用户之间传输,减少了中央服务器的负载。
- 可扩展性:随着网络中节点数量的增加,网络的总体带宽也相应增加。
- 成本效益:节省了建立和维护大型中央服务器的成本。
- 抗脆弱性:由于缺乏中心化的结构,网络更能抵抗单点故障和攻击。
核心技术和协议:
- BitTorrent:一种广泛使用的P2P文件分享协议,也被用于流媒体技术,如BitTorrent Live。
- WebRTC:虽然通常用于浏览器之间的实时通信,但其数据通道(RTCDataChannel)也可以用于P2P流媒体传输。
- Ace Stream:结合了BitTorrent协议和VLC媒体播放器技术的P2P流媒体解决方案。
- IPFS (InterPlanetary File System):一种分布式文件系统,通过创建一个持久的、全球性的点对点网络来存储和共享数据。
- SopCast 和 PPLive (PPStream):基于P2P技术的流媒体平台,主要用于直播电视和视频。
ONVIF
ONVIF协议本身定义了一系列用于网络视频兼容性的规则和接口,包括设备发现、媒体配置、IP管理、服务能力、事件管理、PTZ(云台摄像头)控制等。对于流媒体的传输,ONVIF通常使用RTSP(Real Time Streaming Protocol)作为其底层传输协议。
RTSP负责建立和控制媒体流的传输,允许用户在不同的时间点开始播放,以及暂停和停止播放。RTSP是一个应用层协议,它建立和控制两个端点之间的一对一的连接,使得客户端可以实时地从服务器请求数据流。
流媒体相关著名项目
FFmpeg
VLC
live555
EasyDarwin
NGINX-RTMP
ZLMediaKit
参考
https://github.com/0voice/audio_video_streaming/blob/main/article/008-流媒体协议介绍.md
音视频解码介绍参考:常见的流媒体协议-音视频开发中文网 (0voice.com)
漏洞悬赏计划:涂鸦智能安全响应中心(https://src.tuya.com)欢迎白帽子来探索。