Re[4]: Как узнать majortype и subtype в видео файле?
От: Hanike  
Дата: 01.11.07 18:25
Оценка:
Я примерно так и делаю(сокращённый псевдо код):

// Взять стрим из базы
CComPtr<ISequentialStream> spSeqStream = GetBlob(guidMediaSubType);


// Вытащить типы по смещению
CMediaType mt;
ref_ptr<char> rpData(new char[12]);
ZeroMemory(rpData.get(), 12);
ULONG cb = 11;
hrs = spSeqStream->Read(rpData.get(), cb, &cb);
// Здесь руками по смещению вытаскиваю типы
mt = SelectMediaType(rpData.get()+8);


// Перевод потока из ISequentialStream в IStream
CComPtr<IStream> spStream = StreamFromSeqStream(spSeqStream);


// Создание фильтра
m_pStream = new CFileStream(spStream, GetSize());
CBaseFilter* spMyFilter= new CMemReader(m_pStream, &mt, (HRESULT*)&hrs);


// Само воспроизведение потока
hrs = CoCreateInstance( CLSID_FilterGraph,
NULL,
CLSCTX_INPROC,
IID_IFilterGraph,
(void**) &m_spFGraf);


hr = m_spFGraf->AddFilter(spMyFilter, NULL);

CComQIPtr<IGraphBuilder> spBuilder(m_spFGraf);

hr = spBuilder->Render(spMyFilter->GetPin(0));


Если структура CMediaType заполнена верно — будет воспроизведение.
Видео файл здесь я распарсиваю сам.
А как сделать так, чтобы автоматом? Т.е. нужен фильтр который принимал бы
обезличенный поток, а вадавал бы поток уже с типами.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.