2015-01-21 110 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,这与您当时观察到的略有不同。但这正是所有持续时间声明的总和。