Размышление над проблемами формата Ogg
18 марта 2010 года
Один из разработчиков проекта FFmpeg в статье "Ogg objections" подробно рассказал о недостатках мультимедиа контейнера Ogg. Вывод в статье сделан неутешительный, свободность и независимость от патентов - это конечно хорошо, но с технической стороны формат не может конкурировать с аналогами и требует полной переработки. Изначально Ogg создан для работы с простейшими аудио-потоками, из чего следует его излишняя усложненность и нестандартность при работе с другими видами данных, например, при инкапсуляции видео-потоков.
Основные недостатки Ogg:
- Трудность интеграции поддержки новых кодеков: для каждого кодека требуется оформления подробной карты, идентифицирующей кодек, показывающей как извлекать данные и как интерпретировать временные метки. Например, для поддержки кодеков Microsoft пришлось расширить формат Ogg, что привело к непринятию данных расширений курирующей формат Ogg организацией Xiph. В качестве примера для подражания приводится формат Matroska, который может работать с любым кодеком, при этом для обеспечения поддержки кодека достаточно определить его уникальный идентификатор.
- Излишнее расходование ресурсов при организации хранения привязанной к потоку служебной информации. Заголовок страницы данных имеет размер 27 байт, в то время как его без проблем можно было бы ужать до 12 байт. Большой объем лишних полей в заголовке страницы данных, приводит к увеличению размера итогового файла примерно на 1%, в то время как для формата MP4 этот показатель равен 0.05%;
- Низкая отзывчивость (latency): возникновение паразитной задержки при передаче и приеме кадров (на стороне отправителя и получателя) мешает использованию Ogg при организации интерактивной передачи, например, при проведении видеоконференций или для организации IP-телефонии. Задержка на стороне отправителя возникает из-за того что заголовок страницы данных в Ogg зависит от содержимого страницы, т.е. отображение и передача страниц осуществляется только блоками, пока весь блок данных не будет получен, невозможно рассчитать передаваемую в заголовке контрольную сумму и размер страницы, что приводит к задержке из-за лишней буферизации. На стороне получателя возникает задержка из-за невозможности продолжить обработку до момента получения пакетов всех элементарных потоков (звук, видео), в случае отключения проверки контрольных сумм это приводит к постоянному отставанию на одну страницу данных, а если включен режим проверки контрольных сумм, то на две.
- Непродуманный механизм получения случайного доступа к разным позициям в потоке: индекс в Ogg создается налету (требует дополнительного прохода по данным) или прикрепляется к концу файла, что мешает быстрой смене позиции в не до конца загруженном потоке. Определение позиции осуществляется через операции бинарного поиска, что для больших файлов приводит к выполнению множества лишних проверок (например для перехода к заданной позиции файла размером 10 Гб может потребоваться до 50 дополнительных перемещений). Более того, формат хранения времени в Ogg зависит от используемого в текущий момент кодека и приводит к выполнению дополнительных операций на уровне кодека.
- Проблемы с синхронизацией потоков. Для синхронизации звука и видео каждый пакет данных снабжен временной меткой, но эта казалось бы простая операция в Ogg сильно усложнена - метка отождествлена со временем конца проигрывания блока данных, что приводит к ряду неудобств, таких как трудности планирования, расхождение с общепринятой практикой, для определения начальной точки требуется декодирование пакетов на первой странице.
- Общая усложненность процесса декодирования и разбора данных, необходимость выполнения лишних действий, использование нестандартных методов и применение в документации необщепринятых терминов. Для обхода ограничения на размер страницы в Ogg возможно разбиение пакета на две страницы, что возлагает на декодер дополнительную нагрузку по сборке фрагментированных пакетов данных. Дополнительно наблюдаются проблемы с требованием лишнего объема памяти для буферизации, на настольных системах это не критично, но для встраиваемых систем приводит к трате драгоценных ресурсов.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.