Оберните поток необработанных NALU H264 в контейнер, такой как MP4.

У меня есть приложение, которое отправляет необработанные NALU h264, созданные в результате кодирования на лету с использованием x264 x264_encoder_encode. Я получаю их через простой TCP, поэтому я не пропускаю ни одного кадра. Мне нужно иметь возможность декодировать такой поток в клиенте с помощью аппаратного ускорения в Windows (DXVA2). Я изо всех сил пытался найти способ заставить это работать с помощью FFMPEG. Возможно, будет проще попробовать Media Foundation или DirectShow, но сырой H264 они не возьмут. Мне либо нужно:

  1. Измените код серверного приложения, чтобы вернуть поток mp4. У меня нет опыта работы с x264. Я смог получить необработанный H264, вызвав x264_encoder_encode, следуя ответу на этот вопрос: Как можно закодировать серию изображений в H264 с помощью x264 C API? Как я могу перейти от этого к чему-то, что завернуто в MP4 при этом все еще имея возможность транслировать его в режиме реального времени

  2. Я мог бы в приемнике обернуть его заголовками mp4 и передать во что-то, что может воспроизвести его с помощью DXVA. Я бы не знал, как это сделать

  3. Я мог бы найти другой способ ускорить его, используя DXVA с FFMPEG или что-то еще, что принимает его в необработанном формате.

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

меня бы устроило любое решение


person cloudraven    schedule 29.04.2012    source источник
comment
Красота и скорость DXVA в основном предполагают, что видео предоставляется пользователю, а не считывается обратно в оперативную память из видеопамяти. Будьте готовы к тому, что чтение из видеопамяти может оказаться неожиданно медленным и убить всю идею быстрого аппаратного декодирования для целей, отличных от презентации.   -  person Roman R.    schedule 01.05.2012
comment
Да... Думаю, теперь я должен принять этот факт. Можно ли предварительно обработать кадры на каком-то этапе с помощью DXVA. Возможно, написать фильтр медиафонда или что-то в этом роде?   -  person cloudraven    schedule 03.05.2012


Ответы (1)


Я считаю, что вы должны иметь возможность использовать пакеты H.264 вне сети с Media Foundation. на странице 298 этой книги есть пример http://www.docstoc.com/docs/109589628/Developing-Microsoft-Media-Foundation-Applications#, которые используют поток HTTP с Media Foundation.

Я только сам изучаю Media Foundation и пытаюсь сделать то же самое, что и вы, в моем случае я хочу использовать полезные данные H.264 из пакета RTP, и, насколько я понимаю, для этого потребуется пользовательский IMFSourceReader. Доступ к декодированным кадрам также должен быть возможен из того, что я читал, поскольку кажется, что существует полная гибкость в объединении компонентов в цепочку в топологии.

person sipsorcery    schedule 07.05.2012
comment
спасибо за ссылку. эта книга довольно хороша. Я почти уверен, что если я создам трансформацию медиа-фонда, я смогу делать то, что хочу. Я еще не сделал, но кажется многообещающим - person cloudraven; 02.06.2012