ID3 Tag при объединении MP3 в режиме реального времени с использованием частичного содержимого PHP и HTTP - PullRequest
2 голосов
/ 16 июня 2019

То, что мы хотим сделать, это добавить своего рода предварительный просмотр MP3 в другой файл MP3 в режиме реального времени.Это означает, что у нас есть два физических файла MP3 на сервере, которые еще не объединены в один, потому что ffmpeg & Co. занимает слишком много времени.Это должно быть в режиме реального времени, чтобы не терять время, когда кто-то запускает (веб) плеер.Практический случай - добавить предварительные ролики в файлы подкастов.То, что мы уже сделали (описано ниже), работает, за исключением отображения правильной длительности файла в аудиоплеерах.

Один из моих коллег сделал это, поэтому я стараюсь описывать как можно лучше.

Мой коллега уже сказал заголовку, что два файла идут подряд, читая оба файла и повторяя их через PHP.HTTP / 1.1 206 Частичное содержимое используется для доставки «объединенного» содержимого.

Проблема состоит в том, что в обоих файлах все еще есть два тега ID3, и большинство аудиоплееров читают только первый, что происходит неправильнодисплеи.Единственный случай, когда он работает на 100% - это VLC после загрузки всего этого.Ни один веб-плеер, ни iTunes и т. Д. Не могут управлять длительностью «объединенного» файла.

Есть идеи, как создать «виртуальный тег ID3» в реальном времени и как удалить существующие, не касаясь исходных файлов?

1 Ответ

0 голосов
/ 17 июня 2019

Есть много неточных выводов, к которым вы пришли, поэтому позвольте мне начать с исправления тех, которые могут помочь вам решить проблему.

потому что ffmpeg & Co. занимает слишком много времени

FFmpeg может объединять эти аудиопотоки быстрее, чем вы точно можете передавать их клиентам. Если вы используете -codec copy (которым вы должны быть в этом случае), он будет обрабатывать все демультиплексирование / мультиплексирование за вас. И имейте в виду, что вы можете смотреть прямо из FFmpeg. Нет необходимости в промежуточном файле.

Практический случай - добавить предварительные ролики в файлы подкастов.

Маршрут FFmpeg - это то, что вам нужно.

Мой коллега уже сказал заголовку, что два файла идут подряд, читая оба файла и отображая их через PHP. HTTP / 1.1 206 Частичное содержимое используется для доставки «объединенного» содержимого.

Это немного странный способ сделать это. Вместо этого вы можете просто объединить данные и отправить их напрямую в одном ответе.

Проблема заключается в том, что в обоих файлах по-прежнему есть два тега ID3, и большинство аудиоплееров читают только первый, что происходит при неправильном отображении длительности.

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

Несомненно, проблема в вашем случае заключается в неправильных заголовках длины из-за того, как вы обрабатываете это слияние, и / или в несоответствии битрейта, из-за которого оценка длины от игрока неверна.

Есть идеи, как создать «виртуальный тег ID3» в режиме реального времени и как удалить существующие, не касаясь исходных файлов?

Я бы абсолютно использовал FFmpeg для этой работы. Если что, потому что не все подкасты используют MP3. В подкастах MP4 много AAC, а также несколько Opus в WebM.

...