【面试题】音视频流媒体高级开发(1)

面试题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

直方图在图像处理里面最重要的作用是什么?
参考答案

  1. 灰度直方图的定义:灰度级的函数,描述图像中该灰度级的像素个数或该灰度级像素出现的频率。反映了图像灰度分布的情况。
  2. 灰度直方图只能反映图像的灰度分布情况,不能反映图像像素的位置,即所有的空间信息全部丢失。
  • 直方图的应用:
a.数字化参数:判断一幅图像是否合理的利用了全部被允许的灰度级范围。一般一幅图应该利用全部或几乎全部可能的灰度级,否则等于增加了量化间隔,丢失的信息将不能恢复。

b.边界阈值选取(确定图像二值化的阈值):假定某图像的灰度直方图具有二峰性,则表明这个图像的较亮区域和较暗区域可以很好地分离,以这一点为阈值点,可以得到很好地2值处理效果(区分物体与背景)。

c.当物体部分的灰度值比其他部分的灰度值大时,可利用直方图统计图像中物体的面积。

d.计算图像的信息量H。

面试题4

数字图像滤波有哪些方法?
参考答案

均值滤波(邻域平均法)、中值滤波(消除独立的噪声点)、高斯滤波(线性平滑滤波,消除高斯噪声,对整幅图像进行加权平均,每一个像素点的值都由其本身和邻域内的其他像素值经过加权平均后得到)、KNN滤波、高通滤波、低通滤波等。

面试题5

图像可以提取的特征有哪些?
参考答案
颜色、纹理(粗糙度、方向度、对比度)、形状(曲率、离心率、主轴方向)、色彩等。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
高级开发面试一般包括更加细致和高级的技术问,涉及到开发者在实际项目中的运用和解决问的能力。以下是一个可能的回答: 在高级开发面试中,面试官可能会问到关于具体开发框架或者技术栈的问。例如,他们可能会要求我解释MVC框架以及我在实际项目中的应用经验。我会回答MVC的全称是Model-View-Controller,它是一种软件开发架构模式,将应用程序分为三个主要部分:模型,视图和控制器。模型负责处理数据逻辑,视图负责显示数据和界面,控制器处理用户的请求并负责协调模型和视图之间的交互。对于MVC的应用经验,我可以分享我在过去项目中使用MVC框架的经历,以及如何通过它来组织和管理代码的优势。 除了框架和技术栈问高级开发面试还可能涉及到代码质量保证和性能优化方面的问。例如,面试官可能会问我在实际项目中如何确保代码的质量和可维护性。我会谈到我在代码开发过程中遵循SOLID原则,编写可读性强的代码,并使用单元测试和集成测试来确保代码的正确性和可靠性。另外,我还会提到我在代码评审中的经验,以及如何利用代码静态分析工具和自动化测试工具来帮助检测潜在的问。 性能优化也是一个重要的话。如果被问到如何提高应用程序的性能,我会谈到我在过去项目中使用的一些策略,如对数据库进行索引优化,减少网络传输量,优化算法和数据结构等。 总的来说,高级开发面试旨在测试开发者在实际项目中的运用和解决问的能力。通过提出关于框架、技术栈、代码质量保证和性能优化等方面的问面试官可以更全面地了解开发者的能力和经验,并决定是否适合担任高级开发职位。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mldxxxxll5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值