Я использую Media Foundation для создания выходного файла MP4 (H264 + AAC) из входного MP4 после серии фильтров. Создание видео отлично работает, и видео воспроизводится без проблем локально. Проблема заключается в том, что при удаленном выполнении (через веб-плеер или даже VLC) видео не запускается до полной загрузки.
Я проверил и подтвердил, что http-сайт, на котором размещен файл, поддерживает поле заголовков Accepts-Ranges, и через некоторое время выяснилось, что проблема возникает из-за того, что файл не был создан с флагом "быстрого старта", который позволяет осуществлять прогрессивную загрузку видео.
Я попытался найти в Интернете решение, но мне не удалось найти способ применить этот флаг к Media Foundation Sinkwriter. Есть идеи? (Я не могу использовать какое-либо внешнее приложение для этого, поскольку этот код будет запущен в среде Windows Store)
Для прогрессивной загрузки требуется, moov
ящик moov
перед mdat
в файле MPEG-4, что обычно требует дополнительных усилий при создании файла и которое не является поведением по умолчанию в Media Foundation.
Media Foundation представил атрибут MF_MPEG4SINK_MOOV_BEFORE_MDAT
для обработки этого:
Поведение mpeg4 по умолчанию по умолчанию - писать "moov" после поля "mdat". Установка этого атрибута заставляет сгенерированный файл писать "moov" перед полем "mdat".
Чтобы приемник mpeg4 использовал этот атрибут, поток байтов, который был передан, не должен быть медленным поиском или удаленным.
Эта функция включает в себя дополнительное копирование/ремуксирование файлов.
Обратите внимание на минимальные требования. Или вам нужно выполнить пост-обработку файла, чтобы переместить поле moov
в начало.
Смотрите также: