同时在一个VideoView中播放两个视频

Mat*_*lly 5 eclipse video android android-videoview

这不是关于在一个活动中在两个单独的VideoView中播放两个单独视频的问题.

我被要求查看是否可以使用单个VideoView创建活动.当用户打开活动时,系统会要求他们选择基本视频,然后选择第二个视频.两个视频将同时在一个VideoView中播放,但基本视频的alpha值为255,第二个视频的alpha值为150.

但是,为了测试,手机上的视频文件可以.

目前,我只能创建一个在VideoView中播放单个视频的活动.

我想如果我创建了一个自定义VideoView类,我可以覆盖onDraw函数,并以某种方式从第二个视频中抓取视频帧,应用alpha然后在第一个VideoView的画布上重绘它,但我不知道从哪里开始.

我对这个过程的另一个顾虑是用于在一个VideoView中一次播放两个视频的内存量,以及应用alpha然后无缝重绘它而不影响视频性能或播放所需的处理.

我不知道从哪里开始或如何最好地接近这个,如果可能的话,希望对方法或对象的使用提供一些指导.

我正在开发一个演示应用程序,使用Eclipse在Android 2.2系统上显示客户端.由于演示手机运行的是Android 2.2,我现在不打算针对任何更高的系统.

And*_*rew 2

我不完全确定你为什么要使用这样的 VideoView 。VideoView 仅使用一个 MediaPlayer,并使用它在另一个视频之上同步一个视频可能需要通过同一个 VideoView 子类在同一表面上渲染的两个 MediaPlayer 的非常复杂的实现。

查看源代码,了解 MediaPlayer 如何在 VideoView 中渲染视频以及 MediaController 如何控制播放。您可能可以在那里进行修改,让两个 MediaPlayer 同时指向同一个 VideoView/SurfaceView。或者,您可以子类化MediaPlayer来处理多个数据源。

执行这些操作中的任何一个都与 VideoView 和 MediaPlayer 的构建目的背道而驰,并且性能将受到巨大影响。

如果使用 VideoView 不是硬性要求,那么我的建议是使用现有的视频库,例如ffmpeg,这比重写基本媒体类更容易且性能更高(警告:使用 ffmpeg 将需要 NDK,我建议使用现有的 ffmpeg 包装器以节省时间)。

将 ffmpeg 添加到您的项目后,将辅助视频应用为OverlayVideoFilter将相当容易,并且应该允许您将一个视频分层在另一个视频之上(尽管同时控制播放可能对您来说是一个挑战)。

正确的路径可能取决于您获得复合视频后想要对其执行的操作(将视频导出为单个视频、控制播放等)。