C++音视频开发的技术要点
shanewfx
共 2520字,需浏览 6分钟
·
2022-02-09 17:35
总体来讲,音视频开发是有一定的技术门槛的,我觉得至少需要在这个领域踏踏实实积累个3-5年,才能对音视频相关的开发知识有一个整体、深刻的理解。
从技术上来讲,需要从如下两个大类知识点上去积累:
1. C/C++通用开发知识
音视频开发的主要编程语言就是C和C++。
这块的专业知识积累是通用的,并不局限于某个特定的行业,属于程序员的技术功底。
可以重点关注如下几个方面:
- 计算机系统的底层工作原理
- 操作系统原理
- 程序的编译、链接和加载机制
- C/C++语言特性背后蕴含的思想,底层工作原理,适用场景,存在什么样的问题
- 软件设计原则和设计模式
- 数据结构和算法
- 多线程并发编程原理
- 网络编程
- 跨平台
- 操作系统API
- 软件调试
2. 音视频领域专业知识
这块属于从事音视频行业的专业知识。
这块的专业知识是非常多的,每个功能模块背后涉及很多专业的知识。
音视频的开发可以分为两大块,涉及的内容大致如下:
- 音视频客户端开发
- 客户端应用开发
- 音视频引擎开发
- 音视频引擎SDK
- 音视频引擎框架
- 音视频引擎功能模块
- 音/视频采集
- 音/视频渲染
- 音/视频数据处理
- 音/视频编/解码
- 录制
- 串流
- 音视频同步
- 流媒体服务器开发
- 通用服务器开发知识,需要关注如下几个点
- 高稳定性
- 高性能
- 高并发
- 高可用
- 流媒体服务器开发
- SFU vs MCU
- 流媒体协议转换
- 弱网下的音视频传输协议
- 录制 & 转码
- ......
上述内容中,客户端应用开发、音视频引擎SDK、音视频引擎框架、通用服务器开发等主要涉及C/C++通用开发知识,但要设计好这些部分必须对音视频相关的知识和产品业务有比较深刻的理解才能做到。
通常,音视频架构师比较关注这些部分。
而音视频引擎底层功能模块和SFU/MCU流媒体服务器的开发,则和音视频的专业知识密切相关。
- 音视频的采集模块
- 视频数据可以通过如下方式获得:
- USB摄像头
- 专业的硬件视频采集卡(有软压卡和硬压卡之分)
- 网络摄像机(支持RTSP协议)
- 操作系统提供的屏幕录制API
- 读取音视频文件并解码
- 订阅流媒体服务器上的流
- 音频数据可以通过如下方式获得:
- 声卡
- 扬声器播放声音的回环采集(依赖操作系统的API)
- 读取音视频文件并解码
- 订阅流媒体服务器上的流
- 支持音频输入的网络摄像机(支持RTSP协议)
- 支持音频输入的视频采集卡
- 在手机上,操作系统的SDK会提供相关的音视频采集接口
- 音/视频渲染
- 视频渲染一般需要了解OpenGL,而音频渲染需要了解OpenAL
- 可以通过开源库SDL来快速实现渲染模块
- 在Windows下使用DirectShow框架,操作系统提供了对应的视频和音频渲染模块(通过GraphEdit可以看到)
- 在DirectShow中渲染器会涉及到音视频同步的策略,当然,也完全可以自己去实现音视频同步模块
- 音/视频数据处理
- 这些模块基本是在编码前或解码后,对视频或音频的原始数据进行某种算法上的处理
- 视频处理主要包括分辨率转换、色彩空间转换、帧率转换、图像增强、多路视频拼接、添加字幕、添加LOGO图片等,这块对整体的性能影响比较大,往往需要使用SIMD指令进行汇编优化或使用GPU算法进行加速
- 音频处理主要包括回声消除、噪声抑制、自动增益、混音等,这块往往会涉及比较多的信号处理和数学知识,是音频中比较复杂的一块
- 音/视频编/解码
- 视频编/解码
- 要理解视频的基本编码原理,熟悉视频编码的关键参数和码流格式
- 目前使用比较多的是H.264,H.265开始逐步在使用,其他的视频编码也有很多,如AVS、VP8、VP9等
- 视频编码对音视频引擎的性能影响比较大,这块基本都是需要使用GPU加速的,目前的Intel集显对H.264和H.265支持还是比较好的,NVIDIA的独立显卡在编码上存在路数的限制;手机上一般都有对应的硬件加速模块;在性能较好的硬件上,可以考虑开源的X264
- 音频编/解码
- 要理解音频的基本编码原理,熟悉音频的关键参数和码流格式
- 目前使用比较多的是AAC,其他的音频编码也有很多,如G7.11、G.722、OPUS等
- 在PC上,一般音频的相关模块对性能的影响不明显,但在海思嵌入式系统上,音频模块对性能的影响就不能忽略,因为海思基本没有提供音频的硬件加速模块,而ARM CPU性能也有点弱
- 录制
- 需要理解FLV、MP4、TS等容器格式
- 对于特殊的录制方式要注意软件的处理方式,例如,加片头和片尾的录制功能,追加录制
- MP4录制要注意moov box放在文件开始或结束对录制文件的写入和点播的影响
- 录制时音视频均匀混合的策略
- 串流
- 理解视频互动、直播和点播的工作原理
- 关键评价指标
- 延迟
- 首屏时间
- 同步
- 流畅性
- 画质/音质
- 理解下述的几种音视频传输协议
- RTMP
- HTTP + FLV / Websocket + FLV
- HLS
- RTP & RTCP
- RTSP
- SIP
- WebRTC
- H.323
- 弱网下的音视频传输协议
- 理解TCP协议栈原理
- 可靠的UDP传输协议
- KCP
- SRT
- QUIC
- FEC + 丢包重传机制(如NACK)
音视频的开发并不是完全从零开始,而是有许多可以依赖的开源库,但要用好这些库,需要对上述的音视频专业知识有深刻的理解。
比较常见的音视频开源库,如下:
- ffmpeg
- 可以直接使用ffmpeg的命令行实现转码、切片等常见功能
- 可以基于FFmpeg API封装开发自己的音视频模块
- live555
- 比较完善的RTSP库
- x264
- 比较常用的H.264编码库
- fdkaac
- 比较常用的AAC编解码库
- librtmp
- 支持rtmp协议,产品化时需要自己进一步完善
- pjsip
- 支持sip协议
- webrtc
- google开源的webrtc库,有比较好的音/视频引擎,对网络状态的实时评估可以借鉴,回声消除模块也是比较有名的
- SDL
- 比较有名的音视频渲染库
- SRS
- 国内比较知名的RTMP流媒体服务器,支持HLS、HTTP+FLV,4.0版本开始支持WebRTC
- OWT
- Intel开源的WebRTC套件,支持了WebRTC客户端SDK和分布式的WebRTC MCU服务器
- OpenCV
- 著名的视频算法库
另外,视频的编码和解码可以基于Intel Media SDK和NVIDIA的NVENC来实现。
在海思嵌入式上,海思芯片(如Hi3531D等)提供了硬件的音视频采集、音视频渲染、视频编/解码、视频图像处理等核心功能,这就需要借助于海思提供的SDK进行开发了。
-完-
评论
iOS开发-音视频开发
一.学习背景
5G网络作为第5代的移动通信网络,它的网络峰值传播速度可1以达到10Gbps/s.这比4G的的传输速度快数百倍.举个例子,整部超高画质电影下载可在1秒钟之内下载完成.
当然,随着5G技术的诞生,用在智能终端分享3D电影,游戏或者超高画质节目的时代已经毫无悬念的向我们走来.
想必大家也逐步了解,国内外的互联网公司也已经布局音视频,3D技术方面的开发者招聘和相关产品研发.目前落地推广最普遍的就是直播类项目和小视频类的项目.当然未来的方向肯定不止如此.
> 那么我们现在带着问题来学习?
> 为何编码?
> 何为编码?
1.1 为何编码?
从存储角度和网络传输以及通用性 3个角度,压缩已经成了不可或缺的动
iOS开发-三十六计
0
【音视频开发】开发小白如何成为音视频专家?
本文作者: @卢俊 ,七牛直播 SDK 技术负责人,先后开发过 Android 播放 SDK,Android 推流 SDK,并主导了七牛连麦系统的开发和实现,有丰富的音视频领域开发及实战经验。
----------------------------------------
本文卢俊将分享多年实践总结下的开发经验,希望对音视频开发感兴趣但是又不知道如何下手的初学者们有所帮助。以下是卢俊的分享原稿:
1. 成长的烦恼
经常收到一些网友的来信或者留言,反馈如下这样的困惑:
> “我是一名应届毕业生,该如何快速地成长起来” “我只懂 C/C++,是学 Android 开发有前途,还是 iOS 开发有前途?” “我是一名
胖的一定丑
0
音视频开发工程师
工作职责:
1、负责流媒体服务相关模块的开发、维护与优化;
2、负责流媒体协议处理、软硬件视频编解码、媒体流传输等系统的设计开发;
3、视频直播点播相关应用的需求分析、方案制定、代码编写及调试;
任职要求:
1、5年以上流媒体服务器/音视频开发工作经验,本科以上学历;
2、精通C/C++、python, Winodws/Linux环境开发;
3、熟悉等网络通讯协议,熟悉RTSP/RTMP/HLS等流媒体协议,并有实际项目经验;
4、熟悉x264, x265, ffmpeg, gstreamer等开源代码库,使用过GPU/CPU硬件编解码器;
5、熟悉webrtc/SRT/QUIC等系统协议,并有相关经验者;
Dinah
0
我的音视频技术路线
目录
抖音/快手等短视频APP的风靡,让音视频成为当下最火热的技术,越来越多的人想要进入到这个领域,我自己也是从图形方向刚刚踏入这领域不久,音视频方向所包含的技术栈非常复杂,我自己也在一点一点慢慢钻研,这里面每一个方向都值得深入研究,而且随着5G时代的到来,音视频方向的应用会更加广泛,所以希望自己能掌握更多的关于音视频方向的技能,未来可以探索更多的音视频玩法。然后这篇博客主要是想梳理一下我自己关于音视频这个方向的学习路线,分享出来的同时也能鼓励自己朝着这个方向继续深耕下去。
关于音视频方向的基础技能分支,先来看一张图(图片来自网上)
采集:音视频数据来源,比如Android Camera数据采集
渲染:将采
Luki Yang
0
涨薪密码 | 音视频开发-程序员界的技术皇冠
音视频的知识纷繁复杂,自学非常困难,既需要非常扎实的基础知识,又需要有很多的工程经验;本文就从音视频开发,开源框架,视频,业界大神,书籍推荐,就业方向分析,为广大开发者学习音视频技术提供便利。
首先我们先需要了解音视频包含哪些内容, 解决哪些问题?
说白了,音视频开发,就是要掌握图像、音频、视频的基础知识,并且学会如何对它们进行采集、渲染、处理、传输等一系列的开发和应用。
l 采集:它解决的是,数据从哪里来的问题
l 渲染:它解决的是,数据怎么展现的问题
l 处理:它解决的是,数据怎么加工的问题
l 传输:它解决的是,数据怎么共享的问题
一、音视频开发主要技术点:
二、开源框架:
实时音视频开源项目:
实时音视频
Yt-Sam
0