mudcastles 发表于 2020-9-18 18:02

如何在mediacodec解码时同时渲染和得到数据帧?

我有一个需求,我需要将H264编码的视频流解码并显示,同时我需要拿到解码后的每一帧,并添加水印然后推送至RTMP流媒体服务器。

据我所知,在解码时只能通过参数来让解码器显示到Surface或者拿到YUV数据。但我现在需要在Surface上显示原始图像,并对YUV进行处理。谁有这方面的经验?望不吝赐教!!

或者变相解决,下面是我的想法和测试:
1.通过TextureView显示视频,然后在监听到视频帧到来时通过TextureView提供的getBitmap方法拿到Bitmap,转成YUV后处理。
这种方式经过测试,原本30FPS,直接就掉帧到了10FPS左右。显然不行。
2.通过解码得到YUV数据,然后将YUV数据转为RGBA,重写SurfaceView,然后在SurfaceView中拿到Canvas进行绘制。这种方法经过测试,闪烁的很厉害,而且因为用到了Bitmap,程序会频繁GC,体验很差。

我想过通过NDK直接使用surface对YUV帧进行渲染,但是网上的资料千篇一律,github上的项目寥寥无几,可以找到的项目在Android.mk中用到的依赖都没有给出,不知道如何处理这些依赖。
页: [1]
查看完整版本: 如何在mediacodec解码时同时渲染和得到数据帧?