【问题标题】:Android >=5.0 MediaPlayer prepare failsAndroid >=5.0 MediaPlayer 准备失败
【发布时间】:2015-03-23 15:35:24
【问题描述】:

我在设备 Android SDK >= 21 上播放流媒体(mp4/mp3 中的视频和音频)时遇到 MediaPlayer 问题。正如预期的那样,旧设备一切正常。 我搜索了一些主题,发现可能是 NuPlayer 的情况,它是 AwesomePlayer 的实验性替代品,但这并不能解决我的问题,即使将其改回 AP 也是如此。

我被困住了,所以我很感激任何帮助。

我的代码:


new AsyncTask() {

                @Override
                protected Void doInBackground(String... paths) {
                    if (mPlayer == null) {
                        mPlayer = new MediaPlayer();
                    } else {
                        mPlayer.reset();
                    }

                    if (mPlayer != null && mPlayer.isPlaying()) {
                        mPlayer.start();
                    }
                    String source = paths[0];


                    try {

                        mPlayer.setDataSource(source);
                        mPlayer.prepare();

                        mPlayer.start();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    return null;
                }
            }

我的堆栈跟踪如下:


03-23 16:19:19.582: D/MediaPlayer(8241): Couldn\'t open file on client side, trying server side
03-23 16:19:53.902: E/MediaPlayer(8241): error (1, -2147483648)
03-23 16:19:53.905: D/MediaPlayer(8241): create failed:
03-23 16:19:53.905: D/MediaPlayer(8241): java.io.IOException: Prepare failed.: status=0x1
03-23 16:19:53.905: D/MediaPlayer(8241):    at android.media.MediaPlayer._prepare(Native Method)
03-23 16:19:53.905: D/MediaPlayer(8241):    at android.media.MediaPlayer.prepare(MediaPlayer.java:1125)
03-23 16:19:53.905: D/MediaPlayer(8241):    at android.media.MediaPlayer.create(MediaPlayer.java:866)
03-23 16:19:53.905: D/MediaPlayer(8241):    at android.media.MediaPlayer.create(MediaPlayer.java:839)
03-23 16:19:53.905: D/MediaPlayer(8241):    at android.media.MediaPlayer.create(MediaPlayer.java:818)
03-23 16:19:53.905: D/MediaPlayer(8241):    at myapp.FrameVideo$6.doInBackground(FrameVideo.java:609)
03-23 16:19:53.905: D/MediaPlayer(8241):    at myapp.FrameVideo$6.doInBackground(FrameVideo.java:1)
03-23 16:19:53.905: D/MediaPlayer(8241):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
03-23 16:19:53.905: D/MediaPlayer(8241):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
03-23 16:19:53.905: D/MediaPlayer(8241):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
03-23 16:19:53.905: D/MediaPlayer(8241):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
03-23 16:19:53.905: D/MediaPlayer(8241):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
03-23 16:19:53.905: D/MediaPlayer(8241):    at java.lang.Thread.run(Thread.java:818)

【问题讨论】:

    标签: android video-streaming android-mediaplayer


    【解决方案1】:

    这是我的代码,它的工作原理请试试这个

    AssetFileDescriptor afd;
                // new music player object for new page
                mediaPlayerSound = new MediaPlayer();
    
            try {
                afd = getAssets().openFd("Audio/" + soundSource);
                mediaPlayerSound.setDataSource(afd.getFileDescriptor(),
                        afd.getStartOffset(), afd.getLength());
    
                mediaPlayerSound.prepare();
                mediaPlayerSound.start();
    
                mediaPlayerSound
                        .setOnCompletionListener(new OnCompletionListener() {
    
                            @Override
                            public void onCompletion(MediaPlayer mp) {
                                // TODO Auto-generated method stub
                            }
                        });
    
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多