MP4-H264 декодирования видео с Media Foundation - PullRequest
1 голос
/ 26 августа 2011

Я тестирую, как интегрировать libavcodec (http://en.wikipedia.org/wiki/Libavcodec) с использованием MS Media Foundation SDK, чтобы декодировать видео в формате h264 без потерь в необработанные данные YUV / RGB

У меня 2 вопроса:

  1. У меня были проблемы с загрузкой mp4-видео, закодированного с помощью h264 / AVC (в обычном формате, без потерь), в MFPlayer (скомпилированный в VS2010 из примеров MF SDK), код ошибки: плохой поток байтовТа же ошибка произошла, когда я попытался загрузить то же видео, что и поток (исходный код считывателя взят из http://msdn.microsoft.com/en-us/library/dd389281%28v=VS.85%29.aspx) или как сеанс с использованием примера транскодирования. Может быть, кто-нибудь может поделиться опытом использования Media Foundation для загрузкиmp4-h264 video.

  2. Мне следует интегрировать сторонний кодек в декодирование на основе Media Foundation. Согласно MSDN, Media Foundation имеет некоторую поддержку сторонних кодеков, однако я этого не сделал.Не могу найти пример, который делает декодирование с использованием стороннего кодека. Может быть, кто-то сделал это? или может сослаться на полезный пример, как это сделать.

Спасибо взаранее, Зеев

1 Ответ

0 голосов
/ 28 декабря 2011

(2) Мне следует интегрировать сторонний кодек в декодирование на основе Media Foundation.Согласно MSDN, Media Foundation имеет некоторую поддержку сторонних кодеков, однако я не нашел пример, который делает декодирование с использованием стороннего кодека.Может быть, кто-то сделал это?или может ссылаться на полезный пример, как это сделать.

Это возможно.По сути, это включает в себя написание Media Foundation Transform для стороннего декодера.Посмотрите в свой каталог установки SDK.Перейти к Microsoft SDKs -> v7.0 -> Samples -> Multimedia -> Mediafoundation -> Decoder.Содержит пример декодера MPEG1 MFT.Что вам нужно сделать, это соответствующим образом унаследовать IMFTransform интерфейс и реализовать его методы.Например, медиа-клиент вызовет метод ProcessInput(), чтобы предоставить вашему декодеру MFT образцы медиа.Точно так же это вызовет ProcessOutput(), чтобы получить декодированный вывод.Короче говоря, MFT выступает в качестве оболочки для стороннего декодера.

...