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()。

简单画个分层结构图:

相关推荐

  1. Android12如何查看hidl服务

    2024-07-16 17:26:02       33 阅读
  2. Android 13 - Media框架(20)- ACodec(二)

    2024-07-16 17:26:02       40 阅读
  3. Android 13 - Media框架(22)- ACodecBufferChannel

    2024-07-16 17:26:02       43 阅读
  4. Android 13 - Media框架(21)- ACodec(三)

    2024-07-16 17:26:02       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 17:26:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 17:26:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 17:26:02       58 阅读
  4. Python语言-面向对象

    2024-07-16 17:26:02       69 阅读

热门阅读

  1. axios js请求后端的使用直接使用

    2024-07-16 17:26:02       16 阅读
  2. py每日spider案例之影视搜索篇

    2024-07-16 17:26:02       21 阅读
  3. Triple协议 和dubbo协议

    2024-07-16 17:26:02       21 阅读
  4. 靖江美食元宇宙

    2024-07-16 17:26:02       20 阅读
  5. Git---git本地配置commit_template提交模板,规范开发

    2024-07-16 17:26:02       20 阅读
  6. C#面:dot net core里面的路径是如何处理的?

    2024-07-16 17:26:02       18 阅读
  7. 解析企业为何需要专线接入公有云

    2024-07-16 17:26:02       20 阅读