前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Live555实现RtspServer及高清高码率视频传输优化

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

作者头像
hbstream
发布2018-08-30 18:00:29
3K0
发布2018-08-30 18:00:29
举报

基于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高清视频的流畅直播。


haibindev.cnblogs.com,合作请联系QQ。(转载请注明作者和出处~)


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-08-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基于Live555实现RtspServer及高清高码率视频传输优化
    • 为什么基于Live555开发
      • Live555架构和RTSP数据流程
        • Live555的核心模块
        • RTSP服务器和客户端的交互流程
        • Live555流媒体模块及服务端的处理流程
      • 高码率视频数据传输的优化点
      相关产品与服务
      云直播
      云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档