媒体播放器在 onPrepare 失败
Media Player failing in onPrepare
我已经查找了所有关于错误Prepare failed.: status=0x1
的相关问题。我使用的代码是这样的:
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(ChatActivity.this, Uri.parse(url));
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setVolume(1, 1);
mediaPlayer.prepare();
mediaPlayer.start();
URL 是 Firebase 中音频的实际 link。有趣的是,我在一个全新的 Android Proyect 中编写了完全相同的代码,只有一个触发此代码的按钮并且它工作得很好,但在以前的应用程序中却没有。我在两个项目中都拥有清单中的互联网许可。你们知道这是怎么回事吗?
这是无法使用媒体播放器的项目日志:
09-08 23:36:17.535 3265-3369/techluthiers.meetstream E/MediaHTTPConnectionEx: MediaHTTPConnectionEx contructor
09-08 23:36:17.536 3265-3281/techluthiers.meetstream E/MediaHTTPConnectionEx: connect
09-08 23:36:17.537 3265-3281/techluthiers.meetstream E/MediaHTTPConnectionEx: disconnecting
09-08 23:36:17.537 3265-3281/techluthiers.meetstream E/MediaHTTPConnectionEx: disconnected
09-08 23:36:17.545 3265-3514/techluthiers.meetstream E/MediaHTTPConnectionEx: getMIMEType
09-08 23:36:17.545 3265-3514/techluthiers.meetstream E/MediaHTTPConnectionEx: [seekToEx] offset:0/mCurrentOffset:-1
09-08 23:36:17.547 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: proxy null port 0
09-08 23:36:17.548 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [seekToEx] HTTP header =>User-Agent: Player/LG Player 1.0 for Android 5.0.1 (stagefright alternative)
09-08 23:36:17.548 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [seekToEx] include Range: bytes= 0-
09-08 23:36:17.548 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [seekToEx] HTTP header =>Range: bytes=0-
09-08 23:36:17.802 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response code] STATUS CODE:200
09-08 23:36:17.802 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] null: [HTTP/1.1 200 OK]
09-08 23:36:17.802 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] Accept-Ranges: [bytes]
09-08 23:36:17.802 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] Alt-Svc: [quic=":443"; ma=2592000; v="36,35,34,33,32"]
09-08 23:36:17.802 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] Cache-Control: [private, max-age=0]
09-08 23:36:17.802 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] Content-Length: [0]
09-08 23:36:17.802 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] Content-Type: [audio/mp3]
09-08 23:36:17.802 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] Date: [Fri, 09 Sep 2016 05:36:18 GMT]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] ETag: ["df9b0a0ba77691dd6a24b39bd0ca9a30"]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] Expires: [Fri, 09 Sep 2016 05:36:18 GMT]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] Last-Modified: [Thu, 08 Sep 2016 21:18:04 GMT]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] Server: [UploadServer]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] X-Android-Received-Millis: [1473399377793]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] X-Android-Response-Source: [CONDITIONAL_CACHE 304]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] X-Android-Sent-Millis: [1473399377554]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] x-goog-generation: [1473369484922000]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] x-goog-hash: [crc32c=MkV9EA==, md5=35sKC6d2kd1qJLOb0MqaMA==]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] x-goog-meta-firebaseStorageDownloadTokens: [68848b58-1dac-4796-9377-0c40bf8a4018]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] x-goog-metageneration: [1]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] x-goog-storage-class: [STANDARD]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] x-goog-stored-content-encoding: [identity]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] x-goog-stored-content-length: [62815]
09-08 23:36:17.804 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] X-GUploader-UploadID: [AEnB2Urmyp8htgAAuaqc63aoFuQgTDFzSmKow6zvFADzpJxdpQ0F44sFzsHwV-nkjBvA44a9psp4zqw4IpiKrIhRD_9nf-NfIQ]
09-08 23:36:17.804 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [ResponseMessage]:OK
09-08 23:36:17.804 3265-3514/techluthiers.meetstream I/MediaHTTPConnectionEx: [200 OK] mTotalSize: 0
09-08 23:36:17.866 3265-3281/techluthiers.meetstream E/MediaHTTPConnectionEx: getUri
正如您在最后三行中看到的,我得到的文件总大小值为 0,而另一个项目有这一行:
09-08 23:32:54.159 1862-1879/com.example.master.mypplication I/MediaHTTPConnectionEx: [200 OK] mTotalSize: 62815
我注意到,如果我在用户使用 Firebase 登录之前将媒体播放器放在一开始它就可以工作,那么当我在按钮的 onClick 中放置相同的逻辑时,在用户登录后在媒体播放器中有效,但只有一次。难道是 Firebase 会在第一次后阻止 MediaHTTPConnectionEx 吗?这是一个非常奇怪的行为
您应该考虑异步准备 MediaPlayer 以避免界面滞后。这个流程对我有用,
MediaPlayer mMediaPlayer = new MediaPlayer();
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try{
mMediaPlayer.setDataSource(audioUrl);
mMediaPlayer.prepareAsync();
}
catch(Exception e){}
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
//Play the audio
}
});
试试 ExoPlayer:https://google.github.io/ExoPlayer/guide.html. It provides more flexibility in configuring the HTTP connection (see http://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer/upstream/UriDataSource.html) 这可能会有用。
我已经查找了所有关于错误Prepare failed.: status=0x1
的相关问题。我使用的代码是这样的:
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(ChatActivity.this, Uri.parse(url));
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setVolume(1, 1);
mediaPlayer.prepare();
mediaPlayer.start();
URL 是 Firebase 中音频的实际 link。有趣的是,我在一个全新的 Android Proyect 中编写了完全相同的代码,只有一个触发此代码的按钮并且它工作得很好,但在以前的应用程序中却没有。我在两个项目中都拥有清单中的互联网许可。你们知道这是怎么回事吗? 这是无法使用媒体播放器的项目日志:
09-08 23:36:17.535 3265-3369/techluthiers.meetstream E/MediaHTTPConnectionEx: MediaHTTPConnectionEx contructor
09-08 23:36:17.536 3265-3281/techluthiers.meetstream E/MediaHTTPConnectionEx: connect
09-08 23:36:17.537 3265-3281/techluthiers.meetstream E/MediaHTTPConnectionEx: disconnecting
09-08 23:36:17.537 3265-3281/techluthiers.meetstream E/MediaHTTPConnectionEx: disconnected
09-08 23:36:17.545 3265-3514/techluthiers.meetstream E/MediaHTTPConnectionEx: getMIMEType
09-08 23:36:17.545 3265-3514/techluthiers.meetstream E/MediaHTTPConnectionEx: [seekToEx] offset:0/mCurrentOffset:-1
09-08 23:36:17.547 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: proxy null port 0
09-08 23:36:17.548 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [seekToEx] HTTP header =>User-Agent: Player/LG Player 1.0 for Android 5.0.1 (stagefright alternative)
09-08 23:36:17.548 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [seekToEx] include Range: bytes= 0-
09-08 23:36:17.548 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [seekToEx] HTTP header =>Range: bytes=0-
09-08 23:36:17.802 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response code] STATUS CODE:200
09-08 23:36:17.802 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] null: [HTTP/1.1 200 OK]
09-08 23:36:17.802 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] Accept-Ranges: [bytes]
09-08 23:36:17.802 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] Alt-Svc: [quic=":443"; ma=2592000; v="36,35,34,33,32"]
09-08 23:36:17.802 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] Cache-Control: [private, max-age=0]
09-08 23:36:17.802 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] Content-Length: [0]
09-08 23:36:17.802 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] Content-Type: [audio/mp3]
09-08 23:36:17.802 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] Date: [Fri, 09 Sep 2016 05:36:18 GMT]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] ETag: ["df9b0a0ba77691dd6a24b39bd0ca9a30"]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] Expires: [Fri, 09 Sep 2016 05:36:18 GMT]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] Last-Modified: [Thu, 08 Sep 2016 21:18:04 GMT]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] Server: [UploadServer]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] X-Android-Received-Millis: [1473399377793]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] X-Android-Response-Source: [CONDITIONAL_CACHE 304]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] X-Android-Sent-Millis: [1473399377554]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] x-goog-generation: [1473369484922000]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] x-goog-hash: [crc32c=MkV9EA==, md5=35sKC6d2kd1qJLOb0MqaMA==]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] x-goog-meta-firebaseStorageDownloadTokens: [68848b58-1dac-4796-9377-0c40bf8a4018]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] x-goog-metageneration: [1]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] x-goog-storage-class: [STANDARD]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] x-goog-stored-content-encoding: [identity]
09-08 23:36:17.803 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] x-goog-stored-content-length: [62815]
09-08 23:36:17.804 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [response header] X-GUploader-UploadID: [AEnB2Urmyp8htgAAuaqc63aoFuQgTDFzSmKow6zvFADzpJxdpQ0F44sFzsHwV-nkjBvA44a9psp4zqw4IpiKrIhRD_9nf-NfIQ]
09-08 23:36:17.804 3265-3514/techluthiers.meetstream D/MediaHTTPConnectionEx: [ResponseMessage]:OK
09-08 23:36:17.804 3265-3514/techluthiers.meetstream I/MediaHTTPConnectionEx: [200 OK] mTotalSize: 0
09-08 23:36:17.866 3265-3281/techluthiers.meetstream E/MediaHTTPConnectionEx: getUri
正如您在最后三行中看到的,我得到的文件总大小值为 0,而另一个项目有这一行:
09-08 23:32:54.159 1862-1879/com.example.master.mypplication I/MediaHTTPConnectionEx: [200 OK] mTotalSize: 62815
我注意到,如果我在用户使用 Firebase 登录之前将媒体播放器放在一开始它就可以工作,那么当我在按钮的 onClick 中放置相同的逻辑时,在用户登录后在媒体播放器中有效,但只有一次。难道是 Firebase 会在第一次后阻止 MediaHTTPConnectionEx 吗?这是一个非常奇怪的行为
您应该考虑异步准备 MediaPlayer 以避免界面滞后。这个流程对我有用,
MediaPlayer mMediaPlayer = new MediaPlayer();
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try{
mMediaPlayer.setDataSource(audioUrl);
mMediaPlayer.prepareAsync();
}
catch(Exception e){}
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
//Play the audio
}
});
试试 ExoPlayer:https://google.github.io/ExoPlayer/guide.html. It provides more flexibility in configuring the HTTP connection (see http://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer/upstream/UriDataSource.html) 这可能会有用。