解密:EasyGBS如何做到低延迟播放?
播放器如果要提供播放效率和秒开其实本质上是做好解复用(Demux),Demux是指解析视频的封装格式,得到包含的音视频原始码流,Demux时间越短,就越快得到视频流,从而加快秒开速度,实现我们想要的低延迟播放的效果。
以TSINGSEE青犀视频流媒体平台为例,EasyGBS中的Demux过程主要是解析RTP负载数据,每个RTP包,去除头部12字节头部数据后就是负载数据(真实数据)。由于国标视频基本都是封装为PS流格式,所以需要解复用PS流,从PS流里得到原始视频数据。
对于PS流的Demux有两个方法,一个是自己熟悉过程自己操刀自己写,还有一个方法是使用ffmpeg。对于ffmpeg如何Demux PS流,可以参考ffmpeg的avio_reading例子,通过探测流的方式Demux PS流。如果是使用ffmpeg做PS流的Demux,有几点需要注意:由于ffmpeg Demux未知流时,需要探测一定大小数据,甚至会尝试解码未知流,这个过程如果不做优化会耗时很久。
EasyGBS在Demux PS流需要搜索各种头部,由于存在丢包等异常情况,所以搜索头部太久时需要做处理,丢弃无用的数据,避免耗时太久。由于PS中包长度都是用两字节表示,长度为216,所以我们可以设置一个值,比216大一点,当搜索的字节数大于这个值还没搜索一个PS流的包头(0x000001开头),此时就要丢弃之前数据,处理新数据,因为之前数据很大可能丢包或其他问题。
Demux得到原始视频码流后就可以开始解码了,能硬解码就硬解码,因为硬解码速度会优于软解,特别是在多路解码时。
解码得到YUV或RGB数据后,我们需要渲染到屏幕显示,这是最后一步了。
渲染也存在是否硬件加速的区别。比如Windows平台,优先D3D硬件加速渲染,充分发挥显卡的能力,加快渲染速度。如果前面解码是用硬解码,此时也必须硬件加速渲染,否则又要搬运显存中的硬解数据到内存。由于解码后的数据一般较大,所以这个过程很耗时,同时影响性能,提高CPU占用率。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
2019-10-25 GB/T28181国标视频流媒体服务器EasyGBS流媒体服务器设备注册成功却无法播放问题解析
2019-10-25 国标GB/T28181视频流媒体服务器4摄像头视频无插件直播方案对接过程中前端设备正常上线但视频无法播放问题解决
2019-10-25 国标GB/T28181流媒体服务器安防摄像头互联网直播流媒体解决方案EasyGBS对接海康8300步骤介绍