EasyDarwin

面向企业级的流媒体平台框架

EasyDarwin开始于2013年,遵循 Apple开源License APSL,为了敏捷流媒体服务器开发和简化企业流媒体应用开发而诞生的。

详细 >>

EasyDarwin手机直播是如何实现快速显示视频的?


打开手机直播立即就能显示出主播视频,其实就是最基本的关键帧索引/推送,在用户打开直播,请求直播流的时候,服务器将缓存中最新的关键帧开始推送给客户端...

前言

经常有人提到最近比较火的映客直播、花椒直播这种,是如何做到在打开手机直播中的某一个主播房间后,立即就能显示出主播视频,非常非常快,而且延时也比较小,是怎么做到的?

其实,这并不是什么高深的技术,就是最基本的关键帧索引/推送,在用户打开直播,请求直播流的时候,服务器将缓存中最新的关键帧开始推送给客户端,那么客户端收到关键帧就能够立即解码显示,一个720p的关键帧,一般的十几k,即使在网速不好的情况下,也是秒秒钟内就能下载完成,下载完成就能立即显示,这样就是快速第一时间出画面的效果了;

服务器端处理

我们在EasyDarwin服务端将接收到的推送端推送的数据都以队列的形式进行缓冲,我们在缓冲的同时,对帧进行过滤,区分音/视频RTP包和I/P视频帧,我们每次都将最新的I帧位置在Queue中进行标记,这样在每一个直播推送分发的时候,我们都从最新的I关键帧开始推送,这样既保证了能够第一时间显示画面,又能够非常低延时低进行直播分发,具体算法如图所示:

EasyDarwin关键帧推送算法

显示效果

7.gif

版本及源码下载

流媒体服务器EasyDarwin:https://github.com/EasyDarwin/EasyDarwin

手机直播推送端EasyPusher:https://github.com/EasyDarwin/EasyPusher

手机直播客户端EasyClient:https://github.com/EasyDarwin/EasyClient

遗留问题

其实这里还有一个问题遗留,就是在视频检索到最新的关键帧开始发送的时候,而且音频队列还是从头开始发送给客户端的,这样当缓冲区开的比较大的时候,就会有很多无用的音频数据分发到客户端了,其实这里在做视频帧定位的时候,也要做一下音频帧的定位,不过这个还没想好怎么做,后续再完善!



------------------------------ 分割线 ------------------------------
本站文章除注明转载外,均为本站原创或编辑,欢迎大家转载,但请务必注明出处,尊重他人成果,谢谢。
转载请注明:EasyDarwin;非本站文章均来自互联网,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。
文章中如果有错误可联系:johnson@easydarwin.org
推荐文章
安防和移动互联网行业比较火热的移动端手机......>
有人问到像美拍、秒拍这些短视频拍摄是怎么......>
最近更新
Easydarwin中大量使用gettimeofday来获取系......>
最近很多EasyDarwin爱好者提出了手机移动端......>
第一个到达的音频RTP包就将作为音频的关键帧......>
打开手机直播立即就能显示出主播视频,其实就......>
h264的功能分为两层,视频编码层(VCL)和网......>
友情链接 | 申请链接
EasyDarwin官方微信!