[Android] native MediaCodec

前言:

Android 的 libstagefright 库提供了 MediaCodec 组件,让应用层可以直接与 平台编解码器 交互。

MediaCodec 既有 JAVA 接口(\frameworks\base\media\java\android\media\MediaCodec.java),又有 NDK 接口(/frameworks/av/media/ndk/include/NdkMediaCodec.h  &&  /frameworks/av/media/ndk/NdkMediaCodec.cpp)。开发者可以自行选择使用 JAVA 还是 c++ 对MediaCodec 进行封装,由此可见MediaCodec 的重要性。

MediaCodec 的功能定位是编解码器中间件,它规范了编解码器的工作流程,并提供了成员变量mCodec 和 mBufferChannel 给平台层用以集成,平台层只需要实现两个继承于类CodecBase 和 BufferChannelBase 的子类,然后把他们自己实现的类封装成动态库,再把动态库注册到 libstagerfrightloader 里面即可,这样MediaCodec便可以连接到自定义的 CodeBase 子类 和 BufferChannelBase 子类。

不论是 JAVA 接口还是 NDK 接口,最终都会进入 native MediaCodec : /frameworks/av/media/libstagefright/MediaCodec.cpp

官方参考:https://developer.android.com/reference/android/media/MediaCodec

NDK 接口介绍:

见:/frameworks/av/media/ndk/include/media/NdkMediaCodec.h

native 介绍:

源码:/frameworks/av/media/libstagefright/MediaCodec.cpp

猜你喜欢

转载自blog.csdn.net/ykun089/article/details/134330984