直播间新手常见技术问题解答--拖动不准


直播间新手常见技术问题解答--拖动不准


现象:播放过程中,拖动进度条后,实际播放的位置跟松开拖动时的位置相差很远。


由于直播流是实时产生和传输的,是不能拖动的,因此该问题主要出现在点播或者本地文件 的播放。


1 基本概念

首先,我们要了解播放器拖动的基本原理:

视频是由一系列图像帧组成的,每一个帧都有对应的时间戳。拖动,就是告诉播放一个时间戳,由它直接跳转到指定的这一帧开始播放。

拖动到的时间点 = (进度条的 progress / 进度条最大值 100 )x 视频总时长


2 关键帧间隔太大

由于解码器必须从 I 帧开始解码,才不会出现花屏现象,因此,播放器通常会寻找离 seekTo 视频帧最近的一个关键帧,从该关键帧开始解码播放。


假设关键帧间隔(GOP)是 3s,那么关键帧的时间点排列如下:

0s, 3s, 6s, 9s


如果拖动到 4s 的位置,那么播放器就跳转到第 3s 的关键帧开始解码播放,因此,会产生一定的误差。

关键帧的间隔越大,那么这个误差也就越大。因此,为了更准确地支持拖动,建议不要把关键帧间隔设置得太大。

3 直播丢帧

丢帧的情况多发生在直播场景,由于主播端的网络抖动或者内存不足,导致不得不被迫丢掉一些视频帧,而为了保证客户端解码后不出现花屏,丢帧往往伴随着一整个 GOP 的丢弃。

当 GOP 丢失后,部分关键帧的间隔时间点就会变得更大了,从而导致拖动不准。


为了避免这种情况,建议推流端开启动态码率,在网络不好的时候,主动降低码率,快速发送掉缓冲区中累积的视频帧,从而减少丢帧的情况发生。


4 发热

导致机器功耗高,发热严重的根本因素,无外乎就是一点:CPU/GPU 占用率高,所以,我们首先要分析下,哪些因素会导致 CPU/GPU 占用率高。


5 数据量太大

直播主要由:视频采集 -> 视频处理(剪裁、美颜、滤镜) -> 编码 -> 推流 这些环节组成。

在这整个流程中,决定数据量大小的因素有哪些呢 ?


视频的尺寸(例如:1280 x 720 的图像,明显要比 320 x 240 的图像处理起来费劲)


视频的帧率(例如:每秒 30 帧,明显要比每秒 15 帧,处理起来费劲)


因此,在不影响业务体验的情况下,适当减少视频的尺寸和帧率,是可以明显降低后续环节 CPU/GPU 的负荷的,从而显著降低功耗。


6 大量的格式转换

不同的模块对数据格式的要求,往往有差异,比如 Android 摄像头出来的数据大多是 NV21 的,而编码器一般要求 I420 格式的数据;再比如 ffmpeg 解码的视频往往是 YUV 格式,而渲染显示往往需要 RGB 格式,等等。


我们要尽可能减少不同格式之间的数据转换,或者尽可能利用 GPU 来处理一些复杂的格式转换,比如利用 OpenGL 直接渲染 YUV 格式的数据,而不是用 CPU 做一次 YUV -> RGB 的转换,就是一个不错的选择。


7 对图像进行放大操作

前面文章有提到,非常不推荐把一个小尺寸的图片 -> 放大 -> 大尺寸图片,这样很容易出现马赛克。


其实,这样的设计,不仅仅是容易出现马赛克,而且在图像放大的过程中,由于涉及到复杂的插值运算,也会非常消耗 CPU。

同理,图像的缩小或者剪裁,同样也会消耗一定的 CPU,只不过相比于图片放大要好点。

因此,最好的办法,就是小心选择摄像头的预览分辨率以及推流的尺寸,尽可能让两者保持一致,这样,才能最大化地节省 CPU 的消耗。


8 软编/软解

这个原因或许大家都懂,软编/软解靠的是 CPU,非常耗性能,而硬编/硬解是使用专门的硬件编解码器模块,会显著降低 CPU 的负担,相对而言,会省电很多。


只不过需要小心各种 Android 机型兼容性问题,对于某些奇葩设备,还是加入硬编/硬解黑名单的好。

9 其他方面

当然,导致功耗高的因素还有很多,这里就不一一展开说明了,列举如下:

人脸识别/美颜/滤镜,对 CPU/GPU 消耗很大

代码逻辑中过多的 memory copy 操作

后台线程频繁唤醒手机访问网络或者读写 SDCard

App 的一些动画特效

————————————————

版权声明:本文为CSDN博主「步基」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/wangbuji/article/details/121661187

================================

【新闻】

999999.jpg

微信图片_20230804194631.jpg

   中国e直播带货供应链金融13306003307(V同),
一件代发共享云仓
:主播减去了自己先采购囤货的问题,可以无压力的开播卖货。主播只要选定生厂商的抖音小店产品链接或快手小店产品链接,在自己直播间上了链接就可以卖,卖完由厂家小店订单结算,厂家网店直接收款;直播带货主播直接分佣金;MCN机构直接分管理费。

     中国E直播带货供应链机构协调厂家按规则48小时内一件代发!

1633584154541554.png