EasyDarwin手机直播是如何实现的快速显示视频的方法
前言
经常有人提到最近比较火的映客直播、花椒直播这种,是如何做到在打开手机直播中的某一个主播房间后,立即就能显示出主播视频,非常非常快,而且延时也比较小,是怎么做到的?
其实,这并不是什么高深的技术,就是最基本的关键帧索引/推送,在用户打开直播,请求直播流的时候,服务器将缓存中最新的关键帧开始推送给客户端,那么客户端收到关键帧就能够立即解码显示,一个720p的关键帧,一般的十几k,即使在网速不好的情况下,也是秒秒钟内就能下载完成,下载完成就能立即显示,这样就是快速第一时间出画面的效果了;
服务器端处理
我们在EasyDarwin服务端将接收到的推送端推送的数据都以队列的形式进行缓冲,我们在缓冲的同时,对帧进行过滤,区分音/视频RTP包和I/P视频帧,我们每次都将最新的I帧位置在Queue中进行标记,这样在每一个直播推送分发的时候,我们都从最新的I关键帧开始推送,这样既保证了能够第一时间显示画面,又能够非常低延时低进行直播分发,具体算法如图所示:
显示效果
版本及源码下载
- 流媒体服务器EasyDarwin:https://github.com/EasyDarwin/EasyDarwin
- 手机直播推送端EasyPusher:https://github.com/EasyDarwin/EasyPusher
- 手机直播客户端EasyClient:https://github.com/EasyDarwin/EasyClient
遗留问题
其实这里还有一个问题遗留,就是在视频检索到最新的关键帧开始发送的时候,而且音频队列还是从头开始发送给客户端的,这样当缓冲区开的比较大的时候,就会有很多无用的音频数据分发到客户端了,其实这里在做视频帧定位的时候,也要做一下音频帧的定位,不过这个还没想好怎么做,后续再完善!
获取更多信息
Copyright © EasyDarwin.org 2012-2016
分类:
流媒体服务器
, EasyDarwin
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术