小编mon*_*war的帖子

android媒体播放器视频冻结播放本地文件

我正在开发一个应用程序,可以在零售点无限期地循环本地视频文件.我正在使用Android MediaPlayer类,并为Minix X8 Plus开发,这是一个在Kodi版本的Android 4.4.2上运行的多媒体中心.设备将在HDMI屏幕上播放视频.

大多数情况下,视频播放成功,但我很难定期冻结图像,而音频一直播放.冻结的频率会使视频与视频不同,但几乎总是在视频播放的开始时,可​​以是第一遍或后续循环.媒体播放器设置为循环,mediaPlayer.setLooping(true)我启用了以下侦听器:

  • MediaPlayer.onErrorListener
  • MediaPlayer.onInfoListener
  • MediaPlayer.OnVideoSizeChangedListener
  • MediaPlayer.OnSeekCompleteListener
  • MediaPlayer.OnBufferingUpdateListener
  • MediaPlayer.OnPreparedListener

在冻结期间,我没有得到任何回调,没有错误,没有信息回调.我认为问题必须是Android MediaPlayer的内部问题,因为我没有得到异常或错误,问题只发生在5-20%的时间内,具体取决于视频.

我有一个解决方法,我监视视频"播放头"的位置mediaPlayer.getCurrentPosition()与媒体播放器缓冲的数量MediaPlayer.OnBufferingUpdateListener.onBufferingUpdate(),返回当前缓冲的视频文件的百分比.我发现有时会发生冻结并且播放位置不断更新,好像一切都很好,但最终播放位置将超过播放器缓冲的数量.当发生这种情况时,我打电话mediaPlayer.reset()并再次通过整个设置过程调用mediaPlayer.setDataSource()mediaPlayer.prepareAsync().我还监控mediaPlayer.getCurrentPosition()重复返回相同的位置.在某些视频中,这可能发生在开头(卡在位置0)或在视频冻结后结束(卡在最后一个位置,无法循环).

我真的很想找到另一个解决方案.所有视频的行为都不同,即使重置了媒体播放器,我也会留下一个长时间存在问题的冻结图像.

我已经梳理了SO以寻求解决方案.问题类似于:SO在这里发布,但不完全相同.

正如该帖子中所建议的,我正在轮询,mediaPlayer.getVideoWidth() and mediaPlayer.getVideoHeight()直到它在开始播放之前返回非0数字.

我看过ExoPlayer,但在播放Android MediaPlayer没有问题的视频文件时遇到了问题.我还在这里读到,使用ExoPlayer播放本地文件没有多大优势.

我也看过Grafika作为MediaPlayer的替代品,但它只是视频,没有音频,并不是一个完整的媒体播放器.

我也看过VLC for Android,但是没有太多关于在你的应用程序中将它用作库的文档,并且它仍然在进行大量工作.

如果有人有类似的问题,或者可以建议Android MediaPlayer的开源替代品,我很乐意听取您的意见.

以下是播放视频的活动中的一些代码.这是很多,我试图将其削减到媒体播放器代码.

 private void initMediaPlayerOnPreparedListener() {
    try {
        mediaPlayer.prepareAsync();
        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                obtainVideoDimens();
                obtainDisplayDimens();
                calcVidToDisplayRatio();
                applyTransformTextureView();
                applyLayoutParamsTextureView();
                if (playbackStuckAtZeroReset) {
                    mediaPlayer.seekTo((33)); // should be one one frame into …
Run Code Online (Sandbox Code Playgroud)

audio video android android-mediaplayer

6
推荐指数
0
解决办法
1369
查看次数

标签 统计

android ×1

android-mediaplayer ×1

audio ×1

video ×1