上述内容中,客户端应用开发、音视频引擎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进行开发了。
音视频这块,目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的,希望我后面能挤出时间整一个专题详细讲一讲~~目前的话,我先给出一个大的方向性的学习指南,希望对初学者有所帮助。
我一直相信带着 “任务” 去学习和实践,效率会高很多,因此我列出了一系列音视频相关的 “开发任务”,从简单到困难(当然,不一定非常严格和完美,部分任务先后可调整),大家在完成任务的过程中,遇到任何不懂的地方都要及时去 google,或者去请教身边的大牛,不放过任何一个疑点,相信大家会很快就能把音视频周边相关知识积累起来。
这里整理和概括了(还有部分内容没有截图出来)关于音视频的资料,相信应该是全网最全了,所有资料都是免费分享给大家的,也省去了对音视频感兴趣的小伙伴们四处找资料的时间,如果你正好需要可以扫一扫下方二维码免费获取。
Android 音视频从入门到精通——学习目标
1. 在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View
2. 在 Android 平台使用 AudioRecord 和 AudioTrack API 完成音频 PCM 数据的采集和播放,并实现读写音频 wav 文件
3. 在 Android 平台使用 Camera API 进行视频的采集,分别使用 SurfaceView、TextureView 来预览 Camera 数据,取到 NV21 的数据回调
4. 学习 Android 平台的 MediaExtractor 和 MediaMuxer API,知道如何解析和封装 mp4 文件
5. 学习 Android 平台 OpenGL ES API,了解 OpenGL 开发的基本流程,使用 OpenGL 绘制一个三角形
6. 学习 Android 平台 OpenGL ES API,学习纹理绘制,能够使用 OpenGL 显示一张图片
7. 学习 MediaCodec API,完成音频 AAC 硬编、硬解
8. 学习 MediaCodec API,完成视频 H.264 的硬编、硬解
9. 串联整个音视频录制流程,完成音视频的采集、编码、封包成 mp4 输出
10. 串联整个音视频播放流程,完成 mp4 的解析、音视频的解码、播放和渲染
11. 进一步学习 OpenGL,了解如何实现视频的剪裁、旋转、水印、滤镜,并学习 OpenGL 高级特性,如:VBO,VAO,FBO 等等
12. 学习 Android 图形图像架构,能够使用 GLSurfaceviw 绘制 Camera 预览画面
13. 深入研究音视频相关的网络协议,如 rtmp,hls,以及封包格式,如:flv,mp4
14. 深入学习一些音视频领域的开源项目,如 webrtc,ffmpeg,ijkplayer,librtmp 等等
15. 将 ffmpeg 库移植到 Android 平台,结合上面积累的经验,编写一款简易的音视频播放器
16. 将 x264 库移植到 Android 平台,结合上面积累的经验,完成视频数据 H264 软编功能
17. 将 librtmp 库移植到 Android 平台,结合上面积累的经验,完成 Android RTMP 推流功能
18. 上面积累的经验,做一款短视频 APP,完成如:断点拍摄、添加水印、本地转码、视频剪辑、视频拼接、MV 特效等功能
相信我,如果你认真把所有任务都完成了,你一定会成为音视频人才招聘市场的香饽饽~~
一,初级入门篇:
一 绘制图片
-
ImageView 绘制图片
-
SurfaceView 绘制图片
-
自定义 View 绘制图片
二、AudioRecord API详解
三、使用 AudioRecord 实现录音,并生成wav
-
创建一个AudioRecord对象
-
初始化一个buffer
-
开始录音
-
创建一个数据流,一边从AudioRecord中读取声音数据到初始化的buffer,一边将buffer中数据导入数据流。
-
关闭数据流
-
停止录音
四、用 AudioTrack 播放PCM音频
1.AudioTrack 基本使用
-
MODE_STATIC模式
-
MODE_STREAM模式
2.AudioTrack 详解
-
音频流的类型
-
Buffer分配和Frame的概念
-
AudioTrack构造过程
- AudioTrack 与 MediaPlayer 的对比
-
区别
-
联系
-
SoundPool
五、使用 Camera API 采集视频数据
1.预览 Camera 数据
2.取到 NV21 的数据回调
六、使用 MediaExtractor 和 MediaMuxer API 解析和封装 mp4 文件
1.MediaExtractor API介绍
2.MediaMuxer API介绍
3.使用情境
七. MediaCodec API 详解
1.MediaCodec 介绍
2.MediaCodec API 说明
3.MediaCodec 流控
流控基本概念
Android 硬编码流控
Android 流控策略选择
由于文章篇幅受限,剩余内容过多,文中插图有限,下文只能截图目录展示:
二,中级进阶篇:
Android OpenGL ES 开发(一): OpenGL ES 介绍
Android OpenGL ES 开发(二): OpenGL ES 环境搭建
Android OpenGL ES 开发(三): OpenGL ES 定义形状
Android OpenGL ES 开发(四): OpenGL ES 绘制形状
Android OpenGL ES 开发(五): OpenGL ES 使用投影和相机视图
Android OpenGL ES 开发(六): OpenGL ES 添加运动效果
Android OpenGL ES 开发(七): OpenGL ES 响应触摸事件
Android OpenGL ES 开发(八): OpenGL ES 着色器语言GLSL
Android OpenGL ES 开发(九): OpenGL ES 纹理贴图
Android OpenGL ES 开发(十): 通过GLES20与着色器交互
使用 OpenGL 显示一张图片
GLSurfaceviw 绘制 Camera 预览画面及实现拍照
使用OpenGL ES 完成视频的录制,并实现视频水印效果
高级探究篇:
深入学习音视频编码,如H.264,AAC,研究使用开源编解码库,如x.264,JM 等
深入研究音视频相关的网络协议,如 rtmp,hls,以及封包格式,如:flv,mp4
深入学习一些音视频领域的开源项目,如 webrtc,ffmpeg,ijkplayer,librtmp 等等
将 ffmpeg 库移植到 Android 平台,结合上面积累的经验,编写一款简易的音视频播放器
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
尾声
在我的博客上很多朋友都在给我留言,需要一些系统的面试高频题目。之前说过我的复习范围无非是个人技术博客还有整理的笔记,考虑到笔记是手写版不利于保存,所以打算重新整理并放到网上,时间原因这里先列出面试问题,题解详见:
展示学习笔记
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
3183228)]
[外链图片转存中…(img-AwKxbKY9-1713703183229)]
[外链图片转存中…(img-xvODVQTQ-1713703183230)]
[外链图片转存中…(img-7q2pooaV-1713703183231)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
[外链图片转存中…(img-MCp9AzRd-1713703183232)]
尾声
在我的博客上很多朋友都在给我留言,需要一些系统的面试高频题目。之前说过我的复习范围无非是个人技术博客还有整理的笔记,考虑到笔记是手写版不利于保存,所以打算重新整理并放到网上,时间原因这里先列出面试问题,题解详见:
[外链图片转存中…(img-CdrUdA8p-1713703183233)]
展示学习笔记
[外链图片转存中…(img-zgw9qtjT-1713703183234)]
[外链图片转存中…(img-3vTwQq0z-1713703183235)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!