【问题标题】:How to catch "Sorry, This video cannot be played" error on VideoView如何在 VideoView 上捕获“抱歉,此视频无法播放”错误
【发布时间】:2011-07-19 03:29:43
【问题描述】:

我有一个 VideoView,我正在从远程服务器流式传输视频。大多数时候它会非常流畅地播放视频。但有时,它会显示一条错误消息“抱歉,此视频无法播放”。我有预感,这更多的是支持的视频格式。但是,我不知道哪些是支持的格式。我的问题是“我怎样才能捕捉到这个错误(例如防止出现错误消息)”?我在这个项目上使用 Android 2.2。任何建议将不胜感激。 :)

【问题讨论】:

  • 嗯是的。但我不知道我会使用哪个“catch”。是否有类似 VideoView.isPlayable 的代码或类似的代码?感谢您的回复:)
  • try-catch 不适用于这种情况,因为这是一个异步过程。您应该尝试设置一个 onErrorListener。 (来自 onErrorListener 的文档:“异步操作期间发生错误时要调用的回调的接口定义(其他错误将在方法调用时抛出异常)。”)

标签: android android-videoview


【解决方案1】:

尝试使用setOnErrorListener:文档说如果没有指定监听器,或者监听器返回 false,VideoView 将通知用户任何错误。,所以我假设你设置1 并返回 true 它不会显示用户错误。

【讨论】:

  • 感谢您提供此信息。我会先这样做,如果它有效,我会通知你。谢谢:)
  • 在我的情况下,对话框仍然会弹出。有什么想法吗?
  • @user1810737 我想你在此期间已经想通了,但我想你必须在 OnError 中返回 true 来告诉 Android 你已经自己处理了错误。
  • @user1810737 你可以查看我的答案。我已经使用 sn-p 的代码解决了它
【解决方案2】:

我用于此的代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    vView = (VideoView) findViewById(R.id.videoView1);

    vSource = "android.resource://com.domain.android/"
            + R.raw.introductionportrait;
    vView.setVideoURI(Uri.parse(vSource));

    vView.setOnErrorListener(mOnErrorListener);
    vView.requestFocus();
    vView.start();
}

private OnErrorListener mOnErrorListener = new OnErrorListener() {

    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
        // Your code goes here
        return true;
    }
};

【讨论】:

    【解决方案3】:

    您可以添加如下代码,如果发生任何错误,它将关闭视频查看屏幕。 此外,它不会显示说视频无法播放的默认弹出窗口:)

     videoview.setOnErrorListener(new MediaPlayer.OnErrorListener() {
                @Override
                public boolean onError(MediaPlayer mediaPlayer, int i, int i1) {
                    finish();
                    return true;
                }
            });
    

    【讨论】:

      【解决方案4】:

      我更喜欢在 onCreate 方法中设置这样的监听器。希望能帮助别人

      videoView.setOnErrorListener(new OnErrorListener () {
          @Override
          public boolean onError(MediaPlayer mp, int what, int extra) {
              Log.e(TAG, "Error playing video");
              return true;
          }
      });
      

      【讨论】:

        猜你喜欢
        • 2011-09-18
        • 1970-01-01
        • 2013-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-11
        相关资源
        最近更新 更多