前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何让短视频做到”秒播“?(上)

如何让短视频做到”秒播“?(上)

作者头像
云豹通讯员
修改2020-03-16 19:01:10
2K0
修改2020-03-16 19:01:10
举报
文章被收录于专栏:直播那些事儿

和直播一样,短视频想要做到“秒播”,不仅仅是要在短视频小程序源码上做优化,还要在服务器上做优化。移动设备的视频播放器是通过某个视频url域名,通过DNS服务请求到IP地址,通过这个IP地址与视频服务器建立TCP链接,在连接之上建立http协议,最终请求到数据,通过播放器进行解析,用户看到画面听到声音,一个短视频的起播流程就结束了。

那么从这个起播过程入手,可以对以下环节做优化:

一、域名解析

耗时原因:DNS请求包会先发到本地DNS服务器,如果查不到,会递归到根域名服务器,这个过程是比较耗时的。如果请求过了,或者期间有其他方请求过相同的域名,那域名服务器就会有缓存,再次请求的时候就很快了;但是一般缓存的周期很短,需要有人不停地请求才能保持更新,所以具有很大的不确定性。

解决方案:1、注意请求使用的IP协议版本,不管是直播还是短视频,做播放的肯定都绕不过ffmpeg,在ffmpeg里为了兼容性,DNS请求的IP协议版本设置为AF_UNSPEC,这样在请求的时候会先请求IPv6的地址,如果没有再请求IPv4的地址,是很保险,但是在实际的项目中,没有IPv6的地址,造成一直递归到根域名服务器也查不到IPv6地址,极大的浪费了时间,可以使用AF_INET指定请求IPv4地址,节省一半以上的时间,首次请求或缓存过期后请求,耗时大概在大几十毫秒到100毫秒左右。

2、预置或预解析域名IP地址,对于实现秒内播放来说,100毫秒还是很大一笔时间,这个方案就是提前把域名解析出来,这个方案就是提前把域名解析出来,用的时候直接使用IP地址。但是这种方案有局限性,可能适合特定的音视频直播,对于短视频播放地址比较多样来说操作起来有一定难度,而且还存在CP切流和更换接入CP的情况。

二、Socket buffer

耗时原因:TCP connection在客户端的具体操作中基本都是通过socket实现的。在socket中有一个缓冲区的概念,发送端先把数据写到缓冲区,接收端数据也是先经过缓冲区,再从缓冲区读出,移动设备作为接收端,接收端缓冲区设置的太小,影响效率,接收端缓冲区设置的太大,会短时间内消耗带宽,如果带宽不够会引起网络传输问题,还会造成流量的浪费。这些都会影响首屏数据的及时送达。

解决方案:根据实际情况调整接收端缓冲区大小,通过计算和测试数据得到一个比较合理的值。可以在ffmpeg的network和tcp里进行调整,这是比较低层的修改了,为了通用性可以扩展http/tcp的选项并通过ffmpeg提供的AVDictionary机制在avformat API这一层进行透传相关设置参数。

三、Probe buffer

耗时原因:播放端一开始并不能得到要播放的视频的相关信息,比如封装格式、分辨率,音视频编码等信息,需要先读一段数据进来,再对这段数据进行探测,从而得出相应的信息。而存放这段探测数据需要一个buffer,这个buffer若设置的太小可能导致分析不出信息导致重新探测,但是若设置的太大就会增加收流的时间从而影响了首屏的播放,所以太小太大都会引起延迟。

解决方案:根据实际情况调整这个buffer,通过计算和测试数据得到一个比较合理的值。可以通过ffmpeg的AVFormatContext结构体的probesize和max_analy_duration把对buffer的限制透传下去。

以上就是让短视频做到”秒播”的一些解决方案,由于篇幅的原因,剩余的几个方面我们留到下期再说。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云点播
面向音视频、图片等媒体,提供制作上传、存储、转码、媒体处理、媒体 AI、加速分发播放、版权保护等一体化的高品质媒体服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档