У меня есть PHP-скрипт для потоковой передачи видео с URL-адреса, и я хочу получить время для управления потоком.
Браузеры делают HTTP-запросы с диапазоном байтов при переходе в момент видео.
Запросить заголовки
Accept:*/ * Accept-Encoding:identity;q=1, *;q=0 Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4 Connection:keep-alive Host:h.com If-Range:Tue, 20 Oct 2015 23:38:00 GMT Range:bytes=560855038-583155711 Referer:http://h.com/7743a76d2911cdd90354bc42be302c6946c6e5b4 User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36
Заголовки ответов
Accept-Ranges:bytes Cache-Control:private, max-age=14400 Connection:Keep-Alive Content-Length:22300674 Content-Range:bytes 560855038-583155711/605162520 Content-Type:video/mp4 Date:Tue, 10 May 2016 11:23:34 GMT Expires:Tue, 10 05 2016 15:23:34 GMT Keep-Alive:timeout=5, max=98 Last-Modified:Tue, 20 Oct 2015 23:38:00 GMT Server:Apache/2.4.7 (Ubuntu) X-Powered-By:PHP/5.5.9-1ubuntu4.16
Как работает это время на преобразование байтов?
На моем PHP-сервере я пытаюсь получить время от байтового запроса:
$time_second = $start_request_byte / $video_size_byte * $video_length_second;
Но это не решение, оно не точное … Любые идеи?
благодаря
Хорошо, я нашел решение, использующее ffprobe!
команда
$ ffprobe -i 430079256.mp4 -show_frames \ -show_entries frame=pkt_pos \ -read_intervals 01:23%+#1 \ -of default=noprint_wrappers=1:nokey=1 \ -hide_banner -loglevel panic
Вывод
Смещение байта => 1:23 видео
209782270
объяснять
-i 430079256.mp4
Видеовход -show_frames
Отображать информацию о каждом кадре -show_entries frame=pkt_pos
Отображать только информацию о позиции байта -read_intervals 01:23%+#1
Прочитать только 1 пакет после поиска позиции 01:23 -of default=noprint_wrappers=1:nokey=1
Не хотите печатать ключ и заголовок и нижний колонтитул раздела -hide_banner -loglevel panic
Не хотите печатать баннер ffprob и скрывать мета с помощью «паники», у которых появляются только фатальные ошибки