互联网内容创新的道路上短视频源码必走的路
实际上,互联网的内容行业正在进阶,从文字、图片到视频、直播,再到能填补用户碎片时间的短视频开发,这是一个趋于互动性、实时性的迭代。
从4G普及、资费下调、编解码技术进步和移动硬件的品质提升,也为短视频的发展提供了良好客观因素。从产品形态层面看,短视频本身也拥有创作门槛低、内容精炼、易于发酵等属性,更易于传播。综合这几点,短视频源码创业才如此蓬勃。那作为国内领先的云服务厂商,释放更多技术能力,给开发者带来便利是阿里云义不容辞的责任。
功能说明
1.录制:支持断点录制、回删、点击拍摄、长按拍摄、美颜、实时滤镜、闪关灯、摄像头切换、分辨率设定等功能;
2.导入:支持从相册选择视频、按视频时长和画面进行裁剪;
3.上传:上传本地文件到阿里云视频点播平台。
核心优势
1.提供产品级SDK,最快2小时接入,节省自行开发耗费的人力物力,助你快速实现APP 短视频功能;
2.接口简单易用,开放性强,标准版(UI开源)可以根据业务自由定制UI;
3.录制功能自带断点录制、实时滤镜、高效美颜功能,支持本地视频导入压缩裁剪;
4.迭代打磨,稳定可靠,视频技术经钉钉、美柚、梨视频、迅雷、贝贝网、宝宝树、蚂蜂窝等1000+应用商用验证,稳定可靠;
基础知识:I帧、B帧、P帧
I帧表示关键帧。你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成。(因为包含完整画面)
P帧表示这一帧跟之前的一个关键帧(或P帧)的差别。解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)
B帧是双向差别帧。B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况)。换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。
B帧压缩率高,但是编解码时会比较耗费CPU,而且在直播中可能会增加直播延时,因此在移动端上一般不使用B帧。
短视频源码关键帧缓存策略
一个典型的视频帧序列为IBBPBBPBBP……
对于直播而言,为了减少直播的延时,通常在编码时不使用B帧。P帧B帧对于I帧都有直接或者间接的依赖关系,所以播放器要解码一个视频帧序列,并进行播放,必须首先解码出I帧,其后续的B帧和P帧才能进行解码,这样服务端如何进行关键帧的缓存,则对直播的延时以及其他方面有非常大的影响。
比较好的策略是服务端自动判断关键帧的间隔,按业务需求缓存帧序列,保证在缓存中存储至少两个或者以上的关键帧,以应对低延时、防卡顿、智能丢包等需求。
延迟与卡顿的折中
直播的延时与卡顿是分析直播业务质量时,非常关注的两项指标。互动直播的场景对延时非常敏感,新闻体育类直播则更加关注播放的流畅度。
然而,这两项指标从理论上来说,是一对矛盾的关系——需要更低的延时,则表明服务器端和播放端的缓冲区都必须更短,来自网络的异常抖动容易引起卡顿;业务可以接受较高的延时时,服务端和播放端都可以有较长的缓冲区,以应对来自网络的抖动,提供更流畅的直播体验。
当然,对于网络条件非常好的用户,这两项是可以同时保证的,这里主要是针对网络条件不是那么好的用户,如何解决延时与卡顿的问题。
这里通常有两种技术来平衡和优化这两个指标。
一是服务端提供灵活的配置策略,对于延时要求更敏感的,则在服务端在保证关键帧的情况下,对每个连接维持一个较小的缓冲队列;对于卡顿要求更高的直播,则适当增加缓冲队列的长度,保证播放的流畅。
二是服务端对所有连接的网络情况进行智能检测,当网络状况良好时,服务端会缩小该连接的缓冲队列的大小,降低延迟;而当网络状况较差时,特别是检测到抖动较为明显时,服务端对该连接增加缓冲队列长度,优先保证播放的流畅性。
从技术角度来讲短视频SDK架构,分为四个层面,底层拆分成一个一个组件,在这些组件上组建自己的业务组件,包括编辑和播放。在这之上,我们再提供比较稳定恩UI控件。这个架构有几个特点,我们提供产品级别的DEMO,用户可以不做任何修改直接上线,SDK的易用性比较强。底层是高度模块化的,开发者可以根据不同的业务场景来按需求打包,控制包的大小。
除短视频端功能外,做好一个短视频源码SDK的核心我们认为有几个要点:清晰度,稳定性,合成速度可结合全链路的视频云服务和云计算产品,短视频开发需求一站式解决。