前言
音视频开发是一项具有挑战性和创新性的工作,在当今的科技领域中具有极其重要的地位。随着数字化娱乐和在线视频的广泛普及,音视频开发的相关技术和领域也变得越来越重要。作为音视频开发领域的一份子,我们需要掌握各种技术,理解基础理论以及熟练掌握各种工具。此外,我们还需要保持学术精神,不断尝试新的技术和方法,以满足不断变化和发展的需求。
本文旨在为那些正在寻找音视频开发工作的朋友和那些对音视频开发感兴趣的读者提供一些面试准备和指导。我们将介绍一些常见的音视频开发面试问题,总结一些常用的工具和技术,以及提供一些学术资源和学习建议。我们希望本文可以帮助读者增加对音视频开发的了解和认识,为未来的面试做好准备,并提高在音视频开发领域的技术水平和竞争力。
由于篇幅限制,有些面试题中的内容记录过多,文章版面放不下,中间有些只能用图片方式进展示部分,如需参考完整版的可以参考《Android 音视频面试整理篇》:
https://qr18.cn/AcV6Ap
进入正题
1.为什么巨大的原始视频可以编码成很小的视频呢?这其中的技术是什么呢?
参考答案
- 1)空间冗余:图像相邻像素之间有较强的相关性
- 2)时间冗余:视频序列的相邻图像之间内容相似
- 3)编码冗余:不同像素值出现的概率不同
- 4)视觉冗余:人的视觉系统对某些细节不敏感
- 5)知识冗余:规律性的结构可由先验知识和背景知识得到
2.怎么做到直播秒开优化?
参考答案
-
DNS 解析慢
为了有效降低 DNS 解析对首开的影响,我们可以提前完成播放域名->IP 地址的解析,
并缓存起来,播放的时候,直接传入带 IP 地址的播放地址,从而省去了 DNS 解析的耗时。
如果要支持用 IP 地址播放,是需要修改底层 ffmpeg 源码的。 -
播放策略
很多侧重点播的播放器,为了减少卡顿,会有一些缓冲策略,当缓冲足够多的数据之后 ,再送入解码播放。
而为了加快首开效果,需要对播放的缓冲策略做一些调整,如果第一帧还没有渲染出来的情况下,
不要做任何缓冲,直接送入解码器解码播放,这样就可以保证没有任何因为「主动」缓冲带来的首开延时。
- 播放参数设置
所有基于 ffmpeg 的播放器,都会遇到avformat_find_stream_info这个函数耗时比较久,
从而增大了首开时间,该函数主要作用是通过读取一定字节的码流数据,
来分析码流的基本信息,如编码信息、时长、码率、帧率等等,它由两个参数来控制其读取的数据量大小和时长,
一个是 probesize,一个是 analyzeduration。
减少 probesize 和 analyzeduration 可以有效地减少avformat_find_stream_info的函数耗时,
从而加快首开,但是需要注意的是,设置地太小可能会导致读取的数据量不足,从而无法解析出码流信息,导致播放失败,
或者出现只有音频没有视频,只有视频没有音频的问题。
- 服务端优化
- 服务器关键帧缓冲
- CDN最近策略
3.直方图在图像处理里面最重要的作用是什么?
参考答案
- 灰度直方图的定义:灰度级的函数,描述图像中该灰度级的像素个数或该灰度级像素出现的频率。反映了图像灰度分布的情况。
- 灰度直方图只能反映图像的灰度分布情况,不能反映图像像素的位置,即所有的空间信息全部丢失。
-
直方图的应用:
-
a.数字化参数:判断一幅图像是否合理的利用了全部被允许的灰度级范围。一般一幅图应该利用全部或几