1

每当 videoview 正在播放视频并且网络连接断开并且视频冻结时,即使我设置了 videoview 错误侦听器,我的代码也不会引发错误。

public class MainActivity extends Activity {

static MediaController mc;
static VideoView vw;


/** Called when the activity is first created. */
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);

    mc = new MediaController(this);

    vw = (VideoView) findViewById(R.id.videoView);

    vw.setVideoPath("http://173.45.164.105:1935/live/myStream/playlist.m3u8");

    vw.setOnErrorListener(new MediaPlayer.OnErrorListener() {
        @Override
        public boolean onError(MediaPlayer arg0, int arg1, int arg2) {
            vw.stopPlayback();
            vw.start();
            Log.i("VIDEO ERROR ", "FROZE");
            return true;
        }
    });
    vw.requestFocus();
    vw.start();
}

}

4

1 回答 1

0

据我了解,本机 VideoView 元素仅在打开视频时调用 onError() 方法。

参见:视频查看源

在 openVideo() 方法中——在设置 VideoView 路径/URI 时调用——通过抛出 MediaPlayer.MEDIA_ERROR_UNKNOWN 错误来处理几个异常。

每当与视频源失去连接时,我并不肯定 MediaPlayer 在后台会发生什么,但它似乎只是无限期地等待重新建立连接。它永远不会通过 onErrorListener 抛出错误。

但是,如果您再次调用 setVideoPath() 或 setVideoUri() 方法,它将调用 onError() 方法 b/c 将在 openVideo() 中引发异常。

您必须找出某种方法来检测连接丢失,或者等待查看视频时间是否正在更新并手动抛出错误。

如果有人找到解决此问题的更好方法,请告诉我。

于 2016-06-14T16:54:53.830 回答