Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.
использоватьUCБраузерAppНекоторые веб-страницы можно легковидеоСкачать на локальный,если тебе повезет,Откройте каталог кеша, и вы увидите соответствующий файл mp4. но большую часть времени,Вы видите файл m3u8 и папку, состоящую из цифр и букв.,Как показано ниже.
Войдите в папку, и вы найдете кучу файлов данных. Хотя у них нет суффиксных имен, на самом деле это файлы медиафрагментов ts (Transport Stream). Каждый из них можно открыть индивидуально с помощью плеера и представляет собой сегментированные видеоролики продолжительностью в несколько секунд. Если вы хотите посмотреть полную версию, вы можете посмотреть ее только в автономном режиме в мобильном браузере.
HLS (HTTP Live Streaming) — это решение для потоковой передачи мультимедиа, основанное на протоколе HTTP, разработанное Apple для мобильных устройств, таких как iPhone, iPod, iTouch и iPad. В технологии HLS веб-сервер предоставляет клиенту аудио- и видеопотоки практически в реальном времени, используя стандартный протокол HTTP. Таким образом, пока вы используете технологию HLS, вы можете напрямую обеспечивать прямую трансляцию по требованию и в обычных HTTP-приложениях. Приложения, связанные с видео, в App Store в основном используют эту технологию. Основной принцип — разрезать видеофайл или видеопоток на небольшие части (ts) и создать индексный файл (m3u8). Поддерживаемая кодировка видеопотока — H.264, а кодировка аудиопотока — AAC. Другими словами, настоящие видеофайлы находятся в папке на первом изображении. m3u8, соответствующий каждой папке, используется для указания видеоплагину, как последовательно воспроизводить находящиеся внутри ts-файлы, тем самым представляя пользователю полное видео. .
Вам нужно использовать командные строки ffplay и ffmpeg.
Откройте файл m3u8 в текстовом виде, и вы увидите, что в нем хранится абсолютный путь к каждому файлу ts.
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:8
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:4.000000,
/storage/896D-1F02/Android/data/com.UCMobile/files/UCDownloads/VideoData//94bad5572f90065418914b4481bf7d1ae19403dc/Y2hlbmppbmdjb25n0
#EXTINF:6.360000,
/storage/896D-1F02/Android/data/com.UCMobile/files/UCDownloads/VideoData//94bad5572f90065418914b4481bf7d1ae19403dc/Y2hlbmppbmdjb25n1
#EXTINF:4.000000,
/storage/896D-1F02/Android/data/com.UCMobile/files/UCDownloads/VideoData//94bad5572f90065418914b4481bf7d1ae19403dc/Y2hlbmppbmdjb25n2
#EXTINF:2.080000,
……
Нет сомнений в том, что после копирования видеофайлов в файловую систему Linux абсолютные пути, указывающие на машину Android, должны быть заменены абсолютными путями или относительными путями на компьютере. Как показано ниже.
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:8
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:4.000000,
./94bad5572f90065418914b4481bf7d1ae19403dc/Y2hlbmppbmdjb25n0
#EXTINF:6.360000,
./94bad5572f90065418914b4481bf7d1ae19403dc/Y2hlbmppbmdjb25n1
#EXTINF:4.000000,
./94bad5572f90065418914b4481bf7d1ae19403dc/Y2hlbmppbmdjb25n2
#EXTINF:2.080000,
……
На этом этапе убедитесь, что файл m3u8 и соответствующая папка 94bad5572f90065418914b4481bf7d1ae19403dc находятся в одном родительском каталоге, а затем введите
ffplay XXX.m3u8
Хорошо, ты действительно думаешь, что это сделано? См. отчет об ошибке ниже.
Filename extension of './94bad5572f90065418914b4481bf7d1ae19403dc/Y2hlbmppbmdjb25n1395' is not a common multimedia extension, blocked for security reasons.
очевидно,Из соображений безопасности,Официальный патч блокирует ts файлы без суффиксных имен.,Подробную информацию см.Анализ уязвимостей чтения произвольных файлов FFmpeg.
Самое прямое решение — добавить суффикс ts пакетно в файлы m3u8 и соответствующие папки. Первое легко объяснить, но второе требует помощи команд в каталоге файлов.
ls -A | xargs -i mv {
} {
}.ts
Конечно, у нас есть более простой способ — добавить параметры в команду ffplay.
ffplay -allowed_extensions ALL XXX.m3u8
После успешного запуска команды ffplay появится интерфейс воспроизведения, но нет кнопок управления. Вы можете выполнять только некоторые простые интерактивные операции с помощью мыши и сочетаний клавиш. Например, пробел означает паузу/продолжение, клавиши со стрелками влево и вправо — вперед и назад, двойной щелчок левой кнопкой мыши означает полноэкранный режим, а сдвиг правой кнопки мыши влево или вправо означает быструю перемотку вперед и назад и т. д.
Для преобразования всего видео в формат mp4 требуется всего одна простая строка команды.
ffmpeg -allowed_extensions ALL -i XXX.m3u8 -c copy aaa.mp4
в: За опцией -i следует входной файл, который является индексом m3u8; -c copy указывает на копирование всех потоков, что эквивалентно -acodec copy -vcodec copy; aaa.mp4 — выходной файл.
Если установлен графический интерфейс управления, такой как «Видео», вам нужно только изменить информацию о пути в m3u8 со ссылкой на предыдущий раздел, а затем вы можете напрямую добавить воспроизведение, вообще не учитывая расширение имени файла (конечно, это будут иметь определенные риски для безопасности), а кнопки управления будут относительно полными. Однако при перекодировании я действительно не нашел хорошего программного обеспечения для работы с графическим интерфейсом. Я попробовал фабрику формата Wine+, которая принудительно объединяла медиапотоки ts независимо от индексной информации m3u8. Однако я обнаружил, что количество видео, добавляемых фабрикой формата, было ограничено при объединении. Для некоторых больших фильмов уже были созданы сотни или тысячи файлов ts. добавлено. Просто превысило. Более того, Format Factory по умолчанию не копирует и не объединяет потоки ts напрямую, а кодирует все аудио- и видеопотоки от начала до конца, что потребляет много аппаратных ресурсов. Лично я считаю, что многие графические интерфейсы являются подводными камнями для перекодирования m3u8, но командная строка ffmpeg — самая простая и надежная.
Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/129157.html Оригинальная ссылка: https://javaforall.cn