1
业务背景
360媒体网关连接各类视频源,支持实时监控、直播和点播,实现多协议转换和高效流管理,满足不断增长的用户需求,提升安全性和用户体验。
随着物联网(IoT)技术的迅猛发展,越来越多的监控设备接入流媒体网关,实现实时视频传输和远程监控。这些设备通过流媒体网关,能够将采集的视频数据快速转发到云端或本地服务器,确保用户可以随时随地访问监控画面,提高安全性和响应速度。
与此同时,直播流媒体的需求持续上升,尤其是在社交媒体、在线教育和游戏直播等领域。流媒体网关在此过程中扮演着重要角色,支持多种协议(如 RTMP、RTSP 和 WebRTC),为用户提供低延迟、高清晰度的直播体验,满足高并发访问的需求。
此外,点播视频的接入也在流媒体网关的服务范围内。通过将视频文件上传至网关,用户可以实现便捷的点播播放。
流媒体网关能有效管理视频内容,支持多种格式和分发协议,确保视频流畅传输,提升用户体验。
综上所述,流媒体网关为 IoT 监控、直播和点播等业务场景提供了高效、稳定的解决方案,推动了各行业的数字化转型与智能化升级。
媒体网关服务承载着视频源的输入和多媒体协议转出,客户视频流拉取等功能,大规模并发场景中
对于服务带来两个技术挑战:
多协议支持:流媒体网关通常需要支持 RTMP、RTSP、HLS、WebRTC 等多种协议,不同协议的媒体源格式和传输方式有所不同,管理起来复杂度较高且管理不当需要消耗较高的资源。
高效的媒体流管理:高效的媒体流管理实现实时传输、低延迟,确保流畅播放和高并发访问,提升用户体验。
2
多协议支持
在流媒体网关中,协议转换的核心任务是将一种协议的媒体流实时转换为另一种协议的流,以适应不同客户端和传输场景的需求。360流媒体网关提供了对多种协议的支持,包括 RTSP、RTMP、HLS、HTTP-FLV 和 WebRTC。这些协议各自有其优势和适用场景,协议转换的任务是确保流媒体内容可以以不同的形式分发到多种终端设备。
1. 协议的不同特性
RTSP(Real Time Streaming Protocol):一种常用于监控摄像头的实时流协议,基于 TCP 或 UDP 传输,具有较低延迟的特点。
RTMP(Real-Time Messaging Protocol):由 Adobe 开发,用于流媒体发布和传输,广泛用于直播,延迟相对较低,但需要特定的播放器支持。
HLS(HTTP Live Streaming):基于 HTTP 的流媒体分发协议,由苹果提出,主要用于视频点播和直播,支持广泛但延迟较高。
HTTP-FLV:一种通过 HTTP 分发 FLV 格式流的协议,主要用于低延迟直播。
WebRTC:一种点对点的实时通信协议,通常用于视频通话和实时互动直播,延迟最低。
2. 协议转换的实现
在媒体网关中,协议转换通过媒体源的抽象层来实现。无论输入源是何种协议,都会被转换成一个统一的 MediaSource 对象。然后,系统可以根据不同的客户端请求,将这个媒体源实时编码、封装为其他协议。
具体的步骤如下:
第一步:媒体源抽象
媒体网关使用 MediaSource 作为统一的媒体流管理对象,捕获音视频数据,并抽象出视频轨道和音频轨道,音视频轨道包含了原始的编码格式(如 H.264 或 AAC)以及流的时间戳信息等
第二步:编码保持不变
在协议转换过程中,媒体网关并不改变媒体流的编码格式。比如,RTSP 流中的 H.264 编码视频和 AAC 编码音频不会被重新编码,而是直接封装到不同的协议中。这种方式减少了 CPU 负担和延迟。
第三步:通过MediaSourceMuxer管理协议转换
第四部:生成协议媒体源
下面是以H.264 frame作为视频源流程例子,视频媒体源的流转图。
对推到媒体网关的流,都会固定的产生FMP4MediaSource(对应MP4协议),RTMPMediaSource(对应rtmp),RTSPMediaSource(对应rtsp),TSMediaSource(对应TS),MP4Recorder(mp4存储,按需产生),HLSRecorder(对应HLS),RingBuffer(音视频缓存数据)。
在这几个MediaSource中,缓存的就是对应的格式的包,比如RTMPMediaSource的RingBuffer中为RTMPPacket,TSMediaSource的RingBuffer中为TSPacket。
协议转换过程中,如何保持较低的延迟是一个关键问题。流媒体网关通过以下几种方式来降低转换过程中的延迟:
保持编码原始性:不对音视频轨道进行重新编码,而是只进行协议封装转换。
缓存管理:减少数据缓存,确保音视频数据能尽快从输入源传输到客户端。
并发处理:通过多线程或异步处理机制,加快协议转换和流分发的速度。
3
高效的媒体流管理
缓存是流媒体网关中的一个关键优化手段。由于流媒体系统通常需要处理大量并发用户的请求,如何高效地管理媒体源、避免重复解析流数据成为了提高性能的关键。流媒体网关在缓存管理上进行了诸多优化,以确保在大规模流媒体场景下仍能高效运行。
网关服务在每个媒体源接入时会生成一个对应的 MediaSource 对象,这个对象包含了流的所有信息,并会被缓存到内存中以便快速查找。当一个客户端请求某个流时,流媒体网关会首先在缓存中查找是否已经存在该 MediaSource。
缓存命中:如果流已经存在于缓存中,则无需重新初始化或解析该流,而是直接从缓存中读取对应的媒体源并发送数据给客户端。
缓存未命中:如果缓存中没有找到该流,系统将会从输入源(如摄像头或远程服务器)重新拉取流,并生成新的 MediaSource,然后缓存到内存中。
这种缓存机制大大减少了重复的流初始化工作,提升了并发用户访问流时的性能。
缓存就是多个unorder_map(streamid+app+vhost+schema 四元组确定媒体源)的嵌套,记录了流的信息和对应的MediaSource对象。当有需要该流时,会根据流信息在容器中找对应的MediaSource,每路推流(不同的stream id)都会这样的流程,产生几个对应协议的MediaSource对象,所以在媒体层面,不管该流是否有被消费(拉流),媒体层面的rtsp,rtmp,fmp4,ts数据都已准备好。那么在消息(拉流)时,只需要媒体信令完成,就可以直接发流了。
上面了解了推流的处理流程,那么查找命中缓存就比较好理解了,如下图:
以rtmp协议拉流,rtmp的信令协商处理最终会放到RtmpSession中处理,在协商完成后,会在s_media_source_map找到MediaSource,再通过MediaSource取到RingBuffer对象,通过调用RingBuffer对象的attach方法,打通转流。
在流媒体处理和传输过程中,数据的高效管理至关重要。媒体网关中的 RingBuffer(环形缓冲区)是一种用于高效存储和分发流媒体数据的核心组件。RingBuffer 的设计旨在解决多路并发读取场景下的数据缓存与调度问题,特别是在处理音视频数据流时,它能够在保持实时性的同时提供流畅的并发数据访问。
1. 什么是 RingBuffer?
RingBuffer 是一种环形的数据结构,具有固定的大小。它的特性是,当数据到达尾部时,如果有更多数据被写入,指针会回到起始位置,覆盖旧数据。这种设计使得 RingBuffer 在不断写入和读取时可以避免内存的频繁分配和释放,从而实现高效的内存管理和低延迟的数据传输。
媒体网关中的 RingBuffer 用于缓存流媒体数据(如音频帧、视频帧),并将这些数据高效地分发给多个消费者(例如多个并发观看同一流的客户端)。它通过高效的生产者-消费者模型,支持多路并发访问的场景,确保数据的低延迟和高吞吐。
2. 媒体网关中 RingBuffer 的主要功能
(1) 多消费者并发读取
在流媒体服务中,多个客户端可能同时观看同一个媒体流,这就要求系统能够高效地将同一份数据传递给多个客户端。媒体网关中的 RingBuffer 允许多个消费者(客户端)同时从环形缓冲区读取数据,而无需为每个客户端创建独立的数据拷贝,这种共享数据的设计极大减少了内存的占用,并且提高了并发处理能力。每个消费者有自己的读取指针,这样即使有多个客户端同时读取,也不会互相干扰。
(2) 高效的数据缓存和回放功能
由于 RingBuffer 是环形结构,当数据不断写入时,旧数据会被覆盖。这种机制使得 媒体网关可以实现对实时流数据的短期缓存。当新客户端加入观看时,系统可以提供一小段缓存的数据,从而实现"快速启动"或"回放"功能,使用户可以从最近几秒的内容开始观看,例如,当新客户端连接到一个正在直播的 RTSP 或 RTMP 流时,系统可以通过 RingBuffer 提供最近的几帧视频,使得用户立即获得流畅的观看体验,而不是等待新的关键帧到达。
3.RingBuffer缓存音视频逻辑
第一步:ringbuffer缓冲结构;以每一个新的IDR帧创建一个新的list,然后存放GOP list<list<pair node>>;当有新的reader接入的时候会先去storge中读取用于秒开的GOP缓冲。如果是已经在观看的reader,ringbuffer来一帧数据就会直接送reader显示(并保存一份数据用于新reader接入的时候进行秒开)
第二步:一个媒体源只有一个storge,来缓冲用于秒开的GOP,但use_gop变量可以单独设置每一个过来拉流的reader是否刷新前向GOP;(有些场景可能并不需要秒开。避免帧数据重叠)
第三步:点播的时候默认是不刷GOP的,因为点播是根据客户端拉流创建MP4媒体源的,不需要再刷新下GOP;这里注意点播如果点播中有seek相关命令,可能会造成输出帧重复(逻辑原因MP4点播启动定时器读数据是单独的线程,seek 后可能会跳回文件头,或者已经被读数据线程读过的位置)
4
总结
拉流压力测试:
机器配置:内存64G,CPU24核。
工具:自动化程序模拟拉流,观察拉流连接维持情况。
拉流测试:
推流:1路。
拉流:10000路.
结论:能稳定支持1万路拉流同时连接。CPU:800%,内存:80M。
推流:1路。
拉流:20000路.
结论:能稳定支持1万路拉流同时连接。CPU:1700%,内存:170M。
推流:1路。
拉流:30000路.
结论:能稳定支持1万路拉流同时连接。CPU:2500%,内存:220M。
结论:主要和cpu配置有主要关系,内存占用不大。拉流500路CPU200%,250路CPU浮动在100%上下。
播放延迟测试:
拉流:5000路.
延迟:rtmp 378ms
拉流:10000路.
延迟:rtmp 505ms
拉流:20000路.
延迟:rtmp 567ms
拉流:30000路.
延迟:rtmp 8503ms
结论:30000个播放器已经快到单台的极限了,延迟相比20000路时大幅增加
综述:
目前媒体网关相对其他的媒体服务器存在五大优势
1.高并发:能够支持大量用户同时接入和观看,确保在直场景下不出现高延迟或频繁卡顿。
2.集群化:通过分布式架构实现多节点部署,多种部署模式(边缘+源站模式,主+备模式),提高系统的扩展性和负载均衡能力,确保在流量激增时依然稳定运行。
3.高性能:使用ringbuffer机制优化数据处理,提高网络传输效率的同时降低服务内存使用率,确保高质量的视频流的实时观看体验,同时有效管理带宽和资源使用。
4.多协议支持:兼容多种流媒体协议,满足不同设备和场景的需求,提升用户体验。
5.支持加密协议和私有化网络:支持私有化加密流媒体协议,保障用户数据的安全性。支持私有化部署,保障用户的数据控制和定制化需求。
更多技术和产品文章,请关注👆
如果您对哪个产品感兴趣,欢迎留言给我们,我们会定向邀文~
go
360智汇云是以"汇聚数据价值,助力智能未来"为目标的企业应用开放服务平台,融合360丰富的产品、技术力量,为客户提供平台服务。
目前,智汇云提供数据库、中间件、存储、大数据、人工智能、计算、网络、视联物联与通信等多种产品服务以及一站式解决方案,助力客户降本增效,累计服务业务1000+。
智汇云致力于为各行各业的业务及应用提供强有力的产品、技术服务,帮助企业和业务实现更大的商业价值。
官网:https://zyun.360.cn 或搜索"360智汇云"
客服电话:4000052360