音视频开发的主要应用有哪些?

音频播放器,录音机,语音电话,音视频监控应用,音视频直播应用,音频编辑/处理软件,蓝牙耳机/音箱,等等

1.视频监控类 (JNI+应用层开发)
从硬件到嵌入式再到软件,涉及开发全面,从硬件数据采集,到中间服务器转发、再到上层终端软件渲染播放。涉及开发太多,Android端涉及到NDK、JNI层的开发
2.播放器类 (应用层开发)
播放器开发 分类,原生播放器播放、第三方播放器、监控类的底层播放器开发
3.直播类 (应用层开发)
目前市场上比较火的直播类,第三方平台众多 如七牛云、阿里云、腾讯直播云等等。
4.视频剪辑类 应用层开发
如用阿里云SDK 进行视频特效处理。

小结:音视频开发,就是要掌握图像、音频、视频的基础知识,并且学会如何对它们进行采集、渲染、处理、传输等一系列的开发和应用。

  • 采集:它解决的是,数据从哪里来的问题
  • 渲染:它解决的是,数据怎么展现的问题
  • 处理:它解决的是,数据怎么加工的问题
  • 传输:它解决的是,数据怎么共享的问题

每一个门类,都可以深挖,衍生出一个又一个充满技术挑战的话题,比如:如何更高效地渲染画面、如何提高音视频的压缩比,如何优化弱网下的音视频数据传输等等。

其实,音视频开发的技术积累,也没有那么难,带着问题去 Google,带着任务去实践,一切都不是问题,我们就从上面说的 4 个方向,逐个探索一下,有哪些知识点,是要我们去了解和掌握的。

下面分别从流程上做一个学习知识小结:

1. 采集

无论在哪个平台,图像、视频最初都是来自摄像头,而音频最初都是来自麦克风,因此,做音视频采集,就要掌握如下的技术知识:

  1. 系统的摄像头采集接口是什么,怎么用 ? 比如:Windows:DirectShow,Linux:V4L2,Android:Camera,iOS:AVCaptureSession 等
  2. 系统的摄像头采集的参数怎么配置,都是什么含义 ? 比如:分辨率、帧率、预览方向、对焦、闪光灯 等
  3. 系统的摄像头输出的图像/视频数据,是什么格式,不同格式有什么区别 ? 比如:图片:JPEG,视频数据:NV21,NV12,I420 等
  4. 系统的麦克风采集接口是什么,怎么用 ? 比如:Windows:DirectShow,Linux:ALSA & OSS,Android:AudioRecord,iOS:Audio Unit 等
  5. 系统的麦克风采集参数怎么配置,都是什么含义 ? 比如:采样率,通道号,位宽 等
  6. 系统的麦克风输出的音频数据,是什么格式? 比如:PCM

2. 渲染

无论在哪个平台,图像、视频最终都是要绘制到视图(View)上面,而音频最终都是要输出到扬声器,因此,做音视频渲染,就要掌握如下的技术知识:

1.系统提供了哪些 API 可以绘制一张图片或者一帧 YUV 图像数据的 ? 比如: Windows:DirectDraw,
Direct3D, GDI,OpenGL 等 Linux: GDI, OpenGL 等
Android:ImageView,SurfaceView,TextureView,OpenGL 等 iOS:
CoreGraphics,OpenGL 等
2. 系统提供了哪些 API 可以播放一个 mp3 或者 pcm 数据 ? 比如: Windows:DirectSound 等 Linux:ALSA & OSS 等 Android:AudioTrack 等 iOS: AudioQueue 等

3.处理

图像和音视频的加工,除了系统的 API,大多数都会依赖一些跨平台的第三方库的,通过掌握这些第三方库的原理和使用方法,基本上就可以满足日常音视频处理工作了,这些库包括但不限于:

图像处理:OpenGL,OpenCV,libyuv,ffmpeg 等
视频编解码:x264,OpenH264,ffmpeg 等
音频处理:speexdsp,ffmpeg 等

4.传输

传输,它解决的是,数据怎么共享的问题,那么,数据究竟怎么共享呢 ?

共享,最重要的一点,就是协议。

我觉得互联网之所以能够如此蓬勃地发展,将整个世界都紧密联系在一起,其实是离不开 W3C 这个委员会的巨大贡献的,因为无论什么数据,要想在不同的国家、不同设备之间互联互通,离不开 “标准”,有了 “标准”,大家就能互相读懂对方。

因此,研究音视频传输,其实就是在研究协议,具体有哪些协议呢 ?

音视频在传输前,怎么打包的,如:FLV,ts,mpeg4 等
直播推流,有哪些常见的协议,如:RTMP,RTSP 等
基于 UDP 的协议有哪些?如:RTP/RTCP,QUIC 等

互联网环境下的音视频的传输,是一个非常有挑战和价值的方向,为了解决弱网下的传输延时、卡顿,提高用户体验,整个业界都在不断地进行着深入的探索和优化。

回归音视频开发知识:
《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 特效等功能

总结:本文主要总结了音视频开发涉及的领域,以及开发流程中需要的方方面面的知识,学海无涯,在音视频的道路上需要不断探索,多一分有多一分的惊喜~

参考资料:

  1. 《雷霄骅的专栏》:http://blog.csdn.net/leixiaohua1020

  2. 《Android音频开发》:http://ticktick.blog.51cto.com/823160/d-15

  3. 《FFMPEG Tips》:http://ticktick.blog.51cto.com/823160/d-17

  4. 《Learn OpenGL 中文》:https://learnopengl-cn.readthedocs.io/zh/latest

  5. 《Android Graphic 架构》:https://source.android.com/devices/graphics/

  6. Android音视频开发专栏 http://blog.51cto.com/ticktick/1956269

  7. 从开发小白到音视频专家http://blog.51cto.com/ticktick/2046899?source=dra

那些年,Android音视频开发那些事儿相关推荐

  1. Android 音视频开发学习思路

    Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的.只能通过一点点的学习和积累把这块的知识串联积累起来. 初级入门篇: Android 音视频开发(一) ...

  2. android音频开发6,Android 音视频开发(一) : 通过三种方式绘制图片

    想要逐步入门音视频开发,就需要一步步的去学习整理,并积累.本文是音视频开发积累的第一篇. 对应的要学习的内容是:在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView ...

  3. Android 音视频开发(二):使用 AudioRecord 采集音频PCM并保存到文件(学习笔记)

    关于 AudioRecord Android SDK 提供了两套音频采集的API,分别是:MediaRecorder 和 AudioRecord,前者是一个更加上层一点的API,它可以直接把手机麦克风 ...

  4. 直播平台源码搭建教程之Android音视频开发

    直播平台源码搭建教程之Android音视频开发 音频 将声音保存成音频的过程,其实就是将模拟音频数字化的过程,为了实现这个过程,就需要对模拟音频进行采样.量化和编码.接下来我们详细讲解这一过程. 采样 ...

  5. Android 音视频开发之基础篇 使用 SurfaceView绘制一张图片

    Android 音视频开发 上一篇文章:使用 imageview绘制一张图片 任务一 SurfaceView绘制一张图片 文章目录 Android 音视频开发 前言 一.surfaceview是什么? ...

  6. Android 音视频开发之基础篇 使用 imageview绘制一张图片

    Android 音视频开发 任务一 ImageView 绘制图片 文章目录 Android 音视频开发 任务一 ImageView 绘制图片 前言 一.配置activity_main.xml 二.添加 ...

  7. Android音视频开发,详说PCM音频重采样、PCM编码

    直播伴音,两种数据能否合在一起?不能叠加在一起 会有噪音 合并以后 再去编码推流 直播的例子 客户端播放器,可以开启多个播放器 对于我们重采样 很多时候就是为了统一格式,就是为了要合并这个流,去推送, ...

  8. Android音视频开发基础(七):视频采集-系统API基础

    前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了<Android 音视频从入门到提高 - 任务列表>.本文是Android音视 ...

  9. Android 音视频开发(三) -- Camera2 实现预览、拍照功能

    音视频 系列文章 Android 音视频开发(一) – 使用AudioRecord 录制PCM(录音):AudioTrack播放音频 Android 音视频开发(二) – Camera1 实现预览.拍 ...

最新文章

  1. C++代理类,句柄(智能指针)_C++沉思录笔记
  2. org.apache.struts2.dispatcher.FilterDispatcher的四个功能
  3. IO流操作-图片操作(二)
  4. python爬取地图上的经纬度_Python调用百度地图API爬取经纬度
  5. 两人团队项目-石家庄地铁查询系统(web版)
  6. 纪中A组模拟赛总结(2021.7.22)
  7. 在GridView里使用CheckBox
  8. C# 海康DVR客户端开发系列(3)—— 连接DVR和图像预览
  9. d语言 c++ 混合编程,C++,D语言,Python语言一次模拟合作开发
  10. VGG16网络,VGG19
  11. pe系统服务器怎么做双盘备份,群晖硬盘版引导二合一启动盘 丢掉U盘小尾巴
  12. Linux下编写GT911触摸驱动
  13. Anaconda卸载与安装
  14. 哲学家进餐问题解决方法
  15. 计算机编程语言排行榜—TIOBE世界编程语言排行榜(2021年10月份最新版)
  16. python等高线绘制_用matplotlib画等高线图详解
  17. 如何区分零线和地线,及其相关理解
  18. ma5671怎么设置_电信/联通/移动,更换华为MA5671光猫详细教程
  19. 新一代 OIer 的快速入门命令行教程
  20. java经典50道编程题(很好练逻辑思维的题)(第一篇)

热门文章

  1. 知因智慧任亮:用知识图谱构建清晰的“产业世界”,做中国最大的产业链金融AI赋能运营商丨Xtecher 封面
  2. 2020-2021 CV算法实习面经(京东/商汤/思谋/依图/图森/字节/腾讯)
  3. 免费python课程排行榜-成长故事|慕课最受欢迎课程排行榜出炉 从此全球蹭课...
  4. Python如何给矩阵加行或列?
  5. IBM WebSphere MQ安装及使用教程
  6. 一男老师每日百词转载+连载(4)
  7. 基准测试 计算机,用于 Windows、安卓和 iOS 系统的 3DMark 基准测试
  8. unity3d terrian tree 地形组件 草木石树无法碰撞的解决办法
  9. java的 oo_Java OO 知识总结
  10. 矩阵求导技巧-YX拉伸法