【问题标题】:Play two videos in one VideoView at the same time在一个 VideoView 中同时播放两个视频
【发布时间】:2014-09-26 08:25:48
【问题描述】:

这不是关于在一个 Activity 上的两个独立 VideoView 中播放两个独立视频的问题。

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

不过,对于测试,手机上的视频文件就可以了。

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

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

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

我不确定从哪里开始或如何最好地解决这个问题,如果可能的话,希望获得一些关于使用方法或对象的指导。

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

【问题讨论】:

  • 您可以使用 2 个 VideoView 一个在另一个之上。两个视频视图的帧将相同。无论如何,不​​可能在一个 VideoView 中同时播放 2 个不同的视频。

标签: android eclipse video android-videoview


【解决方案1】:

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

查看the source code,了解 MediaPlayer 如何在 VideoView 中呈现视频以及 MediaController 如何控制播放。您可能可以在那里破解,让两个 MediaPlayers 同时指向同一个 VideoView/SurfaceView。或者,您也可以继承 MediaPlayer 来处理多个数据源。

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

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

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

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

【讨论】:

  • 您好安德鲁,感谢您的评论。发布此问题后,我开始研究 ffmpeg,但没有找到您提到的 Overlay VideoFilter 类。
【解决方案2】:

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

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

如果您对 VideoView 的要求是因为您想保留媒体控件和播放功能,那么您最好制作自定义 View。扩展LinearLayout,添加两个SurfaceView,权重为1。复制VideoView.java的内容,放到你的新View中,修改处理两个SurfaceView同步播放两个视频。

实际上,最好使用 TextureViews 而不是 SurfaceViews,后者是在 api 14 中添加的。它纠正了 SurfaceView 的许多缺点,并且比 VideoView 更好地处理动画之类的事情。

【讨论】:

  • 您好总督,感谢您的评论。我考虑过使用 TextureViews,但它是在 api 14 中添加的,我希望在 Android 2.2 系统上针对 api 8。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多