2015-01-21 4 views
0

Я использую videoview для отображения следующего видео https://ellovidsout.s3.amazonaws.com/877/9/1421668953.mp4.m3u8
В конце видео я проверяю getCurrentPosition() против getDuration().
Текущее положение 219418.0. Пока getDuration возвращает 205000.0.
Таким образом, продолжительность составляет 14 секунд меньше реальной длины. Это также происходит с моим другим видео.VideoView.getDuration возвращает неправильное значение;

ответ

0

Метод getDuration() VideoView вычисляет продолжительность в соответствии с длительностью , которая объявлена ​​в манифесте .m3u8 для каждого файла .ts.

Таким образом, если декларация неточна, разница между 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 это объявление продолжительность .ts, который используется getDuration(), чтобы подвести общую продолжительность видео.

Кстати, когда я запускал свой код с этим видео, продолжительность, которую я получил с помощью getDuration(), была фактически 199330, что немного отличается от того, что вы наблюдали тогда. Но это как раз сумма всех деклараций продолжительности.

Смежные вопросы