我有这个用例,来自MediaPlayer的视频必须传递到两个Surface。不幸的是,整个Android Surface API缺乏该功能(或者至少在研究开发者网站后,我无法找到它)。
我有一个simillar用例,其中视频是由自定义相机模块生成的,但经过轻微修改后,我能够从相机中检索Bitmap,所以我只使用了lockCanvas,drawBitmap和unlockAndPost在两个表面上。使用MediaPlayer,我不知道如何检索位图并在适当的时间保持播放。
此外,我已尝试将Allocation用于此目的,其中一个Allocation用作USAGE_IO_INPUT,两个用作USAGE_IO_OUTPUT,另一个用于ioReceive,copyFrom,ioSend方法。但这也是一个死胡同。由于某些未知原因,RenderScript引擎在我的平台上非常不稳定,我有很多错误,如:
android.renderscript.RSInvalidStateException: Calling RS with no Context active.
当传递给RenderScript.create的上下文是来自Application类的 this 时,或者
Failed loading RS driver: dlopen failed: could not locate symbol .... falling back to default
(我在某处丢失了完整的日志......)。最后,我无法创建适当的输入分配类型以与MediaPlayer兼容。由于我的平台上提到了RenderScript的缺陷,我认为这是解决这个问题的最后手段。
所以,总之:如何播放视频(从mp4文件)到两个Surfaces?此视频必须同步。另外,更通用的问题是,如何在播放过程中将视频播放到#X Surface可以动态添加,删除?