音视频面试涨知识(一)

news2025/2/28 20:02:23

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 直播关键技术指标

  • 推流平均码率

  • 丢帧率

  • 自动切换码率频率

作者:安纯旦

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/94374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

某讯滑块验证码反汇编分析-第二章

某讯滑块验证码反汇编分析-第二章反汇编难点分析反汇编帮助跟踪参数生成函数反汇编难点分析 首先就是上一章提到的,指令的顺序是会变的 假设某序号为1的指令为【I[I.length - 2] I[I.length - 2] I.pop();】 这个指令可能在下一次请求的时候,序号变…

C++ Reference: Standard C++ Library reference: Containers: map: map: end

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/end/ 公有成员函数 <map> std::map::end C98 iterator end(); const_iterator end() const; C11 iterator end() noexcept; const_iterator end() const noexcept;返回指向结束的iterator 返回一个指…

常用代码模板2——基础算法

构思算法&#xff1a;可以先想暴力解法&#xff0c;然后观察时间复杂度&#xff0c;如果超时&#xff0c;再考虑优化&#xff0c;优化的方向就是时间复杂度要下降&#xff0c;下表可以给出一些算法选择的参考&#xff1a; 暴力枚举 -> 枚举优化 -> 正解 数据范围时间复…

Qt扫盲-QTabWidget理论总结

QTabWidget理论总结1. 简述2. 用法流程3. 选项卡设置3. 页面信息3. 外观4. 扩展1. 简述 QTabWidget 提供一个选项卡栏和一个“页面区域”&#xff0c;用于显示与每个选项卡相关的页面。默认情况下&#xff0c;选项卡栏显示在页面区域上方&#xff0c;但可以使用不同的配置&…

智能合约简单介绍

本学期学习了区块链的课程&#xff0c;作业是对于智能合约学习后的报告&#xff1a; 1 智能合约简单了解 1.1智能合约是什么 智能合约是由事件驱动的、具有状态的、部署于可共享的分布式数据库上的计算机程序&#xff0c;多用IF-THEN语句。狭义来说&#xff0c;智能合约是设计…

函数式编程 | 图文详解 | 系统性学习 | 无知的我费曼笔记

无知的我正在复盘函数式编程 该笔记特点是 重新整理了涉及资料的一些语言描述、排版而使用了自己的描述对一些地方做了补充说明。比如解释专有名词、类比说明、对比说明、注意事项提升了总结归纳性。尽可能在每个知识点上都使用一句话 || 关键词概括更注重在实际上怎么应用提出…

70. 利用 ALV 实现增删改查系列之二:仅让 ALV 报表某一列允许被编辑

本系列前一篇文章 69. 利用 ALV 实现增删改查系列之一:让 ALV 报表进入可编辑状态,我们介绍了如何让 SAP ABAP ALV 报表进入可编辑状态。在该状态下,ALV 报表的每一行,每一列都可以被任意修改,如下图所示: 但是在实际的项目中,更常见的需求是,ALV 报表只允许部分列能够…

【Vue脚手架】总结笔记

脚手架文件结构 ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ├── src │ ├── assets: 存放静态资源 │ │ └── logo.png │ │── component: 存放组件 │ │ └── HelloWorld.vue │ │…

Springboot 整合 ireporter 实践

背景 这段时间&#xff0c;在做项目时&#xff0c;设计到需要带参数的批量生成报告。尝试了很多方法&#xff0c;包括grafana等BI工具。虽然grafana这种BI工具可以在线查看&#xff0c;但是无法导出。甚至当想把报告整合邮件发送时&#xff0c;grafana就显得无能为力了。于是在…

Sql Server 占用内存高,不释放内存问题处理记录(腾讯电脑管家小火箭清内存)

问题&#xff1a; 本人仓库管理系统厂家&#xff0c;项目上反应生产线箱码不能上传到我们系统&#xff0c;我们的WMS软件退出后重新登录也一直登录失败&#xff0c;并且服务器上数据库占用内存过高&#xff0c;SSMS数据库连接不上。 好家伙SQL Server占用了34个G内存。 接口…

前端基础(十二)_overflow属性、clear属性、vertical-align属性

overflow属性 overflow的第一个属性值是x轴方向的属性&#xff0c;第二个值是y周方向的属性 <style>.box1 {width: 150px;height: 50px;等价于下面两个属性/* overflow: hidden auto; */overflow-x: hidden;overflow-y: auto;}</style>1、overflow-x 只包含水平方…

VS2019编译QT6源码

现在QT在线安装只有QT6.2以上的版本和QT5.15&#xff0c;其他版本就需要自己编译&#xff0c;本文讲解在vs2019环境下编译qt6.1.3源码。 1 编译准备 从清华大学镜像站&#xff0c;下载源码&#xff0c;地址如下&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/qt/archive/…

【C++】继承/多态/文件

文章目录一、继承1 继承中的对象模型2 继承中构造和析构顺序3 继承中同名属性和函数处理方式&#xff08;隐藏&#xff09;4 继承同名静态成员属性和函数处理方式5 多继承语法6 菱形继承&#xff08;虚继承&#xff09;二、多态1 多态的原理剖析&#xff08;虚函数表指针&#…

【OpenSourceC#】JEngine框架

前言 一个完全依赖ILRuntime的框架&#xff0c;集成好了ILRuntime和AB资源热更&#xff0c;想用ILRuntime的可以很方便使用。 对着作者的文档JEngine看看框架功能都是怎么实现的。 看下文档中提到的功能如下 JEngine框架核心 热更资源工具 AssetMgr&#xff0c;框架集成…

询盘回复流程及外贸11步流程

询盘回复流程&#xff1a; 从事外贸的新手经常在网上寻找各种各样的外贸干货知识。其实&#xff0c;你不仅要关注某个环节的小细节&#xff0c;还要有“宏观”的思维。分过程、分步骤地梳理外贸工作&#xff0c;是外贸工作中十分重要的一个环节。今天&#xff0c;按照一般的回…

点云中点法向量,点拟合的直线,点拟合的平面

点云中点法向量 计算步骤&#xff1a; 找到点pi相邻点集合S所有点Vi,然后去中心化,并构造协方差矩阵,公式如下: 二维点云该点曲率计算方法&#xff1a; 三维点云该点曲率计算方法&#xff1a; 最小特征值对应的特征向量就是点的法向量 Eigen::Vector2d ComputeNormal(std::v…

m基于BP神经网络的房屋价值变换趋势预测matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 住宅价格是住宅市场的核心&#xff0c;住宅市场的变化关系到广大消费者的切身利益&#xff0c;商品房价格是升是降&#xff0c;销售是冷是旺&#xff0c;是社会关注的热点问题。因此&#xff0c;…

Mybatis-Plus 入门

文章目录0. 前言1. 相关概念1.1 名称介绍1.2 官网特性介绍2. 快速入门2.1 准备工作2.2.1 准备表2.2.2 创建工程2.2 入门测试2.2.1 编写实体类2.2.2 编写Mapper2.2.3 编写测试类3. CRUD3.1 条件构造器3.1.1 AbstractWrapper&#xff08;1&#xff09; 基本比较操作&#xff08;2…

想做数码管显示,单片机IO口资源不够?看看WTV890语音芯片能做些啥

在开发许多产品时许多工程师都会遇到以下问题&#xff0c;如&#xff1a;想驱动4位或10位的LED数码管显示&#xff0c;但是单片机的IO口不够用&#xff1b;要么更换IO口资源更多的MCU来控制&#xff0c;要么更换脚位丰富的单片机&#xff0c;这无疑在MCU上&#xff0c;加了1元左…

在Linux中使用at和crontab命令在指定时间计划任务服务程序

经验丰富的系统运维工程师可以使得Linux在无需人为介入的情况下&#xff0c;在指定的时间段自动启用或停止某些服务或命令&#xff0c;从而实现运维的自动化。尽管我们现在已经有了功能彪悍的脚本程序来执行一些批处理工作&#xff0c;但是&#xff0c;如果仍然需要在每天凌晨两…