音视频面试涨知识(一)

489 篇文章 14 订阅
464 篇文章 13 订阅

1 直播中为什么会出现花屏、黑屏、闪屏?

  • 主播没有打开摄像头权限,推流端没有做好权限校验处理。

  • 采集Camera数据,就要开始编码,如果编码失败,没有推送数据,那就会黑屏。

  • 拉流段遇到不支持的视频格式,或者解析出来的数据异常,出现解码失败,导致无法播放视频,出现黑屏。

  • 推流过程中由于网络问题不得不丢帧处理,此时丢失了参考帧,导致后续拉流段解码的时候因为失去参考帧解码出来的数据出现花屏情况。如果需要丢帧,应该一次就丢掉整个GOP的数据,不然就可能出现花屏现象。

  • 播放器拉流的时候首帧不是关键帧,导致花屏,一定要判断首帧是关键帧才开始处理,不然没有关键整个GOP的数据解出来都有问题的。

  • 推流端直播size发生变化,拉流端没有重置解码器,导致拉流端解出来的数据异常。

  • 硬解码的兼容性问题,出现编码器无法支持格式,例如相机采集的是NV21,但是编码器只能支持I420,那推出去的视频就会出现色差。

2 音视频软件性能优化

稳定性优化

  • 内存处理:

    • 编码过程中养成良好的习惯,malloc和free对应,new和delete对应。释放内存之后,一定要将对应的指针置空,不然会出现野指针问题。

    • 内存检测工具:asan和memory leaker,功能做完了,记得用这个工具跑一下。

    • 防止内存抖动,频繁的内存抖动暴露了程序中内存申请的不合理,也会拖慢整体的运行效率。

  • ANR处理:

    • pthread_join卡死问题,音视频中经常出现此类问题,释放资源时,子线程卡死了,pthread_join一直卡在那儿,导致主线程ANR。线程设计的时候要特别注意。

    • 主线程一定要谨慎操作,不能做网络请求、IO操作(一些IO操作比较隐蔽,例如解析视频)等。

线程优化:

  • 线程设计,是否一定需要这个线程,能不增加就不增加,增加一个线程要申请一定的资源,而且还会有多线程的问题。

  • C++ Handler Message消息机制。

  • 多线程安全。

  • pthread_join卡死问题,上面提到过。

功耗优化

  • 数据量太大,音视频处理的视频帧现在一般都1080P的,相对比较大。

  • 操作比较多,YUV2RGB的转换比较频繁,如果是GPU的处理还好一点,CPU计算转换则很耗资源。

  • 软编码和软解码消耗大量的CPU资源。

  • 音视频处理中会应用特效、美颜、算法等处理,这些都比较耗资源。

  • 音视频中大量的memory copy操作,也会消耗资源。

【学习地址】:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【文章福利】:免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~

  

3 音视频技术中的卡顿优化

我们还是以直播为例,拉流端有时候会出现卡顿,我们需要从全链路的角度分析这些卡顿。

  • 音视频不同步:

    • 推流端音视频同步没做好,那这种卡顿很危险,会一直持续下去的,而且无法纠正。RTMP推流的时候需要好好分析时间戳的问题,A-V不能相差超过100ms

    • 推流端在弱网丢帧的情况下也要做好音视频同步,一般要丢帧整个GOP,这时候也要相应丢掉对应时间点的音频数据。

    • 拉流端缓冲设计要做好,解码队列中数据不够导致音视频解码时同步总是对不上。

    • 点播情况下有些视频很怪:视频中封装的音频和视频相差比较大,有时候会相差好几秒,这就是这个视频源有问题了。

  • 弱网环境:

    • 弱网情况下,推流端没有适配好的丢帧策略或者说适配了丢帧策略,但是在弱网情况下还是推流较高清的视频,在拉流端播放会出现卡顿。

    • 拉流端没有缓存一段数据,一遇到网络抖动,会出现卡顿。

  • 处理耗时:

    • 推流端处理纹理时比较耗时,加了滤镜、美颜、其他算法处理导致采集比较慢,会出现掉帧卡顿。

    • CDN分发不行,请求负载过大,导致CDN分发出现异常。

4 直播关键技术指标

  • 推流平均码率

  • 丢帧率

  • 自动切换码率频率

作者:安纯旦

链接:音视频面试涨知识(一) - 掘金 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在Android音视频面试中,可能会被问到以下几个方面的问题。首先,面试官可能会询问你在Android开发方面的经验和项目经历。你可以谈论你参与过的音视频开发项目,以及你在项目中承担的角色和贡献。\[1\] 其次,面试官可能会问到与网络通信相关的知识,比如TCP的三次握手和四次挥手,TCP的核心机制(如滑动窗口、快速重传机制、拥塞控制等),以及HTTP和HTTPS的区别。你可以准备这些知识点,并且可以参考相关的学习资源来加深理解。\[3\] 此外,面试官可能会问到性能优化相关的问题。你可以准备一些常见的性能优化方案,例如内存优化、UI渲染优化、网络请求优化等。如果你在音视频开发方面有相关经验,还可以准备一些关于音视频开发的问题,如编码原理、常见的音视频格式、FFmpeg的使用、OpenGL与EGL的关系以及Android如何与NDK进行通信和调用等。\[3\] 综上所述,为了在Android音视频面试中取得好的表现,建议你准备好自己的项目经历和相关知识,并且多做一些实践和深入学习,以提高自己在音视频开发领域的技术水平和竞争力。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [android远程控制!看懂这些帮你轻松解决就业问题!这原因我服了](https://blog.csdn.net/fjfdhduuffududu/article/details/114291859)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v8^insert_chatgpt"}} ] [.reference_item] - *2* [精选58道——Android 音视频面试题](https://blog.csdn.net/maniuT/article/details/129840765)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v8^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值