Nizar Belhiba Ответов: 2

Добавьте средство записи файлов в образец 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;
}

2 Ответов

Рейтинг:
2

OriginalGriff

Не публикуйте это в разделе быстрые ответы - если вы получили код из статьи, то в нижней части этой статьи есть кнопка "Добавить комментарий или Вопрос", которая вызывает отправку электронного письма автору. Затем они предупреждаются, что вы хотите поговорить с ними.
Публикуя это здесь, вы полагаетесь на то, что они "заглядывают" и понимают, что это для них.

Если вы получили его с другого сайта, то вам нужно начать там и спросить их - мы понятия не имеем, что такое "образец GSSF", о котором вы упоминаете!


Nizar Belhiba

Извините... когда я разместил тег "Directshow", я подумал, что GSSF будет известен.
Я взял образец из Новой СДК

и да, я спрашивал в DirectShow .NET, но в то же время и здесь, как и в DirectShow.Сеть, кажется, мертва, там есть только 3 сообщения с этого года (два от меня), все остальные старше 1 года.

Рейтинг:
0

Nizar Belhiba

спасибо, я уже видел этот пост, но там не так много информации (по крайней мере для меня) о том, как подключить /добавить новый фильтр.

Richard MacCutchan

Попробуйте разместить свой вопрос там. Вы с гораздо большей вероятностью найдете справку на сайте, которому принадлежит программное обеспечение.