解密:EasyGBS如何做到低延迟播放?
播放器如果要提供播放效率和秒开其实本质上是做好解复用(Demux) , Demux是指解析视频的封装格式 , 得到包含的音视频原始码流 , Demux时间越短 , 就越快得到视频流 , 从而加快秒开速度 , 实现我们想要的低延迟播放的效果 。
文章图片
文章图片
以TSINGSEE青犀视频流媒体平台为例 , EasyGBS中的Demux过程主要是解析RTP负载数据 , 每个RTP包 , 去除头部12字节头部数据后就是负载数据(真实数据) 。由于国标视频基本都是封装为PS流格式 , 所以需要解复用PS流 , 从PS流里得到原始视频数据 。
对于PS流的Demux有两个方法 , 一个是自己熟悉过程自己操刀自己写 , 还有一个方法是使用ffmpeg 。对于ffmpeg如何DemuxPS流 , 可以参考ffmpeg的avio_reading例子 , 通过探测流的方式DemuxPS流 。如果是使用ffmpeg做PS流的Demux , 有几点需要注意:由于ffmpegDemux未知流时 , 需要探测一定大小数据 , 甚至会尝试解码未知流 , 这个过程如果不做优化会耗时很久 。
文章图片
文章图片
【解密:EasyGBS如何做到低延迟播放?】EasyGBS在DemuxPS流需要搜索各种头部 , 由于存在丢包等异常情况 , 所以搜索头部太久时需要做处理 , 丢弃无用的数据 , 避免耗时太久 。由于PS中包长度都是用两字节表示 , 长度为216 , 所以我们可以设置一个值 , 比216大一点 , 当搜索的字节数大于这个值还没搜索一个PS流的包头(0x000001开头) , 此时就要丢弃之前数据 , 处理新数据 , 因为之前数据很大可能丢包或其他问题 。
Demux得到原始视频码流后就可以开始解码了 , 能硬解码就硬解码 , 因为硬解码速度会优于软解 , 特别是在多路解码时 。
解码得到YUV或RGB数据后 , 我们需要渲染到屏幕显示 , 这是最后一步了 。
渲染也存在是否硬件加速的区别 。比如Windows平台 , 优先D3D硬件加速渲染 , 充分发挥显卡的能力 , 加快渲染速度 。如果前面解码是用硬解码 , 此时也必须硬件加速渲染 , 否则又要搬运显存中的硬解数据到内存 。由于解码后的数据一般较大 , 所以这个过程很耗时 , 同时影响性能 , 提高CPU占用率 。
- 人类与AI如何共处?诺奖科学家、将棋天才、“低欲望社会”提出者的不同解答
- 英雄联盟手游狗头强度如何(英雄联盟手游内瑟斯技能属性分析)
- 坎公骑冠剑迷宫12如何通关(坎公骑冠剑迷宫12过关玩法分享)
- 江南百景图朝板经验如何获取(江南百景图朝板经验获得方法详解)
- 漫威超级战争毒液如何出装(漫威超级战争毒液装备搭配建议)
- 复苏的魔女异界之境奖励如何获得(复苏的魔女异界之境奖励领取途径分享)
- 原神2.0圣遗物如何转化(原神2.0圣遗物转化方法说明)
- 摩尔庄园手游果汁摇摇吧果汁如何获取(摩尔庄园果汁摇摇吧果汁制作方法说明)
- 空匣人型好感度如何提升(空匣人型好感度快速提升途径一览)
- 斗罗大陆h5小暑解暑活动如何参与(斗罗大陆h5小暑解暑活动攻略一览)