VideoView.getDuration返回错误的值;

时间:2015-01-21 12:15:07

标签: android android-videoview

我使用videoview显示以下视频https://ellovidsout.s3.amazonaws.com/877/9/1421668953.mp4.m3u8
在视频结束时,我会检查getCurrentPosition() vs getDuration() 当前位置是219418.0。虽然getDuration返回205000.0 所以持续时间比实际长度少14秒。我的其他视频也会发生这种情况。

1 个答案:

答案 0 :(得分:0)

VideoView的getDuration()方法根据每个.ts文件在.m3u8清单中声明的持续时间计算持续时间。

因此,如果声明不准确,则在使用getCurrentPosition()观察时,getDuration()与实际持续时间之间会有所不同。

您的.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链接上面是.ts持续时间声明,getDuration()使用该声明来总计视频总持续时间。

顺便说一句,当我用这个视频运行我的代码时,使用getDuration()获得的持续时间实际上是199330,这与你当时观察到的略有不同。但这正是所有持续时间声明的总和。