【Android面试】音视频开发高频面试题
1.为什么巨大的原始视频可以编码成很小的视频呢?这其中的技术是什么呢?
1)空间冗余:图像相邻像素之间有较强的相关性
2)时间冗余:视频序列的相邻图像之间内容相似
3)编码冗余:不同像素值出现的概率不同
4)视觉冗余:人的视觉系统对某些细节不敏感
5)知识冗余:规律性的结构可由先验知识和背景知识得到
2.怎么做到直播秒开优化?
- DNS 解析慢 为了有效降低 DNS 解析对首开的影响,我们可以提前完成播放域名->IP 地址的解析, 并缓存起 来, 播放的时候,直接传入带 IP 地址的播放地址,从而省去了 DNS 解析的耗时。 如果要支持用 IP 地址播放, 是需 要修改底层 ffffmpeg 源码的。
- 播放策略 很多侧重点播的播放器,为了减少卡顿,会有一些缓冲策略,当缓冲足够多的数据之后 ,再送入解码播放。 而为了加快首开效果,需要对播放的缓冲策略做一些调整,如果第一帧还没有渲染出来的情况下, 不要做任何缓冲,直接送入解码器解码播放,这样就可以保证没有任何因为「主动」缓冲带来的首开延时。
- 播放参数设置 所有基于 ffffmpeg 的播放器,都会遇到avformat_fifind_stream_info这个函数耗时比较久, 从而增大了首开时间,该函数主要作用是通过读取一定字节的码流数据, 来分析码流的基本信息,如编码信息、时长、码率、帧率等等,它由两个参数来控制其读取的数据量大小和时长, 一个是 probesize,一个是analyzeduration。 减少 probesize 和 analyzeduration 可以有效地减少avformat_fifind_stream_info的函数耗时, 从而加快首开,但是需要注意的是,设置地太小可能会导致读取的数据量不足,从而无法解析出码流信息,导致播放失败, 或者出现只有音频没有视频,只有视频没有音频的问题。
- 服务端优化
- 服务器关键帧缓冲
- CDN最近策略
3.数字图像滤波有哪些方法?
均值滤波(邻域平均法)、中值滤波(消除独立的噪声点)、高斯滤波(线性平滑滤波,消除高斯噪声,对整幅图像进行 加权平均,每一个像素点的值都由其本身和邻域内的其他像素值经过加权平均后得到)、KNN滤波、高通滤波、低通滤波 等。
4.图像可以提取的特征有哪些?
颜色、纹理(粗糙度、方向度、对比度)、形状(曲率、离心率、主轴方向)、色彩等。
5.衡量图像重建好坏的标准有哪些?怎样计算?
- SNR(信噪比)
- PSNR=10*log10((2^n-1)^2/MSE) (MSE是原图像与处理图像之间均方误差,所以计算PSNR需要2幅图像的数据!)
- SSIM (结构相似性分别从亮度对比度、对比度、结构3方面度量图像的相似性)
6.AAC和PCM的区别?
AAC在数据开始时候加了一些参数:采样率、声道、采样大小
7.H264存储的两个形态?
- a. Annex B : StartCode :NALU单元,开头一般是0001或者001 防竞争字节:为了区分 0 0 0 1,它采用0 0 0 0x3 1作为区分 多用于网络流媒体中:rtmp、rtp格式
- b. AVCC : 表示NALU长度的前缀,不定长用4、2、1来存储这个NALU的长度 防竞争字节 多用于文件存储中mp4的格式
8.请叙述MPEG视频基本码流结构?
#android面试#
- Sequence Header
- Sequence Extention
- Group of picture Header
- Picture Header
- Picture coding extension