完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1.引言
最近在RK339开发做项目时,碰到一个非常棘手的问题,挂机测试或终端后重启后具有小概率的花屏,抖动,而且这个现象是不可逆,只有重启推流服务或者重启整个终端,才会恢复。这个问题会导致视频采集,编码,推流的效果很差,导致用户体验很差。所以本文我就来分析下整个过程,以及解决办法。 "”记录世界 from antonio" 2.视频花屏、抖动问题定位 我们在谈到视频花屏时,一般首先想到就是丢帧导致,那为什么会丢帧呢?丢帧是一个结果,那是什么原因导致丢帧?采集模块丢帧,编码模块丢帧,还是推流模块丢帧呢?还是什么其它原因呢?顺着这个思路开始了大量的测试和debug。在定位前,先理清以下数据流程,看看下面这样视频数据流向图: 视频数据流向图 "”记录世界 from antonio" 推流视频异常画面,"记录世界 from antonio" 如果大家不想阅读大量的文字,可以直接看看以下这张视频花屏、抖动问题分析图,详细分析还是需要看看后面的文字。 视频花屏、抖动问题分析图 "”记录世界 from antonio" 在排查另外一个问题时,我把CPU频率降到最低了,发现这个花屏抖动现象必先,而且不可逆,这个现象终于能够用最稳定的步骤复现出来。RK3399是有6个CPU,一个GPU,其中CPU0-CPU3是小核,小核最高频率是1.5GHz,CPU4-CPU5是大核,大核最高频率是1.8GHz,默认情况优先跑满CPU0-CPU3,再跑CPU4-CPU5,所以RK3399并没有开启最高性能。RK3399的CPU有这几种工作模式,分别是,sched模式,interactive模式,consercative,ondemand,userspace模式,powersave模式,performance模式。sched模式是EAS模式,是一种新一代调度策略,在CPU频率和CPU功耗上,同时做了兼顾,保证系统功耗最低,并且不会对性能造成影响。interactive模式是RK3399默认工作模式,它根据CPU负载动态调频和电压。ondemand模式类似于interactive模式,但是效率要比interactive模式稍微低些,userspace模式是用户设置电压和频率,系统就不会自动调整,powersave模式是低功耗模式,功耗优先,始终把频率设置在最低值,performance模式是性能优先,始终把频率设置到最高,但这里的最高也有一个伪定义,因为大小核最高频率对应的频率分别是1.8GHz和1.5GHz,这里有个限制条件,就是温控,如果不关闭温控,当温度达到70度以上,甚至更高,那对应的频率就会降低,直到温度能够降下来,如果想要维护这个频率到最高,温度最好不要超过70度,所以硬件系统的散热就显得尤为重要,根据实际的测试环境,开启散热后,挂机测试,是可以把温度降到70度以下。如果把温控关闭,小核最高频率是1.5GHz,大核最高频率是1GHz,频率是无法改变,所以这就是我说的伪定义。为什么前面要说这么多关于CPU频率的信息呢?因为经过反复测试,CPU频率变化会影响采集,编码,推流的异常,最终导致花屏、抖动的结果。 当RK3399使用系统默认的interactive模式,此时大核默认是400MHz,小核是动态调整,当整个硬件系统温度升高或者CPU占有率变高,会导致CPU频率下降,如果此时小核的CPU频率降到1GHz以下,在采集1080P数据输入源,编码1080P,25帧,推流时,打开播放器,拉流时,则视频会出现不同程度的花屏和抖动,这里已经排除了播放端和服务器是没有问题,其中小核降到400M时,花屏的现象是最严重,即使调高频率,也无法恢复,是一个不可逆的过程。那CPU降频后,究竟对采集,编码,推流分别有什么影响呢? CPU降频后,对视频采集的影响就是采集过程中就有丢帧的现象。项目中,视频采集是通过android系统中,camera接口来实现,硬件接口是HDMI输入。怎样判断丢帧呢?正常相机采集,每秒中是23帧左右,当CPU降频后,每秒变为15帧左右,通过底层源码发现,是丢失了中断导致,应用层迟迟没有去取数据,导致丢帧。视频采集丢帧后,到编码端,设置的编码帧率为25帧,发现编码出来的视频为快进的现象,通俗讲采集18s的视频,只编码了10s的视频,而且此时,编码器的编码效率也在降低,编码时间延长,到了推流端,发现所有的帧都延迟了,导致推流出现了花屏现象。所以经过上面分析,得到一个结论就是,如果温度升高到80度以上,CPU负载变高,实测到90%以上,是一定会出现以上的现象。进一步推广,也就是说,无论什么原因,只要CPU大小核降低到1GHz出现,推出去的视频就会出现不同程度花屏和抖动的现象。 项目中除了上述原因导致花屏,抖动。又出现了一个问题,CPU频率并没有很低,也就是没有降到1GHz以下,但是还是出现了视频抖动和花屏,这个时候视频采集并没有丢帧,那是什么原因呢? 在推流模块日志中,在推流一段时间后,会出现日志时间戳有很大一个跳跃,明显是错误的,比如2018:xx:xx:xx到2020:xx:xx:xx,也就是说,在推流过程中,系统时间发生了变化,这个时候推流的每帧的时间戳发生了错误的变化,导致pts异常,推出的流就会有花屏的现象。那是什么原因导致这个时间跳跃呢?发现是当硬件系统连接外网时,会更新,校准系统时间,在校准的过程中就会出现这个时间戳异常。 时间戳异常变化 "”记录世界 from antonio" 这里简单写一下,怎样查看,修改CPU频率,温度呢?以下是指令分析: 在用户模式下,修改大小核的CPU频率: echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor echo 408000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed echo userspace > /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor echo 408000 > /sys/devices/system/cpu/cpu4/cpufreq/scaling_setspeed 在用户模式下,查看修改频率是否成功: cat /sys/devices/system/cpu/cpu3/cpufreq/scaling_cur_freq cat /sys/devices/system/cpu/cpu4/cpufreq/scaling_cur_freq 查看当前系统温度: cat /sys/class/thermal/thermal_zone0/temp 从用户模式恢复成互动模式: echo interactive > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor echo interactive > /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor 设置CPU为performance模式,注意,设置performance模式,需要解除温控才会有效果,否则温度升高,频率也会降低。经过测试,当温度高达87度以上,大核都频率都是最低400MHz,在用户模式和performance模式下都无法再调高。 echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor echo performance > /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor 查看大小核频率: cat /sys/devices/system/cpu/cpu3/cpufreq/scaling_cur_freq cat /sys/devices/system/cpu/cpu4/cpufreq/scaling_cur_freq 为了简介明了,也可以直接看看这张图片: 所以综上分析,发现主要是两个原因导致视频的花屏和抖动?一个是CPU降频,一个是时间戳异常。 3.排查问题,心得 一般遇到这种问题,首先需要找到能够稳定复现的步骤,需要先看看日志,是否有异常打印,根据日志来判断是否能够定位问题。然后,如果根据日志没办法定位,需要跟踪每一个细节,分别查看每个模块,是否数据丢失的问题,一般这样大概能够找到问题的原因,特别注意,一定要找到问题本质,而不是停留在表面,去加各种patch,这样才能最终解决问题。每一篇文章,都是经过实战项目的考验,尤其是细节的优化,值得学习和关注,希望看完的朋友能够有用。如果有朋友对音视频开发感兴趣,欢迎在评论区评论和转发,也可以留下联系方式,进行更深入的交流。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于米尔瑞芯微RK3576核心板/开发板的人脸疲劳检测应用方案
533 浏览 0 评论
803 浏览 1 评论
700 浏览 1 评论
1926 浏览 1 评论
3171 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 13:46 , Processed in 0.634055 second(s), Total 71, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号