文章目录

  • 0,题记
  • 1,学习路线
  • 2,学习目标
    • 任务列表
    • 基础知识
    • FFmpeg
  • 3,开始音视频开发必备的技能
    • 1,C语言。
    • 2,Linux。
    • 3,基本的Linux编译执行命令,以及vim操作。
    • 4,JNI,ndk开发流程。

0,题记

做Android开发有三四年了,一直做的都是应用层的APP开发,实现的基本都是UI效果,动画,机型适配,集成第三方的lib进行推送,支付,第三方登录,地图等的功能,就算涉及到视屏的播放也就是直接VideoViewmp4,flv或者其他格式的视屏直接给展示出来,并不会对视频本身做任何的处理,比如视频的压缩、比如清晰度切换,变声,滤镜。。。 就算涉及到拍照,也都是简单的直接调用系统给定的调用系统摄像头的 API进行拍照,然后通过回调方法拿到拍摄的缩略图或者原图的bitmap。并不会涉及到摄像头的控制,美颜,大眼,磨皮,贴纸等功能。
但是音视频的开发是更底层的,就需要涉及到使用麦克风采集音频数据,使用摄像头采集图像数据,然后要对这些数据进行编码,降噪,并增加美颜,变声等的效果,最后录制完成了并播放出来。
总结来说,摄像头的操作分为两种:
1,takeing photos,也就是调用系统相机实现拍照功能,比如一个APP里面个人资料的头像,可以从相册选择图片,也可以调用相机进行拍摄获取图片。
2,controling the camer主要就是控制相机,进行自定义相机,实现和系统相机类似的效果或者不同效果的一个APP,在5.0以后主要采用的是Camera2,这个类比早起版本的Camera功能更强大,开放了更多的可定制可控制拍摄,录制,各个环节的API,当然功能多了,对底层的操作性更强了,那使用起来复杂度也就增加了,其实主要也就是一层一层的回调。

言归正传,
完全没有音视频开发相关的任何的基础,从0开始踩坑,从做技术调研开始,最后的目标是可以做出一个播放器,视频播放器;一个直播APP类似于映客,花椒,斗鱼;一个小咖秀类似于抖音,快手。

记录一下,一路以来的踩坑过程,对个人来说是个总结,记录,对相同想从事音视频开发的朋友也希望能帮助到他们。

废话就说这么多,下面开始正题。

1,学习路线

学习需要一个方向,以往就有人总结出过大概的一个学习路线,我借鉴了,然后又增加了一些,觉得是个比较好的路线。
路线1:任务列表
音视频开发入门指南 (https://blog.51cto.com/ticktick/1956269) 这篇帖子是一个大牛给出的学习路径,我也是从这里开始的,感谢博主。

然后,我想说的是,有了这个任务列表,其实还是抽象,去实现每一个任务的过程其实还是很累,还是有些模糊,不过这个艰辛的过程挺过去了就觉得收货很大,也会提升很多,可以提升自己静下心来研究,静下来做技术的心,克服浮躁;第二点就是提升自己分析问题,解决问题的能力;第三点当然就是思考问题以及自我学习的能力的提升了。作为一名程序员,热爱coding,必须持续的学习,持续的提升自我,技术的革新换代真的是相当的快,停下了学习的步伐就要被落下,就会落后。
路线2:找人带
移动端音频视频入门 https://www.imooc.com/learn/959
FFmpeg音视频核心技术精讲与实战 https://coding.imooc.com/class/279.html
慕课网找资料,李超大牛,在爱奇艺工作,从事的就是音视频相关的领域而且已经工作了好多年,在慕课网开了两个音视频相关的课程,虽然简洁,但是个人觉得很有帮助,一个免费,一个付费。是个不错的入门资料。
这里没有任何的广告情绪和py交易,李超大牛都不知道我是谁,我竟然在帮他打广告,不过这资料确实有帮助。
另外:查资料
在慕课网的手记上查到很多相关的文档,以前并不知道还有这样的地方可以去搜索查询,这里记录下,当然还有CSDN,还有GitHub直接拿到别人的demo看。

2,学习目标

任务列表

  1. 在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View

    1. 在 Android 平台使用 AudioRecord 和 AudioTrack API 完成音频 PCM 数据的采集和播放,并实现读写音频 wav 文件

    2. 在 Android 平台使用 Camera API 进行视频的采集,分别使用 SurfaceView、TextureView 来预览 Camera 数据,取到 NV21 的数据回调

    3. 学习 Android 平台的 MediaExtractor 和 MediaMuxer API,知道如何解析和封装 mp4 文件

    4. 学习 Android 平台 OpenGL ES API,了解 OpenGL 开发的基本流程,使用 OpenGL 绘制一个三角形

    5. 学习 Android 平台 OpenGL ES API,学习纹理绘制,能够使用 OpenGL 显示一张图片

    6. 学习 MediaCodec API,完成音频 AAC 硬编、硬解

    7. 学习 MediaCodec API,完成视频 H.264 的硬编、硬解

    8. 串联整个音视频录制流程,完成音视频的采集、编码、封包成 mp4 输出

    9. 串联整个音视频播放流程,完成 mp4 的解析、音视频的解码、播放和渲染

    10. 进一步学习 OpenGL,了解如何实现视频的剪裁、旋转、水印、滤镜,并学习 OpenGL 高级特性,如:VBO,VAO,FBO 等等

    11. 学习 Android 图形图像架构,能够使用 GLSurfaceviw 绘制 Camera 预览画面

    12. 深入研究音视频相关的网络协议,如 rtmp,hls,以及封包格式,如:flv,mp4

    13. 深入学习一些音视频领域的开源项目,如 webrtc,ffmpeg,ijkplayer,librtmp 等等

    14. 将 ffmpeg 库移植到 Android 平台,结合上面积累的经验,编写一款简易的音视频播放器

    15. 将 x264 库移植到 Android 平台,结合上面积累的经验,完成视频数据 H264 软编功能

    16. 将 librtmp 库移植到 Android 平台,结合上面积累的经验,完成 Android RTMP 推流功能

    17. 上面积累的经验,做一款短视频 APP,完成如:断点拍摄、添加水印、本地转码、视频剪辑、视频拼接、MV 特效等功能

参考资料:

1. 《Android音频开发》:http://ticktick.blog.51cto.com/823160/d-152. 《雷霄骅的专栏》:http://blog.csdn.net/leixiaohua10203. 《FFMPEG Tips》:http://ticktick.blog.51cto.com/823160/d-174. 《Learn OpenGL 中文》:https://learnopengl-cn.readthedocs.io/zh/latest/5. 《Android Graphic 架构》:https://source.android.com/devices/graphics/

基础知识

音视频开发的基础概念以及流程。在后续的博客里会梳理总结出来。

FFmpeg

1,FFmpeg常用命令:
1.1,视频录制命令
1.2,多媒体文件的分解、复用命令
1.3,裁剪与合并命令
1.4,图片、视频互转命令
1.5,直播相关命令
1.6,各种滤镜命令
2,FFmpeg基本开发:
2.1,c语言
2.2,FFmpeg核心概念与常用结构体
2.3,多媒体文件的分解、复用-demo
2.4,多媒体格式的互转-demo
2.5,从mp4裁剪一段视频
2.6,demo-小咖秀
3,音视频编解码
3.1,H264编码
3.2,H264解码
3.3,音频AAC编码
3.4,音频AAC解码
3.5,视频转图片-demo
4,音视频的渲染
4.1,SDL事件渲染
4.2,SDL视频纹理渲染
4.3,SDL音频渲染
4.4,YUV视频数据播放-demo
4.5,YUV视频倍速播放-demo
4.6,pcm音频播放器-demo
5,开发播放器
5.1,实现mp4的视频播放,ijkplayer,ffplayer。
5.2,实现mp4的音频播放
5.3,实现一个初级播放器
5.4,音视频同步
5.5,播放器内核,快进、倍速播放、显示字幕
6,Android中使用FFmpeg
6.1,编译Android端可以使用的FFmpeg
6.2,Java与c语言相互调用
6.3,Android调用FFmpeg–demo。

3,开始音视频开发必备的技能

1,C语言。

FFmpeg是用C开发的,所以必须懂点C语言,不过也不用懂太多,指针,结构体,枚举,这些基本的东西懂得就OK了。

2,Linux。

FFmpeg在Linux上最优良,所以最好是在Linux下采用源代码编译安装。可以使用VMware+centeros或者VMware+ubantu。
需要注意一点,在安装Linux的时候我们需要将必须的包安装上。主要有下面几个包:

  1. gcc
  2. g++
  3. make
  4. cmake
  5. automake
  6. gdb
  7. nasm
  8. yasm
  9. wget

3,基本的Linux编译执行命令,以及vim操作。

4,JNI,ndk开发流程。

Android主要是采用Java开发,后续当然是Java和C互相调用,其实主要的还是Java调用C,会将Linux下编译后的程序打包成so包,移植进Android工程进行调用。

准备工作就先说这么多,后续的博客会讲述安装中的一些坑。
如果对你有所帮助,请点赞留言。

Android音视频开发---0基础入门准备篇相关推荐

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

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

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

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

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

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

  4. Android音视频开发基础(六):学习MediaCodec API,完成视频H.264的解码

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

  5. Android 音视频开发(一) -- 使用AudioRecord 录制PCM(录音);AudioTrack播放音频

    前言,音视频这块,确实比较难入门,本着学习的态度,我这边也跟着 Android 音视频开发入门指南 打怪升级,留下个脚印,大家共勉. 音视频 系列文章 Android 音视频开发(一) – 使用Aud ...

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

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

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

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

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

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

  9. 23最新《Android音视频开发进阶指南》,音视频开发者速领

    作为Android开发程序员,我们时刻站在互联网的前端,而音视频作为现在乃至未来几年一个强劲的风口,吸引了许多程序员的关注. 那么音视频开发的行业现状究竟如何呢?我们又该怎样入门呢?请看下文: 音视频 ...

最新文章

  1. 构建根文件系统启动(1)
  2. ae中心点重置工具_不懂这些知识,你的AE白学了!
  3. 幂等性概念及数据库乐观锁机制
  4. Tasker文件夹说明
  5. 跨国实时网络调度系统设计
  6. Leet Code OJ 482. License Key Formatting [Difficulty: Medium]
  7. 20--两个数组的交集
  8. 清华王兴再抛神论:为什么教育决定着中国餐饮业质量?
  9. tampermonkey脚本header介绍
  10. Spring Cloud核心组件原理分析
  11. 如何看待清华大学生命科学学院削减研究生补助的行为?
  12. python判别性别的代码_python如何实现性别识别 python实现性别识别代码示例
  13. Java的书写汽车价格_ES Java API_基于mget实现多辆汽车的配置与价格对比
  14. java判断一个字符串是否为空,isEmpty和isBlank的区别
  15. 最新版本elasticsearch本地搭建入门篇
  16. 昆明职高计算机学校,昆明职高学校,昆明职高学校前十强,昆明职高学校哪些比较好一点 - IT教育频道...
  17. 数组指针和指针数组的区别(转)
  18. css中的flex(弹性)布局
  19. linux ntp时间同步失败,linux下用ntpdate时间同步不成功。
  20. 查看服务器显卡运行状况

热门文章

  1. Spread Studio 8 新特性:表格(Table)功能
  2. Android获取软键盘的高度、键盘的打开与关闭、监听键盘处于打开还是关闭状态
  3. matlab保存符合条件的值到一个新的向量
  4. 微信苹果ios端,公众号中打开网页分享无效错误有问题
  5. 四位密码锁*电子密码锁的设计
  6. 图文:高春辉和他的网站梦
  7. MySQL 的隐式转换
  8. python ai语义分析_易百教程人工智能python补充-NLTK包
  9. EXCEL if公式如何使用
  10. 学会python的好处 知乎