繁体   English   中英

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

[英]Play two videos in one VideoView at the same time

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM