Отобразить VideoStream
От: hooky-mars  
Дата: 06.08.10 07:40
Оценка:
Всем привет!

Есть видео поток. Хочу отобразить его на форме по средствам DirectX.
Я так понимаю можно двумя способами это решить.
1.DerectX сам разбирает видео поток из сети (Думаю это рельно)
2.Я сам могу разобрать поток из сети и отдать деректиксу битмап (в виде последовательности байт в памяти).

Но вот как это релизовать, так и не нашол в гугле.

Вроде есть такие интерфейсы IStreamBufferSource, IStreamBufferSink, но если я начинаю их использовать, то потом не могу найти IPin для IGraphBuilder:

 comtype = Type.GetTypeFromCLSID(Clsid.FilterGraph);
 graphBuilder = (IGraphBuilder)Activator.CreateInstance(comtype); comtype = null;

 comtype = Type.GetTypeFromCLSID(Clsid.StreamBufferSource);
 IStreamBufferSource pSource = (IStreamBufferSource)Activator.CreateInstance(comtype);
 comtype = Type.GetTypeFromCLSID(Clsid.StreamBufferSnik);
 IStreamBufferSink pSnik = (IStreamBufferSink)Activator.CreateInstance(comtype);
//Куда завязать pSnik, чтобы он читал видео поток?????
 pSource.SetStreamSink(pSnik);
 IBaseFilter streamfilter = (IBaseFilter)pSource;
 graphBuilder.AddFilter(streamfilter, "SBESource");

 IEnumPins pins;
 hr = streamfilter.EnumPins(out pins);
 Marshal.ThrowExceptionForHR(hr);
 
 IPin[] pin = new IPin[1];
 do
 {
     hr = pins.Next(1, pin, IntPtr.Zero);
     if ((hr != 0) || (pin[0] == null))//Тут всегда null!!!!!!
       throw new NotImplementedException();

     graphBuilder.Render(pin[0]);

     Marshal.ReleaseComObject(pin[0]); pin[0] = null;
 } while (hr == 0);


В чем я неправ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.