Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android VideoView/MediaPlayer错误(1,-18)_Android_Media Player_Android Videoview - Fatal编程技术网

Android VideoView/MediaPlayer错误(1,-18)

Android VideoView/MediaPlayer错误(1,-18),android,media-player,android-videoview,Android,Media Player,Android Videoview,我有一个根据API 2.2级构建的应用程序。此应用程序包含一个视频,它一启动就开始播放。视频在视频视图中播放,实际视频文件存储在我的内部存储器(我的应用程序包的文件目录)中 大多数情况下,它的启动都很好。但偶尔我会看到一个错误弹出窗口,上面写着“对不起,这个视频不能播放”,并且有一个Ok按钮。我一按下ok按钮,视频就开始正确播放。我需要弄清楚是什么导致了这个错误,或者至少我怎样才能捕捉到它是什么错误并让它再试一次,因为在我点击ok后它总是工作得很好。在显示此错误框的日志中,我看到以下消息: E

我有一个根据API 2.2级构建的应用程序。此应用程序包含一个视频,它一启动就开始播放。视频在视频视图中播放,实际视频文件存储在我的内部存储器(我的应用程序包的文件目录)中

大多数情况下,它的启动都很好。但偶尔我会看到一个错误弹出窗口,上面写着“对不起,这个视频不能播放”,并且有一个Ok按钮。我一按下ok按钮,视频就开始正确播放。我需要弄清楚是什么导致了这个错误,或者至少我怎样才能捕捉到它是什么错误并让它再试一次,因为在我点击ok后它总是工作得很好。在显示此错误框的日志中,我看到以下消息:

 ERROR/PVOMXAudDecNode(21215): Ln 2232 OMX_EventError nData1 -2147479547 nData2 0
 ERROR/PlayerDriver(21215): Command PLAYER_PREPARE completed with an error or info -18
 ERROR/MediaPlayer(9282): message received msg=100, ext1=1, ext2=-18
 ERROR/MediaPlayer(9282): error (1, -18)
 ERROR/MediaPlayer(9282): callback application
 ERROR/MediaPlayer(9282): back from callback
 ERROR/MediaPlayer(9282): Error (1,-18)
 DEBUG/VideoView(9282): Error: 1,-18
我在哪里可以找到关于错误代码-18具体表示什么的参考?还有谁有什么建议我可以从一开始就阻止它发生。我只在Sprint Epic 4g上观察到这个错误

编辑:据我所知,没有任何异常被抛出给我。我假设正在发生的事情是,视频视图知道捕获导致异常的任何异常,并抛出弹出窗口。在我的日志中没有异常堆栈跟踪,只有对错误-18的引用

至于我是如何打电话给你的,请准备好。我用这个:

    mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer arg0) {
             mVideoView.start();
        }
    });
这是:

mVideoView.setVideoPath(file.getAbsolutePath());
它调用prepare作为setVideoPath的一部分(我假设它无论如何都会调用,但是这个方法没有文档记录)。这导致onPrepared在我的侦听器中被调用

编辑2:现在我刚刚添加了一个类似这样的侦听器:

编辑iMotant!此代码将在ICS上执行INTE错误循环。对于ICS设备,我进行了setPath调用,并返回false。它自己再试一次,就成功了。

    mVideoView.setOnErrorListener(new OnErrorListener(){

        @Override
        public boolean onError(MediaPlayer arg0, int arg1, int arg2) {
            Log.i(myTag, "MP ERROR: "+ arg1 + " - " + arg2);
            mVideoView.setVideoPath(file.getAbsolutePath());
            return true;
        }

    });
这捕捉到了错误,我可以在日志中看到,发生此错误时arg2=-18。我只是让它重试并返回true,这样它就不会弹出对话框。到目前为止,我从未见过它连续两次失败,所以它总是正确地启动视频,不会产生无限循环


如果有人能确切地告诉我错误代码-18指示的是什么,我仍然非常感兴趣。

如何捕获
prepare()
引发的潜在异常?您是否专门捕获了
IOException
,然后重试调用
prepare()


尝试改用
prepareAsync()
,当播放机准备就绪时,它不会阻塞并调用侦听器。此外,如果您在Froyo或Gingerbread上运行它,它也不会抛出
IOException

,问题可能是您的设备不支持播放文件。较低版本不支持使用基线格式以外的格式编码的视频。您可以使用一些工具,如pc上的视频信息,并检查文件是否为基线格式