自学内容网 自学内容网

Android12 MultiMedia框架之NuPlayer Surface

在学习NuPlayer创建Decoder和Renderer之前,得先看下video数据最终生产到什么地方去?答案是Surface,而且Surface是NuPlayer创建Decoder的条件。

APP会创建一层SurfaceView来显示视频层,同时内部会创建一个BLASTBufferQueue,它的生产者会挂载到我们的Decoder,枢纽就是BpGraphicBufferProducer,它的消费者是SurfaceFlinger,会把这个APP的Layer(SurfaceView在SurfaceFlinger中的对应概念)同其他APP的图层一起合成送显上屏。

在JAVA层经过层层传递最终在MediaPlayer中会拿到Surface,然后再传递到JNI层中,这里会剥离出BpGraphicBufferProducer一路传递到NuPlayer中保存起来。

JAVA和JNI层的代码还是比较简单的,这里罗列下代码路径和函数名:

//frameworks/base/media/java/android/media/MediaPlayer.java
public static MediaPlayer create(Context context, Uri uri, SurfaceHolder holder,
            AudioAttributes audioAttributes, int audioSessionId)

//frameworks/base/media/jni/android_media_MediaPlayer.cpp
static void
android_media_MediaPlayer_setVideoSurface(JNIEnv *env, jobject thiz, jobject jsurface)

调用到NuPlayer中的接口为setVideoSurfaceTextureAsync()。

简单画个分层结构图:


原文地址:https://blog.csdn.net/yzq_yezhiqiang/article/details/140464631

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!