ffmpeg переключиться для повторного чтения локального файла

Вопрос или проблема

У меня есть локальный файл m3u8, в котором содержится интернет-ссылка, которую я загружаю с помощью ffmpeg в новый локальный файл m3u8; Пример оригинального файла m3u8:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1000,RESOLUTION=640×360,
http://server.com/**123456**

У меня есть скрипт PowerShell, который проверяет внешний сайт, и когда “123456 Ключ шифрования” меняется, он переписывает m3u8 соответствующим образом с новой ссылкой http://server.com/**7777777**

Но что происходит, так это то, что пока ffmpeg загружает и заканчивает загрузку сегментов с http://server.com/**123456**, он завершает работу и не проверяет оригинальный файл m3u8 на наличие новой ссылки, чтобы продолжить загрузку сегментов потока, он просто выходит. Есть ли какой-либо способ/ключ для ffmpeg или другой программы, которую я могу использовать, чтобы, когда данные заканчиваются, она проверяла оригинальный файл на новую ссылку и так далее?

Ответ или решение

Как настроить FFmpeg для повторного чтения m3u8 файла

Использование FFmpeg для работы с m3u8 файлами может оказаться довольно сложной задачей, особенно если у вас есть необходимость в динамическом обновлении ссылок на сегменты потоков. В вашем случае, проблема заключается в том, что FFmpeg завершает своё выполнение после загрузки всех сегментов, даже если оригинальный список воспроизведения m3u8 был изменён. В этой статье мы рассмотрим, как можно настроить FFmpeg для повторной проверки оригинального m3u8 файла и перезапуска загрузки сегментов, когда происходит изменение.

Проблема

Как вы описали, ваша PowerShell скрипт проверяет внешний источник и обновляет оригинальный m3u8 файл, если изменяется ключ шифрования. Однако, когда FFmpeg завершает загрузку текущих сегментов, он не делает повторную проверку оригинального м3u8 файла для загрузки новых сегментов. Это связано с тем, что FFmpeg не поддерживает автоматическое обновление ссылки на оригинальный файл в процессе выполнения.

Решение

К сожалению, в самом FFmpeg нет встроенной функции или переключателя, который позволял бы ему автоматически перезапускаться для повторной проверки оригинального m3u8 файла. Однако вы можете использовать комбинацию внешних скриптов и самого FFmpeg для достижения вашей цели:

  1. Создание циклического скрипта:
    Используйте PowerShell (или bash, если вы на Linux) для создания бесконечного цикла, который будет следить за изменениями в оригинальном m3u8 файле и перезапускать FFmpeg с новым URL, как только он изменится.

    Пример PowerShell скрипта:

    $m3u8File = "path/to/your/original.m3u8"
    $outputFile = "path/to/output/file.ts"
    
    while ($true) {
       # Проверка изменений в оригинальном m3u8 файле
       $newContent = Get-Content $m3u8File
    
       # Запуск FFmpeg для загрузки сегментов
       Start-Process -FilePath "ffmpeg.exe" -ArgumentList "-i $m3u8File -c copy $outputFile"
    
       # Ждать, пока FFmpeg завершится
       Wait-Process -Name ffmpeg
    
       # Проверка на изменения в контенте
       Start-Sleep -Seconds 10
    }
  2. Обработка ошибок:
    Убедитесь, что ваш скрипт обрабатывает ошибки, чтобы избежать бесконечных циклов, если что-то пойдёт не так.

  3. Настройка интервалов проверки:
    Задержка Start-Sleep может быть настроена в зависимости от ваших нужд по частоте проверки. Например, вы можете установить её на 5 или 10 секунд.

  4. Изучение других инструментов:
    Если PowerShell не подходит, вы можете рассмотреть возможность использования других инструментов, таких как streamlink или curl, которые могут иметь более удобные функции автоматического повторного подключения.

Заключение

Таким образом, в данной ситуации автоматизация процесса с помощью скрипта в PowerShell является наиболее целесообразным решением. Несмотря на то, что FFmpeg не имеет встроенной возможности для повторного чтения m3u8 файла, с использованием дополнительных инструментов и скриптов вы сможете добиться необходимого результата. Убедитесь, что ваш скрипт постоянно отслеживает изменения и перезапускает загрузку сегментов, что позволит вам оставаться в актуальности.

Оцените материал
Добавить комментарий

Капча загружается...