ESP-Media-Protocols 组件
概述
多媒体协议是多种通信协议的集合,广泛应用于流媒体传输、设备控制以及设备互联通信等场景,典型应用方式如下:
安防系统大多数网络摄像头都内置 RTSP 服务器,将采集的视频压缩后使用 RTP 协议对外提供视频流,允许监控平台、NVR、VLC 播放器等进行访问拉流;
GB28181(全称:GB/T 28181-2016),中国公安部发布的国家标准,定义了公共安全视频监控联网系统的信息传输、交换和控制技术要求,基于 SIP 协议完成设备注册、心跳、呼叫等信令控制,使用 SDP 描述媒体会话信息,使用 RTP 和 RTCP 实时传输和控制媒体数据;
VoIP、视频会议、可视对讲系统,基于 SIP 协议完成呼叫和语音、视频通信功能;
广播系统、直播平台,设备采集媒体流后基于 RTMP 协议向服务器推流,多客户端设备基于 RTMP 协议从服务器拉流并播放。
ESP-Media-Protocols 是乐鑫科技推出的多媒体协议库,提供对基础及主流多媒体协议的支持。
协议 |
层级 |
功能 |
常见应用场景 |
|---|---|---|---|
RTP/RTCP |
传输层 |
实时传输音视频流,提供质量信息 |
网络摄像头、实时通话/会议的媒体数据的低延时传输,RTCP 提供传输质量统计 |
RTSP |
应用层 |
作为服务器支持被拉流,作为客户端支持拉流和推流 |
网络摄像头的媒体数据的低延时单向传输、播放控制 |
SIP |
应用层 |
会话终端,支持注册到 SIP 服务器,支持发起/接收会话、即时消息、通话中动态调整,以及 SDES-SRTP 媒体加密协商 |
对讲机、电话终端之间媒体数据的低延时双向传输,通过会话管理实现对讲、会议、设备控制与业务通知;可对 RTP 媒体做加密与认证 |
RTMP |
应用层 |
作为服务器支持被拉流和接收推流,作为客户端支持拉流和推流 |
直播推流与后端分发(设备向直播服务器/平台推流),直播接入 |
MRM |
/ |
多设备主从同步播放音乐 |
多房间音频同步播放(智能音箱、家庭影院多设备同步) |
UPnP |
/ |
设备互联,媒体和服务共享 |
家庭内设备发现与媒体共享(手机/PC 发现电视/NAS 并投屏或播放) |
性能数据
协议 |
实时性 |
数据流 |
控制流 |
设备发现 |
TLS 加密 |
复杂度 |
|---|---|---|---|---|---|---|
RTSP |
高 |
是 |
是 |
手动 |
否 |
中 |
SIP |
高 |
是 |
是 |
手动 |
是 |
中 |
RTMP |
中 |
是 |
基础 |
手动 |
是 |
中 |
MRM |
高 |
是 |
是 |
自动 |
否 |
低 |
UPnP |
低 |
是 |
是 |
自动 |
否 |
中 |
可通过以下图流轻松初步辨别要使用的协议:
新增功能与典型应用
随着组件持续迭代,ESP-Media-Protocols 在 SIP 会话管理和媒体传输方面新增了以下能力:
新增能力 |
功能说明 |
典型应用场景 |
|---|---|---|
即时消息(MESSAGE) |
无需建立媒体通话,即可在 SIP 会话中收发消息 |
设备控制指令下发、业务通知与告警推送(如门禁开门、报警提示、状态上报) |
通话中动态调整(re-INVITE) |
在已建立的通话中动态开启/关闭音视频、切换编解码器、更新 NAT、刷新会话时长 |
可视对讲从纯语音升级为视频通话、通话中切换音视频、长通话保活 |
JPEG over RTP(RFC2435) |
支持标准 RFC2435 的 JPEG(MJPEG)over RTP 组装与解析 |
与标准网络摄像头/监控设备互通,传输 MJPEG 视频流 |
多域注册 |
同一 SIP 服务器上可按不同域进行注册与隔离 |
多租户、多区域/多楼栋部署,设备按域归属管理 |
设备兼容性增强 |
支持自定义及协商得到的动态 RTP Payload Type |
提升与不同厂商第三方设备的互联互通能力 |
SDES-SRTP(SIP) |
在 SIP 通话中可对媒体流加密与认证,支持关闭、优先加密、强制加密三种策略 |
可视对讲、VoIP、会议等需要对媒体面做保护的场景(信令 TLS 之外) |
实时性
低延迟:用于控制或命令传输的数据,延迟约 20 ms。
低延迟:音视频或其他媒体流传输,延迟约为 300 ms。
中延迟:基于 RTMP 的直播流,延迟约为 2 秒。
安全性
TLS(可选,信令)
MD5 摘要鉴权(SIP 强制)
SIP 媒体面 SDES-SRTP(可按场景选择是否加密)
扩展性
可定制协议头和协议体
支持订阅和通知,可注册服务
并发性
支持多客户端连接(RTMP)
兼容性
SIP 支持 linphone、Asterisk FreePBX、Freeswitch、Kamailio
RTSP 支持 ffmpeg、vlc、live555、mediamtx
RTMP 支持 ffmpeg、vlc
UPnP 支持网易云音乐
媒体支持
请参考 README
内存消耗数据
请参考 README
使用方法
ESP-Media-Protocols 组件托管在 Github。可以通过在工程中输入以下命令将该组件添加到你的工程中。
idf.py add-dependency "espressif/esp_media_protocols^0.5.1"
在使用 ESP-Media-Protocols 组件前,建议先参考和调试以下示例工程,以熟悉 API 的使用方法以及协议栈的具体应用。
FAQ
Q: ESP-Media-Protocols 支持的协议和功能全吗?
A: ESP-Media-Protocols 目前支持在嵌入式领域使用较广泛的基础协议和功能。HLS 播放不在本组件内,请使用 ESP Player 等播放组件。SIP 已支持 SDES-SRTP 媒体加密;RTSP/RTMP 的媒体面仍为明文(RTMP 信令可走 TLS)。已支持的协议规范会不断迭代以及扩展功能,我们也会同步更新以及根据客户需求考虑扩展,后续对一些强功能的新协议也会计划实现支持。
Q: 有些协议功能重叠,在使用的时候如何选择?
A: 根据应用场景,具体分析功能要求、延迟要求和网络环境。如实时性要求较高,且需要支持实时控制(暂停、快进、快退、定位)的应用,通常使用 RTSP;如实时性要求较高,且需要支持实时互动的应用,则可以使用 SIP 创建会话;如在浏览器中播放的大规模直播,对稳定性和兼容性要求较高,对实时性没有高要求,则可以考虑使用 RTMP。
更多相关问题请参考以下协议目录中的 Issues 板块
相关协议参考
RFC3711 The Secure Real-time Transport Protocol (SRTP)