Добавьте средство записи файлов в образец GSSF
Привет,
как я уже упоминал в названии, я хотел бы добавить файловый писатель в график образца GSSF, а не рендерить его.
На самом деле то, что я действительно пытаюсь сделать, это добавить второй фильтр источника файла, затем подключить GSSF и фильтр источника файла к AVI Mux и, наконец, к файловому писателю.
GSSF+источник -&Файл gt; АВ мультиплексор -&ГТ; файл писатель.
Но один только первый шаг мог бы очень помочь.
Моя цель - создать видео с 2 источниками:
1 - захват моего рабочего стола 2 - другое видео (уже записанное с помощью камеры) также 2 источника должны быть синхронными
Я уже создал график с 2 источниками видео и т. д., Но я не мог узнать, как задержать один из источников. Мне нужно, чтобы Источник файла 1 просто запустился на несколько миллисекунд позже, чем второй источник файла.
Что я уже пробовал:
что касается добавления файла Writer к образцу графика в GSSF я попробовал следующее:
после кода
// Add the filter to the graph hr = m_FilterGraph.AddFilter(ipsb, "GenericSampleSourceFilter"); Marshal.ThrowExceptionForHR( hr );
Я попытался добавить фильтр записи файлов и подключить его к GSSF, но безрезультатно
//add File writer IBaseFilter pFilewriter2 = (IBaseFilter)new FileWriter(); hr = m_FilterGraph.AddFilter(pFilewriter2, "File writer"); //set destination filename IFileSinkFilter pFilewriter2_sink = pFilewriter2 as IFileSinkFilter; hr = pFilewriter2_sink.SetFileName("D:\\Test.avi", null); //connect File writer hr = m_FilterGraph.ConnectDirect(GetPin(ipsb, "Out"), GetPin(pFilewriter2, "in"), null);
и это метод GetPin
private IPin GetPin(IBaseFilter filter, string pinname) { IEnumPins epins; int hr = filter.EnumPins(out epins); IntPtr fetched = Marshal.AllocCoTaskMem(4); IPin[] pins = new IPin[1]; while (epins.Next(1, pins, fetched) == 0) { PinInfo pinfo; pins[0].QueryPinInfo(out pinfo); bool found = ((pinfo.name == pinname) || (pinfo.name.Contains(pinname))); DsUtils.FreePinInfo(pinfo); if (found) return pins[0]; } return null; }