2015-01-21 78 views

回答

0

VideoView的getDuration()方法根據每個.ts文件的.m3u8清單中聲明的持續時間計算持續時間。

因此,如果聲明不準確,getDuration()和實際持續時間之間會有差異,因爲您使用getCurrentPosition()來觀察它。您的.m3u8示例文件實際上是一個「播放列表清單」,它引用了3個不同的.m3u8流清單(根據帶寬選擇),因此,如果我們查看它指向的某個流清單,它將看起來像此:

#EXTM3U 
#EXT-X-VERSION:3 
#EXT-X-MEDIA-SEQUENCE:0 
#EXT-X-ALLOW-CACHE:YES 
#EXT-X-TARGETDURATION:11 
#EXTINF:10.880000, 
1000k_1421668953.mp400000.ts 
#EXTINF:10.800000, 
1000k_1421668953.mp400001.ts 
#EXTINF:10.800000, 
1000k_1421668953.mp400002.ts 
#EXTINF:10.800000, 
1000k_1421668953.mp400003.ts 
#EXTINF:7.200000, 
1000k_1421668953.mp400004.ts 
#EXTINF:10.800000, 
1000k_1421668953.mp400005.ts 
... 

在「#EXTINF:10.880000」上述每.TS鏈路是用於通過getDuration的.TS持續時間聲明()來總結影片總長度。

順便說一句,當我用這個視頻運行我的代碼時,我使用getDuration()得到的持續時間實際上是199330,這與您當時觀察到的略有不同。但這正是所有持續時間聲明的總和。