我正在尝试播放此文件:
https://r2---sn-o097zne7.googlevideo.com/videoplayback?id=f7f0d0f6c9fc16f0&itag=141&source=youtube&requiressl=yes&nh=IgpwcjAxLnNqYzA3KgkxMjcuMC4wLjE&pl=21&mv=u&ms=au&mm=31&mn=sn-o097zne7&ratebypass=yes&mime=audio/mp4&gir=yes&clen=6859545&lmt=1393625541659713&dur=215.132&fexp=9408087,9408208,9408710,9413278,9416126,9416984,9417683,9418044,9418204,9419444,9419966,9420452,9422150,9422565,9422596,9422618,9422676,9423420,9423510,9423662,9423991,9424257,9424298,9424508&upn=fMq3m7OnpOU&sver=3&signature=4DD9C70769C99B2B769A9A4DEB2D2F750128D10A.7556708E037F26F71D430C20C897957676CBACB9&mt=1447923721&key=dg_yt0&ip=198.57.171.34&ipbits=0&expire=1447945674&sparams=ip,ipbits,expire,id,itag,source,requiressl,nh,pl,mv,ms,mm,mn,ratebypass,mime,gir,clen,lmt,dur
在使用Android 4.2.2的设备上但播放无法启动。在日志中,我收到以下消息;
11-19 12:07:13.695 23678-23678/com.radioafrica.music V/MediaPlayer-JNI: reset
11-19 12:07:13.695 23678-23678/com.radioafrica.music V/MediaPlayer: reset
11-19 12:07:13.703 23678-23678/com.radioafrica.music V/MediaPlayer-JNI: setAudioStreamType: 3
11-19 12:07:13.703 23678-23678/com.radioafrica.music V/MediaPlayer: MediaPlayer::setAudioStreamType
11-19 12:07:13.718 23678-23678/com.radioafrica.music V/MediaPlayer: setVideoSurfaceTexture
11-19 12:07:13.718 23678-23678/com.radioafrica.music V/MediaPlayer: prepareAsync
11-19 12:07:26.203 23678-23689/com.radioafrica.music V/MediaPlayer: message received msg=3, ext1=3, ext2=0
11-19 12:07:26.203 23678-23689/com.radioafrica.music V/MediaPlayer: buffering 3
11-19 12:07:26.203 23678-23689/com.radioafrica.music V/MediaPlayer: callback application
11-19 12:07:26.203 23678-23689/com.radioafrica.music V/MediaPlayer: back from callback
11-19 12:07:26.203 23678-23689/com.radioafrica.music V/MediaPlayer: message received msg=200, ext1=973, ext2=0
11-19 12:07:26.203 23678-23689/com.radioafrica.music W/MediaPlayer: info/warning (973, 0)
11-19 12:07:26.203 23678-23689/com.radioafrica.music V/MediaPlayer: callback application
11-19 12:07:26.203 23678-23689/com.radioafrica.music V/MediaPlayer: back from callback
11-19 12:07:26.203 23678-23689/com.radioafrica.music V/MediaPlayer: message received msg=5, ext1=0, ext2=0
11-19 12:07:26.203 23678-23689/com.radioafrica.music V/MediaPlayer: New video size 0 x 0
11-19 12:07:26.203 23678-23689/com.radioafrica.music V/MediaPlayer: callback application
11-19 12:07:26.203 23678-23689/com.radioafrica.music V/MediaPlayer: back from callback
11-19 12:07:26.203 23678-23689/com.radioafrica.music V/MediaPlayer: message received msg=1, ext1=0, ext2=0
11-19 12:07:26.203 23678-23689/com.radioafrica.music V/MediaPlayer: prepared
11-19 12:07:26.203 23678-23689/com.radioafrica.music V/MediaPlayer: callback application
11-19 12:07:26.203 23678-23689/com.radioafrica.music V/MediaPlayer: back from callback
11-19 12:07:26.203 23678-23678/com.radioafrica.music I/MediaPlayer: Info (973,0)
11-19 12:07:26.203 23678-23678/com.radioafrica.music I/MediaPlayer: Don't send intent. msg.arg1 = 0, msg.arg2 = 0
11-19 12:07:26.203 23678-23678/com.radioafrica.music V/MediaPlayer-JNI: setVolume: left 1.000000 right 1.000000
11-19 12:07:26.203 23678-23678/com.radioafrica.music V/MediaPlayer: MediaPlayer::setVolume(1.000000, 1.000000)
11-19 12:07:26.210 23678-23678/com.radioafrica.music V/MediaPlayer: isPlaying: 0
11-19 12:07:26.210 23678-23678/com.radioafrica.music V/MediaPlayer-JNI: isPlaying: 0
11-19 12:07:26.210 23678-23678/com.radioafrica.music V/MediaPlayer-JNI: start
11-19 12:07:26.210 23678-23678/com.radioafrica.music V/MediaPlayer: start
11-19 12:07:26.414 23678-23690/com.radioafrica.music V/MediaPlayer: message received msg=2, ext1=0, ext2=0
11-19 12:07:26.414 23678-23690/com.radioafrica.music V/MediaPlayer: playback complete
11-19 12:07:26.414 23678-23690/com.radioafrica.music V/MediaPlayer: callback application
11-19 12:07:26.414 23678-23690/com.radioafrica.music V/MediaPlayer: back from callback
11-19 12:07:27.203 23678-23689/com.radioafrica.music V/MediaPlayer: message received msg=3, ext1=3, ext2=0
11-19 12:07:27.203 23678-23689/com.radioafrica.music V/MediaPlayer: buffering 3
11-19 12:07:27.203 23678-23689/com.radioafrica.music V/MediaPlayer: callback application
11-19 12:07:27.203 23678-23689/com.radioafrica.music V/MediaPlayer: back from callback
似乎文件确实缓冲但没有开始播放,而是播放器调用播放完成并跳到下一首歌曲。
但是,该文件在Android 5及更高版本上播放没有任何问题。可能有什么问题?
播放器代码:
try {
//manualUrl is the link mentioned above
if (manualUrl != null) {
createMediaPlayerIfNeeded();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setDataSource(manualUrl);
mIsStreaming = manualUrl.startsWith("http:") || manualUrl.startsWith("https:");
mSongTitle = track.getTitle();
mSongArtist = track.getArtist();
//mState = State.Preparing;
PrefUtils.putString(PrefUtils.STATE, PREPARING);
MediaButtonHelper.registerMediaButtonEventReceiverCompat(
mAudioManager, mMediaButtonReceiverComponent);
if (mRemoteControlClientCompat == null) {
Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
intent.setComponent(mMediaButtonReceiverComponent);
mRemoteControlClientCompat = new RemoteControlClientCompat(
PendingIntent.getBroadcast(MusicService.this, 0, intent, 0));
RemoteControlHelper.registerRemoteControlClient(mAudioManager,
mRemoteControlClientCompat);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
mRemoteControlClientCompat.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING);
mRemoteControlClientCompat.setTransportControlFlags(
RemoteControlClient.FLAG_KEY_MEDIA_PLAY |
RemoteControlClient.FLAG_KEY_MEDIA_PAUSE |
RemoteControlClient.FLAG_KEY_MEDIA_NEXT |
RemoteControlClient.FLAG_KEY_MEDIA_STOP);
}
mRemoteControlClientCompat.editMetadata(true)
.putString(MediaMetadataRetriever.METADATA_KEY_ARTIST, track.getArtist())
.putString(MediaMetadataRetriever.METADATA_KEY_ALBUM, "")
.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, track.getTitle())
.apply();
mPlayer.prepareAsync();
if (mIsStreaming)
mWifiLock.acquire();
else if (mWifiLock.isHeld())
mWifiLock.release();
sendBroadcast(mSongTitle, "Loading...", true);
if (duration != 0) {
Music.setCurrentTrackDuration(duration);
}
} else {
playSong(Music.getCurrentPlaylist(), true);
Toast.makeText(MusicService.this, "Track unavailable, playing next tune.", Toast.LENGTH_SHORT).show();
}
} catch (IllegalArgumentException | SecurityException | IOException | IllegalStateException | NullPointerException e) {
playSong(Music.getCurrentPlaylist(), true);
Toast.makeText(MusicService.this, "Track unavailable, playing next tune.", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}