[bilibili/ijkplayer]android mediacodec 转数据格式

2024-08-20 563 views
5

我想要把mediacodec解码出来的数据转成YUV420P的 拿到unity中渲染播放,请问我应该怎么进行这个数据格式的转化

回答

9

NO

8

@Android4MediaPlayer 请问这个功能是不能实现吗 why

2

如果你要做这个需求,就单独自己弄一个demux + mediacodec(input without surface) 即可, 因为硬件厂商的android video outputBuffer在anativewindow render流程时候是个只是个指针(vendor private pointer: luma,chroma,pitch...etc info).

7

可以通过dequeueOutbuffer 返回的index来得到对应的picture buffer,随后再进行转换,但是这样做因为使用了memcpy,所以会造成性能损失

0

@raymond1012 create mediacodec时候如果带了surface. 一般dequeueOutPutBuffer拿到的只是native vendor指针 64位8个byte. 拿不到yuv fuffer的。 你的这个结论是哪家芯片方案的手机啊?

0

@PengBoShi 有一种zero memcpy的方式. 把解码数据可以额外处理再渲染. 就是使用opengl es api. 参考google demo bigflake.

4

@teddyla 并没有哪家的芯片方案,我们做的是sdk 肯定要适应所有的android机。。但是这个功能我不太知道怎么去实现

4

@raymond1012 如果memcpy性能损失 恐怕根本就没办法流畅的播放了

2

@PengBoShi 如果你是想要显示的buffer额外再有渲染处理 我上面已经给你solution了。 市面上把图片+视频合成为一个video(包含显示时候特效)的android 方案 都是来源于bigflake 中用opengl es实现的。 这个因为有商业价值 估计暂时没有人开源具体源码。

8

功能已经实现,可以直接获取到buffer

2

@PengBoShi 能分享下吗 ?怎么获取到yuv420p data的 ?