Android 4.2版本4个MediaPlayers =“无法播放此视频”(Android 4.2

2019-08-19 21:16发布

每当我试图加载至少4个mediaPlayers,其中一人将损坏它试图加载和触发Android操作系统消息的视频“无法播放此视频”

其他信息:

对于3个mediaPlayers一切工作正常。

在其他Android版本,从4.2,同样的代码同为4个的视频作品不同。

4视频可以独立于设备上播放。 有没有格式问题。

启动程序,并得到“无法播放此视频”的消息后,该视频不能再在任何其他应用程序播放,除非我重置设备。

我想这都与VideoViews或surfaceViews显示独立MediaPlayers。

我复制在运行Android 4.2以上设备的误差。 在Android 4.1.2与其他Android 4个版本,我不记得了代码工作的罚款。

Answer 1:

在Android上,这个想法是,相关媒体编解码器一切都从具有使用一个一致的和独特的API的开发人员隐藏: MediaPlayer

当您播放的媒体,这将是一个流或一些位于外部设备上,低级别的编解码器/解析器被实例化每一个应用程序将需要他们的帮助时间。

然而,它发生,对相关的硬件解码特殊原因,一些编解码器,不能被实例化不止一次。 由于事实上, 每一个应用程序必须被释放的资源(例如编解码器的情况下),当他们不需要他们了通过调用MediaPlayer.release()处于有效状态。

事实上,我在说什么中所示的文件release的Android开发者网站:

与此MediaPlayer对象相关的资源释放。 它被认为是很好的做法,当你使用的MediaPlayer完成调用此方法。 特别地,每当应用程序的活动暂停(其的onPause()方法被调用),或停止(其的onStop()方法被调用),此方法应被调用以释放MediaPlayer对象,除非应用程序有一个特殊的需要保持对象周围。 除不必要的资源(如存储器和编解码器的实例)被保持,不调用此方法,如果立即MediaPlayer对象不再需要也可能导致连续的电池消耗为移动设备,以及重放失败用于如果其他应用程序不在相同的编解码的多个实例被支撑在设备上。 即使同一编解码器的多个实例的支持,当不需要的多个实例在同一时间使用的一些性能下降可能。

所以,无论你是不是要求release你做的时候播放,或者另一个应用是抱着对这种资源的参考。

编辑:

如果您需要进行渲染在同几个视频Activity ,你有两个选择。 正如我在我的回应说,你本来想是不可能的,因为低层次的问题,也不是由道路的iOS。

你可以尝试 ,虽然做的是:

  • 如果您玩的是媒体不是实时的流媒体内容,你可以包裹4部影片到一个单一的一个,使用广泛使用的免费视频编辑器之一。 然后呈现在您的活动在全屏幕视频,它看起来就像你有4 Views

  • 如果它们是实时/非记录的内容,保持第一视频原样。 我想每一个视频使用的是相同的编解码/编码的容器。 你可能会尝试是让他们使用不同的编解码器和不同的格式转码3部其他影片。 请确保您转码到被编解码器/容器Android支持 。 这可能迫使潜在的Android在同一时间使用不同解码器。 我觉得这是矫枉过正比你期待的结果。

  • 最后,你可以使用不同的后端用于诸如解码MediaPlayer + FFMPEG或只是FFMPEG 。 但同样,即使它的工作原理,这将是,我认为,一个巨大的矫枉过正。

总之这件事,你不得不做出妥协,为了这个工作。



文章来源: Android 4.2 with 4 MediaPlayers = “Can't play this video”