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

时间:2014-09-17 05:18:04

标签: android eclipse video android-videoview

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

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

虽然可以进行测试,手机上的视频文件也可以。

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

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

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

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

我正在开发一个演示应用程序,以使用Eclipse在Android 2.2系统上显示客户端。由于演示手机运行的是Android 2.2,我此时并不希望定位任何更高级别的系统。

2 个答案:

答案 0 :(得分:1)

我不完全确定您为什么要使用像这样的VideoView。 VideoViews只使用一个MediaPlayer,并使用它来同步一个视频,可能需要通过同一个VideoView子类在同一个表面上渲染两个MediaPlayers。

查看the source code,了解MediaPlayer如何在VideoView中呈现视频以及MediaController如何控制播放。你可以在那里乱砍,让两个MediaPlayers同时指向同一个VideoView / SurfaceView。或者,您可以将MediaPlayer子类化为处理多个数据源。

执行这些操作中的任何一个都与构建VideoView和MediaPlayer相反,性能将受到巨大冲击。

如果使用VideoView并不是一项艰难的要求,那么我的建议是使用像ffmpeg这样的现有视频库,这比重写基础媒体类更容易,更高效(警告:使用ffmpeg将需要NDK,我建议使用existing ffmpeg wrapper来节省时间。

将ffmpeg添加到您的项目后,将辅助视频应用为OverlayVideoFilter将非常简单,并且应该允许您将一个视频叠加在另一个上面(尽管同时控制播放可能是一个挑战为了你)。

正确的拍摄路径可能取决于你想要对复合视频做什么(将视频导出为单个视频,控制播放等)。

答案 1 :(得分:1)

无法在单个VideoView中播放两个视频。这是因为VideoView实际上是一个扩展的SurfaceView,它已经过时了,并且开始时从未有过很好的工作。 (在底部更多内容)

我不知道为什么你对使用VideoView有严格的要求,因为它非常简单,并且不会满足你的需要。

如果您对VideoView的要求是因为您希望保留媒体控件和播放功能,那么最好制作自定义视图。扩展LinearLayout并向其添加两个SurfaceViews,权重为1.复制VideoView.java的内容并将其放在新视图中,并进行修改以处理两个同时播放两个视频的SurfaceView。

你最好使用TextureViews而不是SurfaceViews,它们在api 14中添加。它可以纠正SurfaceView的许多缺点,并且可以比VideoView更好地处理动画等内容。