Почему это зашифрованное видео HLS не воспроизводится на iOS (но работает на Windows Chrome через библиотеку hls. js)? - PullRequest
0 голосов
/ 25 марта 2020

Исходное видео "Образец видео 5" из https://www.appsloveworld.com/download-sample-mp4-video-mp4-test-videos/.

Мой /home/vagrant/Code/example/public/hls_hls.keyInfo:

https://example.com/hls.key
/home/vagrant/Code/example/public/hls_hls.key
467216aae8a26fb699080812628031955e304a66e9e4480f9b70d31d8fe94e9a

Мой /home/vagrant/Code/example/public/hls_hls.key был создан используя PHP: hex2bin('467216aae8a26fb699080812628031955e304a66e9e4480f9b70d31d8fe94e9a')

Команда ffmpeg для шифрования видео в виде списка воспроизведения HLS с файлами "ts":

'/usr/bin/ffmpeg' '-y' '-i' 'storage/app/sample_media2/2020-02-27/Sample_Videos_5.mp4' 
'-c:v' 'libx264' '-s:v' '1920x1080' '-crf' '20' '-sc_threshold' '0' '-g' '48' 
'-keyint_min' '48' '-hls_list_size' '0' 
'-hls_time' '10' '-hls_allow_cache' '0' '-b:v' '4889k' '-maxrate' '5866k' 
'-hls_segment_type' 'mpegts' '-hls_fmp4_init_filename' 'output_init.mp4' 
'-hls_segment_filename' 'storage/app/public/test/output_1080p_%04d.ts' 
'-hls_key_info_file' '/home/vagrant/Code/example/public/hls_hls.keyInfo' 
'-strict' '-2' '-threads' '12' 'storage/app/public/test/output_1080p.m3u8'

Тогда я знаю из https://caniuse.com/#search = hls , что Windows Chrome не сможет воспроизводить видео HLS без библиотеки, поэтому я использую https://github.com/video-dev/hls.js/ и Windows Chrome успешно воспроизводит зашифрованное видео!

Однако iOS Safari не может воспроизвести его (с библиотекой hls. js или без нее).

На iOS Safari, когда я пытаюсь воспроизвести видео, я вижу только быстрый взгляд (менее секунды), где на экране отображается 0:15, поэтому он должен читать и расшифровывать Достаточно знать правильную продолжительность видео.

Итак, для отладки я регистрирую события:

const nativeHlsEvents = ['play', 'playing', 'abort', 'error', 'canplaythrough', 'waiting', 'loadeddata', 'loadstart', 'progress', 'timeupdate', 'volumechange'];
$.each(nativeHlsEvents, function (i, eventType) {
    video.addEventListener(eventType, (event) => {//https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement
        console.log(eventType, event);
        if (eventType === 'error') {
            console.error(video.error);//https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/error
        }
    });
});

Я вижу в журнале консоли:

loadstart, {"isTrusted":true}
progress, {"isTrusted":true}
play, {"isTrusted":true}
waiting, {"isTrusted":true}
error, {"isTrusted":true}
video.error, {}

Я не знаю, как найти более подробную информацию об ошибке. * 1 043 *

Обратите внимание, что хотя Windows Chrome успешно воспроизводит видео, оно также отображает предупреждения в журнале консоли:

{"type":"mediaError","details":"fragParsingError","fatal":false,"reason":"TS packet did not start with 0x47","frag":{"...
{"type":"mediaError","details":"fragParsingError","fatal":false,"reason":"no audio/video samples found","frag":{...

Где моя проблема?

1 Ответ

0 голосов
/ 30 марта 2020

Мне нужно будет купить более новую iPhone.

Я вижу на https://en.wikipedia.org/wiki/IPhone_6#Software и https://support.apple.com/guide/iphone/supported-iphone-models-iphe3fa5df43/ios, что « 6s ”- это самое старое оборудование, которое поддерживает iOS 13, а https://caniuse.com/#search = hls говорит, что HLS нуждается> = 13,2.

...