我有一個遠程音頻文件的Url。我需要爲跟蹤詳細信息的適配器列表構建數據。這是部分代碼是否可以在不下載的情況下獲得遠程音頻文件的持續時間?
Log.d("audioURL", audio.getUrl());
MediaPlayer tmpMedia;
tmpMedia = MediaPlayer.create(getContext(), Uri.parse(audio.getUrl()));
holder.txtDuration.setDuration(tmpMedia.getDuration()/1000);
tmpMedia.release();
但它工作得太慢了。 LogCat寫這樣的事情:
15:05:51.783: D/audioURL(776): http://cs4859.vk.me/u14195999/audios/0cbd695ddf50.mp3
15:05:51.783: D/MediaPlayer(776): Couldn't open file on client side, trying server side
15:05:53.813: D/audioURL(776): http://cs4859.vk.me/u14195999/audios/0cbd695ddf50.mp3
15:05:53.823: D/MediaPlayer(776): Couldn't open file on client side, trying server side
15:05:55.373: D/audioURL(776): http://cs4859.vk.me/u14195999/audios/0cbd695ddf50.mp3
15:05:55.383: D/MediaPlayer(776): Couldn't open file on client side, trying server side
15:05:58.143: D/audioURL(776): http://cs1626.vk.me/u149968/audios/04298447cd3c.mp3
15:05:58.153: D/MediaPlayer(776): Couldn't open file on client side, trying server side
...等等。所以,我的約30首歌曲的播放列表初始化時間約爲7分鐘。
我想,MediaPlayer類方法getDuration()
順序下載這些軌道(或其中的一些部分)來獲得它們的持續時間。
有沒有辦法快速獲得這些持續時間,而無需下載曲目?
Halim Qarroum,這似乎是一個正確的方式,但我有一些麻煩MediaMetadataRetriever
類。
這裏是我上面的代碼:
if (android.os.Build.VERSION.SDK_INT < 10){
holder.txtDuration.setDuration(audio.getTrackDuration());
} else {
MediaMetadataRetriever mRetriever = new MediaMetadataRetriever();
Log.d("URI", Uri.parse(audio.getUrl()).toString());
mRetriever.setDataSource(getContext(), Uri.parse(audio.getUrl()));
String s = mRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
holder.txtDuration.setDuration(Long.parseLong(s));
mRetriever.release();
}
申請終止mRetriever.setDataSource(getContext(), Uri.parse(audio.getUrl()));
因爲IllegalArgumentException
。 audio.getURl()
字符串是http://cs4859.vk.me/u14195999/audios/134dfe90d1ec.mp3
。
爲什麼會發生異常?
聽起來不錯,但出現異常(見上面我的評論在我的崗位 – Carlos 2013-03-22 11:10:28
我編輯我的例子,嘗試用以上,它應該工作。 – 2013-03-22 11:27:50
第二行發生異常mRetriever.setDataSource(getContext(),Uri.parse(audio.getUrl())); 此行引發IllegalArgumentException。根據類的描述,setDataSource(Context上下文,Uri uri )方法拋出IllegalArgumentException如果Uri無效,但我的Uri似乎是有效的 - 例如http://cs4859.vk.me/u14195999/audios/134dfe90d1ec.mp3 – Carlos 2013-03-22 11:37:31