Android Multimedia框架总结(二十一)MediaCodec中创建到start过程(到jni部分)

最近我正在参加CSDN 2016年度博客之星评选,如果我的文章对你曾有过帮助,不妨点击文末【阅读原文】给我投上一票, 时间:11月28日到12月18日每天都可以投,当然候选人页面,也有其他好基友都在,根据自己喜好,每人每天可投10个不同的候选人。好了,这是题外话,看下今天的正文:

上一章介绍MediaCodec的说明及状态图,从今天开始,将深入源码中看看其过程,看下Agenda如下:

  • 一张图看清MediaCodec从创建到start过程
  • 补充MediaCodec基本用法
  • MediaCodec中BufferInfo内部类:
  • android_media_MediaCodec.cpp
  • android_media_MediaCodec.h

一张图看清MediaCodec从创建到start过程(到jni部分)

补充MediaCodec基本用法

MediaCodec的使用遵循一个基本模式:

  • 1.创建和配置MediaCodec对象
  • 2.进行以下循环:
    • 如果一个输入缓冲区准备好:
    • 读取部分数据,复制到缓冲区
    • 如果一个输出缓冲区准备好:
    • 复制到缓冲区
  • 3.销毁MediaCodec对象 (下面这段文字很奇怪,不能用文字,说违反相关规定,于是用了图片)

MediaCodec中BufferInfo内部类:

本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/53386117

MediaCodec和MediaPlayer在很多地方有相似之处,当Java层调用MediaCodec.createByCodecName,MediaCodec.createDecoderByType,MediaCodec.createEncoderByType都会到达MediaCodec的构造,构造中都会调用native_setup,如下:

其中对应到有这么一段,相当于是作了一次映射

接着进入android_media_MediaCodec_native_setup函数

setMediaCodec函数如下:

接下来看下JMediaCodec的构造

以上几个步骤到得到MediaCodec对像后,就到达Java层调用MediaCodec.configure(format,surface,null,0)

通过获取format中map,就是一个hashmap,便利视频源的格式放到两个数组中,然后,再通过native_configure向下传递

本文出自逆流的鱼yuiop: http://blog.csdn.net/hejjunlin/article/details/53386117

当调用start后,public native final void start();

JMediaCodec中start

最后看下对应jni的android_media_MediaCodec.h如下:

原文发布于微信公众号 - 何俊林(DriodDeveloper)

原文发表时间:2016-11-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏移动开发的那些事儿

Android开发之逻辑单元测试

以上createInetSocketAddress方法就是我在编写单元测试的时候单独抽离出来的方法,一方面我需要mock一个InetSocketAddress来...

1001
来自专栏郭霖

Android图片加载框架最全解析(四),玩转Glide的回调与监听

大家好,今天我们继续学习Glide。 在上一篇文章当中,我带着大家一起深入探究了Glide的缓存机制,我们不光掌握了Glide缓存的使用方法,还通过源码分析对缓...

5366
来自专栏向治洪

Android数据库Realm实践

Android开发中常用的数据库有5个: 1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM。支持JDBC连...

2349
来自专栏Android点滴积累

SharedPreferences 详解(多进程,存取数组解决方案)

一、SharedPreferences基本概念 文件保存路径:/data/data/<包名>/shared_prefs目录下目录下生成了一个SP.xml文件 S...

3279
来自专栏天天P图攻城狮

深入Android Runtime: 指令优化与Java方法调用

在进行apk热修复、插件化、动态加载的时候,会经常多个jar/dex包含相同的class,如果class结构因为需要升级出现了变化,会隐藏一些很难解释的坑在里面...

4776
来自专栏Flutter入门到实战

模仿安卓源码,手写过时的方法兼容低版本

我们经常会使用getColor(R.color.XXX)获取颜色的资源文件,但是在安卓6.0开始,这个方法被标注为过时,推荐使用两个参数的方法替代,如下图所示:

892
来自专栏QQ空间开发团队的专栏

Android 内存泄漏分析心得

本文通过 QQ 和 Qzone 中内存泄漏实例来讲 android 中内存泄漏分析解法和编写代码应注意的事项。

5901
来自专栏求索之路

Android源码设计模式解析与实战笔记

1.单一职责原则:比如说一个ImageLoader,需要加载图片的缓存图片,此时如果将这两个功能都放在一个类中,就违反了这个原则, 我们需要将不同的功能用类精...

4425
来自专栏developerHaoz 的安卓之旅

Android 关于内存泄露,你必须了解的东西

内存管理的目的就是让我们在开发过程中有效避免我们的应用程序出现内存泄露的问题。内存泄露相信大家都不陌生,我们可以这样理解:「没有用的对象无法回收的现象就是内存泄...

651
来自专栏C/C++基础

设计模式 (10)——适配器模式(Adapter Pattern,结构型)

使用设计模式可以提高代码的可复用性、可扩充性和可维护性。适配器模式(Adapter Pattern)属结构性模式,将一个类的接口转换成客户期望的另一个接口。适配...

702

扫码关注云+社区