Всем привет!
Есть видео поток. Хочу отобразить его на форме по средствам 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);
В чем я неправ?