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