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 服务器,支持发起会话和接收会话 |
对讲机、电话终端之间媒体数据的低延时双向传输,通过会话管理实现对讲、会议 |
RTMP |
应用层 |
作为服务器支持被拉流和接收推流,作为客户端支持拉流和推流 |
直播推流与后端分发(设备向直播服务器/平台推流),直播接入 |
MRM |
/ |
多设备主从同步播放音乐 |
多房间音频同步播放(智能音箱、家庭影院多设备同步) |
UPnP |
/ |
设备互联,媒体和服务共享 |
家庭内设备发现与媒体共享(手机/PC 发现电视/NAS 并投屏或播放) |
性能数据
协议 |
实时性 |
数据流 |
控制流 |
设备发现 |
TLS 加密 |
复杂度 |
|---|---|---|---|---|---|---|
RTSP |
高 |
是 |
是 |
手动 |
否 |
中 |
SIP |
高 |
是 |
是 |
手动 |
是 |
中 |
RTMP |
中 |
是 |
基础 |
手动 |
是 |
中 |
MRM |
高 |
是 |
是 |
自动 |
否 |
低 |
UPnP |
低 |
是 |
是 |
自动 |
否 |
中 |
可通过以下图流轻松初步辨别要使用的协议:
实时性
低延迟:用于控制或命令传输的数据,延迟约 20 ms。
低延迟:音视频或其他媒体流传输,延迟约为 300 ms。
中延迟:基于 RTMP 的直播流,延迟约为 2 秒。
安全性
TLS(可选)
MD5 摘要鉴权(SIP 强制)
扩展性
可定制协议头和协议体
支持订阅和通知,可注册服务
并发性
支持多客户端连接(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 目前支持在嵌入式领域使用较广泛的基础协议和功能。还有一些未支持的协议如 SRTP、HLS 等,可以在其他组件或仓库下找到和使用。已支持的协议规范会不断迭代以及扩展功能,我们也会同步更新以及根据客户需求考虑扩展,后续对一些强功能的新协议也会计划实现支持。
Q: 有些协议功能重叠,在使用的时候如何选择?
A: 根据应用场景,具体分析功能要求、延迟要求和网络环境。如实时性要求较高,且需要支持实时控制(暂停、快进、快退、定位)的应用,通常使用 RTSP;如实时性要求较高,且需要支持实时互动的应用,则可以使用 SIP 创建会话;如在浏览器中播放的大规模直播,对稳定性和兼容性要求较高,对实时性没有高要求,则可以考虑使用 RTMP。