我使用videoview来显示下面的视频https://ellovidsout.s3.amazonaws.com/877/9/1421668953.mp4.m3u8
在视频的最后我检查getCurrentPosition()
vs getDuration()
。
当前位置是219418.0。而getDuration
返回205000.0。
所以持续时间比实际长度少14秒。我的其他视频也会发生这种情况。VideoView.getDuration返回错误的值;
0
A
回答
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,这与您当时观察到的略有不同。但这正是所有持续时间声明的总和。
相关问题
- 1. 返回错误值
- 2. 错误返回值
- 3. objc_getAssociatedObject返回错误的值
- 4. DateTime.ParseExact返回错误的值
- 5. Calendar.before()返回错误的值
- 6. characterAtIndex返回错误的值
- 7. MySQL返回错误的值
- 8. in_array()返回错误的值?
- 9. glReadPixels返回错误的值
- 10. enum.ToString返回错误的值?
- 11. OBJECT_ID的错误返回值?
- 12. getLeft()返回错误的值
- 13. ExecuteScalar返回错误的值
- 14. 返回值与返回错误代码?
- 15. ArrayList返回错误值
- 16. `CI`返回错误值
- 17. Timespan返回错误值
- 18. Bitmap.GetPixel()返回错误值
- 19. Android insertWithOnConflict返回错误值
- 20. Javascript ajax返回错误值
- 21. @Value返回错误值
- 22. $(window).height()返回错误值
- 23. UITabBarController.selectedIndex返回错误值
- 24. Hibernate PersistentMap返回错误值
- 25. 在NSURLSession错误返回值
- 26. PHP XOR返回错误值
- 27. readLong()返回错误值
- 28. 计数()返回错误值
- 29. base_url()返回错误值
- 30. CL_DEVICE_GLOBAL_MEM_SIZE返回错误值