基于Live555实现RtspServer及高清高码率视频传输优化

基于Live555实现RtspServer及高清高码率视频传输优化

最近做了一些pc和嵌入式平台的RTSP服务器项目,大多数的要求是简单但是功能全面,并且性能还要强劲。综合考虑后,基本都是在基于live555的基础上进行开发,在进行Live555本身的优化以及程序内部视频数据传输的优化后,不仅实现了需求而且性能还超出预期,实现了8Mbps~10Mbps高码率的1080p高清视频的流畅直播。这里将一些优化点分享一下:

为什么基于Live555开发

其实之前我就已经开发过一个RTSP Server程序,并且写了一篇文章进行了介绍"一个RtspServer的设计与实现和RTSP2.0简介",不过当时开发的目的除了实现RTSP直播以外,主要目的还是简化代码以方便定制,因此并没有完全实现RTSP协议里的所有交互细节,要在它的基础上扩展全面,可能会拖延项目进展。基于项目考虑,选择了自己比较了解也认为比较优秀的RTSP开源项目Live555作为基础,开发RTSP Server程序。

Live555是一个跨平台的流媒体解决方案,以C++为开发语言,实现了RTSP包括服务器-客户端的整套结构,并且支持H.264, H.265, MPEG, AAC等多种视频和音频编码,是很知名的一个开源项目。作为RTSP Server,源码里只有对于本地文件的视频源,不过它的扩展性强,可以在Live555提供的一些基类基础上开发出适合自己项目需求的服务程序。

Live555架构和RTSP数据流程

Live555的核心模块

RTSP服务器和客户端的交互流程

Live555流媒体模块及服务端的处理流程

Live555的流媒体模块基本分为Source和Sink两大部分,当然他们也有一个共同的基类Medium。对服务器来说,Source为数据来源,Sink为数据输出,视频数据就通过MediaSource传递给MediaSink,最终通过RTPInterface网络传输给客户端。一下为服务端所用到的模块以及继承关系:

如同上图所示意的,通过完成自己的ServerMediaSubsession和MediaSource来实现将需要直播的H.264编码数据传递给live555,以实现RTSP直播。

高码率视频数据传输的优化点

对高清高码率的视频画面,每一帧的视频数据就会比较大,这个数值往往会超出live555内部默认的内存处理大小,因为对于live555的优化,主要就是集中在内存缓冲大小的扩大,以及避免内存数据拷贝。以下为根据实际开发和测试所总结出来的有效的优化点:

  1. 扩展帧解析buffer大小,即BANK_SIZE,默认值为150k,根据传输的H264数据帧大小,至少设置为300k。否则超出大小,可能会被Live555抛弃。
  2. 增加OutPacketBuffer::maxSize大小,同样为了容纳超大帧数据,否则可能会导致数据丢失。
  3. 在RTPInterface中,增加socket发送缓冲区大小,即increaseSendBufferTo函数的参数值
  4. 对MultiFramedRTPSink::sendPacketIfNecessary中,可以直接调用sendNext尝试组建RTP报文发送数据包,这样修改的优点是已读取的数据会被尽快发送出去,不过也多占用一些线程时间。
  5. 对于应用程序将数据从自己的线程传递给Live555的时候,应该尽量减少内存拷贝,最好是通过内存池的形式,以避免拷贝内存阻塞Live555事件循环

经过以上修改,以及应用程序内部代码的优化,在实际应用中,已经实现了8Mbps~10Mbps高码率的1080p高清视频的流畅直播。

本文福利, 免费领取C++音视频学习资料包+学习路线大纲、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

相关推荐
小猴子爱上树2 分钟前
跨境电商AI图片翻译工具:批量图片翻译、视频字幕翻译与智能抠图一站式解决
大数据·人工智能·python·音视频
弈语道破AI2 小时前
一稿出片!双十一品牌宣传AI视频生成工具推荐:即梦 Seedance 2.5 全球首发
人工智能·音视频
赛博仓鼠2 小时前
Vidu Q4 Preview实测:15张参考图+3段音频驱动,2K/4K输出,国产视频生成新标杆
ai·aigc·音视频
小猴子爱上树3 小时前
跨马翻译:批量图片翻译+视频字幕+智能抠图,一站式跨境电商翻译工具
python·音视频
ofoxcoding4 小时前
Gemini TTS 与 ElevenLabs 语音合成实测:同一段视频旁白效果对比
ai·ffmpeg·音视频
I Am a robert girl4 小时前
从最后一帧反推世界:LIFT 如何用布局控制视频生成
深度学习·数码相机·计算机视觉·音视频·视频生成·可控生成·布局控制
烟雨江南7854 小时前
灵声智库-招投标会议语音识别怎么做?实时转写、多人发言与会议留痕方案
人工智能·音视频·语音识别·ai客服
EasyGBS13 小时前
摄像头还在线,画面已经不能用了?国标GB28181视频平台EasyGBS视频质量诊断怎么用
服务器·安全·音视频
2601_9556624613 小时前
情感解说视频如何提升感染力?配音细节很关键
人工智能·音视频·语音识别·视频