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 заполнена верно — будет воспроизведение.
Видео файл здесь я распарсиваю сам.
А как сделать так, чтобы автоматом? Т.е. нужен фильтр который принимал бы
обезличенный поток, а вадавал бы поток уже с типами.
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить