Я работаю на потоковом сервере, который будет способен транслировать целевую рекламу. По сути, слушатели слышат одну и ту же музыку, но каждые, скажем, 30 минут приходит рекламный блок, и у каждого слушателя есть свой блок. Реализация такого сервера потоковой передачи создает различные проблемы, и этот вопрос относится к одной из них.
Сервер будет работать аналогично Icecast, то есть он будет считывать поток по сети из какого-либо генератора потока и передавать его каждому слушателю. Когда пришло время транслировать рекламу, сервер прекращает извлекать поток из генератора, читает объявления из файлов и вставляет их в буфер каждого слушателя, передает их и возобновляет ретрансляцию потока из генератора.
Когда сервер переключается с ретрансляционного потока на широковещательную рекламу, он должен объединить два потока MP3 (мы транслируем в формате MP3). Меня беспокоит то, что простое добавление одного фрагмента данных за другим может привести к появлению некоторых слышимых артефактов. Это можно сделать без проблем?
Я уже понял это:
- Я могу заставить сервер знать о кадрах MP3, чтобы избежать ошибок синхронизации.
- Я думаю о добавлении кадров MP3 из рекламного файла после кадров MP3 из потока.
- Поскольку реклама загружается из правильно закодированного MP3-файла, я обошел проблему накопителя байтов, поскольку первый кадр из файла не может его использовать.
Но меня беспокоит, как работает MDCT. Слушатели не имеют ни малейшего представления о том, что будет делать мой сервер, поэтому их MP3-декодеры могут создавать некоторые артефакты, поскольку некорректные данные MDCT будут помещаться один за другим в поток, который они загружают. Будет ли это дополнять нулями в начале файла с объявлением?
Знаете ли вы какие-либо библиотеки / инструменты (если возможно, с открытым исходным кодом), которые могут беспрепятственно объединять два файла MP3, не распаковывая их?
Можете ли вы указать какие-либо хорошие ресурсы, описывающие формат MP3? Я много искал в Интернете, находил много информации, но все еще скучаю по общей картине.
Может быть, вы знаете, что было бы проще, если бы я использовал другой кодек, такой как OGG / Vorbis, AAC?
PS. Этот вопрос не является дубликатом Каков наилучший способ объединения mp3-файлов? . Для меня не подходят mp3wrap и инструменты.