我会用这个系列的文章把我学习音视频的过程记录下来,如果你是音视频方向的小白,那么跟随着我的脚步,我相信你一定可以做到对音视频各个领域都会有所了解,再通过接下来自身的努力,来拓宽自己的道路.
这篇文章内容的前提是你对Android 开发已经有了一定的基础,并能分析一些问题,快速的接受一些新的知识以及概念,对于音视频方向的知识,有非常多的概念需要理解,并不是要求你一定要马上记住,但是了解是需要做到的,
*这里所有的天数都是全心投入的时间,并不是下班后回家单独学习的时间,这个时间仅仅作为一个参考
音视频学习基础1: C 、C++ 学习 (学习天数30天)
关于这方面的内容是学习音视频的基础,如果没有相关的知识,那么音视频资料和代码根本没有办法看,如果你的学习能力还不错,可以从 哔哩哔哩 搜索 C++ 的内容,其中有一个关于黑马视频的 C++ 学习内容就不错
音视频学习基础2:jni 学习 (学习天数10天)
为什么说这个方面也是学习音视频方向的基础,因为在 Android 环境中,所有的底层调用都离不开jni 的参与,你需要了解 动态库-> .so 、静态库->.a、动态注册(JNI_OnLoad)、静态注册、FrameWork 加载 jni 的位置(AndroidRunTime.cpp)、如何查看FrameWork 的jni注册及流转(先找静态方法,是否有加载jni,没有则去RunTime找对应的类库)、jni 如何调用java变量(jni反射)、jni 如何调用java方法(jni反射) 等,相关知识 有助于在学习音视频相关源码过程中把握事件的走向,分析事件的流转
音视频学习基础3:音视频基础理论(学习天数2天)
音视频的理论知识是非常多而庞杂的,很多东西并不是你看了一遍就能记住的,先看这些方面的理论知识只是帮助你在概念上有一定的了解,在你遇到了相关问题时,可以通过一些关键字,针对具体的问题去深入了解,网上有非常多的文章介绍相关的概念,随便从网上找了一篇 一文搞懂音视频基础知识,这篇就够了但是由于自己刚接触这一方面,很多东西并不是阅读后就能了解的,只有经过深入的思考后才能化为己用,我自己也会经常从网上找一些资料
音视频相关类的功能介绍,以及作用
至于为什么要先把他放在前面,这是我自己对于学习源码过程中的一些总结,想要了解一个功能的实现,那么你就需要知道在这个过程中都有哪些关键类参与的哪些功能,从宏观上有了一定的了解,那么带着相应的概念再去阅读源码,了解详细的实现就能做到定性的分析,不至于无从下手
1:MediaExtractor 将视频文件的 视频轨 与 音频轨 分离,在播放视频过程中并不是音频与视频同时播放的,他们的播放是分离的,所以在视频的时候经常能遇到 声音与口型对不上的问题,
2:MediaMuxer 将视频轨与音频轨合成,并成为一个新的可以播放的视频文件
3:AudioTrack 音频播放,可以播放原始 PCM 格式的数据,底层使用的 AudioTrack.cpp 调度 AudioFlinger 来播放音频
4:MediaPlayer 一个视频播放器,其功能和设计都是非常复杂的,状态的转换以及 底层服务BpBinder 的流转。底层使用的是 MediaPlayer.cpp ,MediaPlayer.cpp 通过 iBinder 调用 ServiceManager 获取 MediaPlayerService::Client,通过Client 最终调度到 NuPlayer , 其中还涉及到 ALooper AHandler AMessage 的使用,整个流程我也正在分析,目前也是正在学习相关部分的内容,我会在后续博客的内容中将具体的UML 类图呈现出来
5:MediaCodec: 音视频硬编解码类,在整个播放流程中起着至关重要的作用!
流媒体 WebRTC
后续学习
音频底层库 OpenSL ES
后续学习
图像处理底层库 OpenGL ES
后续学习
ijkplayer 学习
后续学习