【问题标题】:Android - MediaPlayer, how to catch broken url when streamingAndroid - MediaPlayer,如何在流式传输时捕获损坏的 url
【发布时间】:2014-01-06 03:52:49
【问题描述】:

我有一个小应用程序,它从网络上的不同 url 流式传输,我想处理无效/损坏的 url,我尝试了提供的各种捕获但即使流式传输损坏的文件,我也可以在日志中看到我的日志,我只看到了

 Error (1,-1004) 

这是我目前的代码

 mediaPlayer.reset();
        try {
            mediaPlayer.setDataSource(urlString);
            Log.w("myApp", "0");
            mediaPlayer.prepareAsync(); // might take long! (for buffering, etc)
            playPauseButton.setVisibility(View.INVISIBLE);
             progressBar1.setVisibility(View.VISIBLE);
            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mediaPlayer) {
                    // TODO Auto-generated method stub

                    duration = mediaPlayer.getDuration();
                    textDuration.setText(getDurationString(duration/1000));
                    progress.setMax(duration);
                    playPauseButton.setChecked(true); 
                    mediaPlayer.start();
                    playPauseButton.setVisibility(View.VISIBLE);
                     progressBar1.setVisibility(View.INVISIBLE);
                }
            });

        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            Log.w("myApp", "1");
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            Log.w("myApp", "2");
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            Log.w("myApp", "3");
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            Log.w("myApp", "4");
            e.printStackTrace();
        }

感谢您的帮助。)

【问题讨论】:

  • 什么你不尝试捕获一个通用异常?然后找出它是什么类型的?从发布的信息来看,我无法判断异常是在哪里引发的——如果有的话。
  • 我是android编码的新手,你能解释一下如何捕捉通用异常吗?
  • catch (Exception e) { Log.w("myApp", "5"); e.printStackTrace(); }
  • 您也尝试逐行调试以找出失败的地方。

标签: java android eclipse try-catch android-mediaplayer


【解决方案1】:

MediaPlayer.OnErrorListener 可能会有所帮助。这不是一个例外。所以你不能抓住它。

onError(MediaPlayer mp, int what, int extra);

官方文档。 MEDIA_ERROR_IO 是额外的代码。

public static final int MEDIA_ERROR_IO

Added in API level 17
File or network related operation errors.

Constant Value: -1004 (0xfffffc14)

【讨论】:

  • 可能是正确的答案,但只是给出一个链接,如果链接变得陈旧,没有人会知道答案的危险。请展开
【解决方案2】:

这可能会有所帮助。如果您使用的是 Android Studio,请在调试时查看运行日志,它将显示引发的错误。

例如 D/MediaPlayerNative:消息:MEDIA_ERROR(100),ext1=Unknown MediaErrorType(-38),ext2=0x0

这是我最接近的查看流是否在线的方法。 如果您知道更好,请回复。

mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {

            @Override
            public boolean onError(MediaPlayer mp, int what, int extra) {
                switch (what) {
                    case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:
                        Toast.makeText(MainActivity.this, "Media Error", Toast.LENGTH_SHORT).show();
                        break;
                    case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
                        Toast.makeText(MainActivity.this, "Radio Server Died", Toast.LENGTH_SHORT).show();
                        break;
                    case MediaPlayer.MEDIA_ERROR_UNKNOWN:
                        Toast.makeText(MainActivity.this, "Stream is possibly offline", Toast.LENGTH_LONG).show();
                        button_stop.performClick();
                        break;
                    case MediaPlayer.MEDIA_ERROR_IO:
                        Toast.makeText(MainActivity.this, "IO Error", Toast.LENGTH_SHORT).show();
                        break;
                }
                return false;
            }
        });

【讨论】:

    猜你喜欢
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 2010-12-30
    • 2018-09-17
    • 2012-07-27
    • 1970-01-01
    • 2015-07-19
    相关资源
    最近更新 更多