Android: 如何获取Media Player的报错并使用?

Android: How get error of Media Player and use it?

我使用 SurfaceView 作为视频播放器

如果在流中未加载视频,在 logcat 中查看错误 info(701,0)

如何获得 info(701,0) 并使用它?

Sample :

if(error == 701){
   ....
}

是的,您可以对 VideoView 使用 setOnErrorListener(..) 并在那里处理错误。这是一个例子:

    mVideoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {
                @Override
                public boolean onError(MediaPlayer mp, int what, int extra) {

                    switch(what){

                        case MediaPlayer.MEDIA_ERROR_UNKNOWN:
                            // handle MEDIA_ERROR_UNKNOWN, optionally handle extras
                            handleExtras(extra);
                            break;

                        case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
                            // handle MEDIA_ERROR_SERVER_DIED, optionally handle extras
                            handleExtras(extra);
                            break;
                    }

                    return true;
                }
            });

...

    private void handleExtras(int extra){
            switch(extra){
                case MediaPlayer.MEDIA_ERROR_IO:
                    // handle MEDIA_ERROR_IO
                    break;
                case MediaPlayer.MEDIA_ERROR_MALFORMED:
                    // handle MEDIA_ERROR_MALFORMED
                    break;
                case MediaPlayer.MEDIA_ERROR_UNSUPPORTED:
                    // handle MEDIA_ERROR_UNSPECIFIED
                    break;
                case MediaPlayer.MEDIA_ERROR_TIMED_OUT:
                    // handle MEDIA_ERROR_TIMED_OUT
                    break;

            }
        }

编辑:701 是信息而不是错误,因此要处理信息,您需要附加信息侦听器 setInfoListener()

https://developer.android.com/reference/android/widget/VideoView.html#setOnInfoListener(android.media.MediaPlayer.OnInfoListener)

并遵循与错误侦听器相同的模式。这是一个例子:

mVideoView.setOnInfoListener(new MediaPlayer.OnInfoListener() {
            @Override
            public boolean onInfo(MediaPlayer mp, int what, int extra) {

                switch(what){
                    case MediaPlayer.MEDIA_INFO_BUFFERING_START:
                        // handle info 701 here, MEDIA_INFO_BUFFERING_START corresponds to 701
                        break;
                }
                return true;
            }
        });

请注意,这需要至少 API 17。以及对您要查找的内容的引用:

https://developer.android.com/reference/android/media/MediaPlayer.html#MEDIA_INFO_BUFFERING_START

希望这有用。