这里有个setupVideiEncoder,看来这里应该是对视频编码的地方 根据不同的编码类型来设置不同的参数,这个方法代码有些多直截取部分代码:![](https://box.kancloud.cn/2016-03-18_56eba994b0a71.png)
来看看关键的一句,这里创建了OMXCodec 然后把创建了的编码器赋值给MediaSource,这里的MediaSource可以看作是OMXCodec的封装,这样编码器的准备工作就已经做好了:
![](https://box.kancloud.cn/2016-03-18_56eba994c60c6.png)
接着我们回到startMPEG4Recording() 方法,可以看到这里在对解码器进行准备之后,建立了metadata,然后调用setupMPEG4MetaData来存储媒体信息到metadata中,最后我们调用MediaWriter的start方法开始进行编码:
![](https://box.kancloud.cn/2016-03-18_56eba994d9d75.png)
这个是setupMPEG4MetaData方法用来存储媒体信息的各项参数:
![](https://box.kancloud.cn/2016-03-18_56eba994ecf2d.png)
接下来我们看看mediaWriter的start方法的实现,meidaWriter只是个描述的文件,我们调用的是实现了这个头文件的MPEG4Writer的start方法,这里截取我们关注的代码,这里开启了一个线程并调用了startTracks方法:
![](https://box.kancloud.cn/2016-03-18_56eba9950bb29.png)
startTracks方法中的实现,建立了一个迭代器,不断的调用start方法:
![](https://box.kancloud.cn/2016-03-18_56eba9951ce72.png)
这里的it就是Track类,我们看看Track类,他是MPEG4Writer的内部类:
![](https://box.kancloud.cn/2016-03-18_56eba995398ba.png)
接着看看Track类中start的实现,这里截取我们感兴趣的代码 原来调用的是MediaSource,我们前面说过MediaSource就是OMXCodec的封装,这下我们知道了前面是用来准备编码器的,这里开始调用编码器开始编码了,也就是说我们从mediaRecorder.java调用了start方法最终调用的就是OMXCodec.cpp的start方法:
![](https://box.kancloud.cn/2016-03-18_56eba9954f22f.png)
- 前言
- Camera源码分析(android2.2)
- Android开机启动流程说明
- android应用程序管理机制
- MediaPlayer框架概述(一)
- MediaPlayer框架概述(二)
- Android MediaPlayer+Stagefright框架(音频)图解
- Stagefright框架解读(—)音视频Playback流程
- Android mediaRecorder框架简述(一)
- Android mediaRecorder框架简述(二)
- Android IntentService浅谈以及源码分析
- Android多线程(二)AsyncTask源码分析
- Android View体系(五)从源码解析View的事件分发机制
- Android View体系(六)从源码解析Activity的构成