簡體   English   中英

Android MediaPlayer seekTo()/ getDuration()無法正常工作

[英]Android MediaPlayer seekTo() / getDuration() not working as expected

我正在使用android MediaPlayer庫播放一些MP3文件。 我不負責這些文件,也無法更改它們,只能播放它們。

我目前正在更新進度條,以了解用戶當前通過文件的距離,將進度條的最大值設置為mediaPlayer.getDuration() 我知道由此返回的值是正確的。 我每500毫秒延遲一次Runnable,以使用mediaPlayer.getCurrentPosition的值更新進度條。 所有這些都能按預期正常工作。

當我嘗試使用seekTo方法時會出現問題(但是偶爾會按我的預期工作)。 我創建的媒體播放器對象已向其注冊了OnSeekCompleteListener。 當我調用mediaPlayer.seekTo(50000) ,使用mediaPLayer.getCurrentPosition()在OnSeekCompleteListener中輸出的值是我告訴它尋求的正確值(在這種情況下,假設我們從1000ms開始進入文件,則為51000) 。 但是,當postDelayed可運行對象運行以更新進度條時, mediaPlayer.getCurrentPosition()返回的值通常(95%的時間)大大低於OnSeekCompleteListener中輸出的值。

最終返回的值似乎沒有任何押韻或原因,因為即使在完全相同的情況下,它們每次都不同。

編輯:在說值總是不同之后,事實證明那不是很正確。 如果我嘗試搜索音頻的結尾,它將始終跳回到同一點(如果相信getCurrentPosition()方法,則大約要提前2-3小時)。

更復雜的是,如果我獲取原始文件並使用Audacity和LAME(使用默認設置)對其進行重新編碼,則此問題將消失。 我只能作為測試來執行此操作,因為當我的應用上線時,我將無法控制文件的編碼。

如果有人對此有任何想法,將不勝感激。

供參考:這是從Mac上的afinfo命令獲得的原始文件的值:

File:           Test.mp3
File type ID:   MPG3
Num Tracks:     1
----
Data format:     2 ch,  44100 Hz, '.mp3' (0x00000000) 0 bits/channel, 0 bytes/packet, 1152 frames/packet, 0 bytes/frame
                no channel layout.
estimated duration:               35997.544490 sec
audio bytes:                      216835607
audio packets:                    1378031
bit rate:                         48000 bits per second
packet size upper bound:          1052
maximum packet size:              522
audio data file offset:           1630
optimized

我重新編碼的音頻文件中的信息可以正常工作:

File:           Test2.mp3
File type ID:   MPG3
Num Tracks:     1
----
Data format:     2 ch,  44100 Hz, '.mp3' (0x00000000) 0 bits/channel, 0 bytes/packet, 1152 frames/packet, 0 bytes/frame
                no channel layout.
estimated duration:                     35997.596735 sec
audio bytes:                            293659748
audio packets:                          1378033
bit rate:                               65000 bits per second
packet size upper bound:                1052
maximum packet size:                    835
audio data file offset:                 1560
optimized
audio 1587491712 valid frames + 576 priming + 1728 remainder = 1587494016

編輯:這正在索尼Xperia的Android 6.0上進行測試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM