DirectShow: как проиграть данные из памяти?
От: _random  
Дата: 22.03.07 06:16
Оценка:
Я вообще ничинающий, поэтому прошу ногами не пинать .

Проблема такая: в памяти, в разных буферах, есть куча мелких по размеру мультимедийных данных (wav, mp3, midi, видео разных форматов), задача состоит в том, чтобы проиграть их, используя DirectShow, без предварительного сохранения в виде файлов на диск.

Искал поиском -- не нашёл простого способа. Нашёл пару аналогичных вопросов, либо висящих без ответов, либо ответы меня не устраивают.
Самые близкие темы: http://www.rsdn.ru/Forum/?mid=1163386
Автор: Stanky
Дата: 10.05.05
, http://www.rsdn.ru/Forum/Message.aspx?mid=868196#868196
Автор: al
Дата: 26.10.04

-- к сожалению, здесь в итоге предлагается строить решение на основе примера [DXSDK]\samples\Multimedia\DirectShow\Filters\Async\Memfile.

Насколько я понимаю, асинхронность для меня не принципиальна, а в данном примере она занимает центральную часть, и оттого всё выглядит слишком сложно... Неужели нельзя сделать проигрывание (рендеринг) данных из памяти более простым способом?
Казалось бы, не должно быть особой разницы, где лежат данные: в пямяти, или в файле. Казалось бы, наоборот, базовый механизм должен быть расчитан на работу с памятью, а подгружение данных из файла в эту память -- вообще левая (по отношению к DirectShow) работа.

Здесь (http://www.rsdn.ru/Forum/?mid=2049070
Автор: SAnatoly
Дата: 09.08.06
) SAnatoly говорит, что использовал класс фильтра наследник CSource, выходной пин наследник CSourceStream. Но, к сожалению, здесь не приводится нужный код... Я не понимаю простой вещи: как передать буфер с данными, не заморачиваясь с разрезанием данных на самплы и пр. Всё, что нужно, это максимально просто (по реализации) скормить данные source-фильтру, и затем попросить граф-билдер зарендерить это дело. С передачей типов медиа-данных, думаю, разберусь сам (они заранее известны).

Пожалуйста, отзовитесь, кто знает и имел опыт. Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.