Получение UDP Unicast Video Stream на Windows CE - PullRequest
3 голосов
/ 07 декабря 2011

Я не являюсь строго разработчиком программного обеспечения, я инженер-электронщик, и я в основном имею дело с аппаратным обеспечением и C на микросхемах, но я только что унаследовал проект C #, который требует небольшой доработки (по крайней мере, я надеюсь, что это немного!). Я справился с C # в полной и компактной среде, но у меня нет опыта, когда дело доходит до DirectShow.

У нас есть устройство Windows CE 6.0, и оно запускает некоторое программное обеспечение C # для продукта типа digital signage. Часть дисплея может быть настроена как видео, и в настоящее время он может воспроизводить файлы, хранящиеся локально на SD-карте устройства, без особых проблем. Меня попросили заставить его работать с сетевым потоком UDP (я думаю, что это будет RAW MPEG4, я просто жду окончательного подтверждения).

Из этого я узнал, что DirectShow использует «фильтры» и что существуют фильтры исходного кода, декодера и рендера. Они соединяются вместе через «контакты» и образуют «граф фильтра». Я вижу, что DirectShow полностью основан на COM, и хотя я знаю о COM, я сам никогда не использовал его в гневе. У меня есть программное обеспечение C #, которое я унаследовал, поэтому я не начинаю с чистого листа.

Я полагаю, что раздел, который мне нужно посмотреть на изменение, это:

clsid = CLSID_.FilterGraph;
riid = IID_.ICaptuGraphBuilder2;
hr = (HRESULT)PInvokes.CoCreateInstance(ref clsid, IntPtr.Zero, (uint)CLSCTX_.INPROC_SERVER, riid, out obj);
_graphBuilder = (IGraphBuilder)obj;

hr = (HRESULT)_graphBuilder.RenderFile(filePath, null);

Согласно статье на msdn.microsoft.com/en-us/library/ms834433.aspx и другим источникам, Windows CE поддерживает:

  • Потоковое MMS
  • HTTP-поток
  • Потоковая передача файлов
  • широковещательная и многопотоковая передача
  • Поддержка Windows Media Station
  • Поддержка ASX
  • Кодеки

Теперь, правильно ли я считаю, что Windows CE изначально не поддерживает потоковую передачу из UDP? Если так, у меня есть несколько вопросов:

  1. Я читал, что можно создавать собственные фильтры DirectShow. Если не считать моих технических способностей, это будет вариант для достижения того, чего я хочу здесь? Я нашел http://archive.msdn.microsoft.com/dshowfilter, но я не очень знаком с C ++, и у меня возникают проблемы с переносом его в VS2008, чтобы поиграть с ним. Я достаточно опытен в C и C #, поэтому я надеюсь, что для чего-то подобного я смогу найти свой путь, если мне придется?

  2. Кто-нибудь знает о существующем компоненте, который будет делать то, что я уже хочу? Что-то, что мы можем купить? Я не могу позволить себе тратить на это слишком много времени. Я немного искал «DirectShow для Windows CE» и «Исходные фильтры DirectShow для Windows CE», но я просто получаю те же несколько статей и неотвеченных сообщений на форуме. Я не уверен, что ничего не существует, или я ищу не ту вещь?

  3. Если я сам напишу это, я найду такие статьи, как this , где они создали фильтры в C #, а не C ++. Это выглядит немного больше в моей зоне комфорта, но я все еще не уверен, что именно мне нужно делать. Я в порядке с идеей ввода данных потока UDP, но я не уверен, что мне нужно сделать с ним дальше, чтобы получить его к «выводу вывода». И как мне изменить наше программное обеспечение для использования этого пользовательского фильтра в отличие от обычного фильтра? На данный момент мне просто кажется, что начать работу с пустым исходным фильтром

Извините, если кое-что из этого кажется тривиальным, но все это было слишком много, чтобы принять его за один раз, и мне просто нужно немного руководства, я думаю. Я был бы очень признателен, если бы кто-нибудь мог мне помочь!

Заранее спасибо,

Rik

Ответы [ 2 ]

3 голосов
/ 07 декабря 2011

Что касается ваших вопросов:

  1. Да, пользовательский фильтр Direct Show - это именно то, что вам нужно. Этот фильтр затем может быть подключен к вашему фильтру графа.

  2. Мне неизвестны какие-либо готовые продукты для Windows CE, которые бы это делали, но я никогда не искал один из них, поэтому не думайте, что мое отсутствие знаний равнозначно отсутствию доступности. Я держу пари, что если вы хотите основывать свою работу на чьей-либо другой работе, вам нужно будет найти версию фильтра для настольного компьютера, получить исходный код, а затем перекомпилировать его для Windows CE. Я знаю, что у LEADTOOLS есть множество материалов для обработки изображений, так что, вероятно, стоит хотя бы запрос там.

  3. Если вы напишите это сами, это, к сожалению, должно быть сделано в C ++. Фильтры DirectShow должны иметь интерфейс COM. Чтобы экспортировать собственный интерфейс, фреймворк должен иметь хостинг EE, чего нет у Compact Framework. Конечным результатом этого является то, что вы не можете создавать COM-объекты или CCW в Compact Framework, что означает, что вы не можете создать фильтр DirectShow в C # для Windows CE.

2 голосов
/ 07 декабря 2011

Если вы хотите приобрести продукт, я бы посоветовал связаться с Крисом Таке , чтобы узнать, есть ли у его компании что-то или можно что-то сделать.

Его блог >> ЗДЕСЬ << </a>.Я думаю, что он является крупнейшим авторитетом в разработке Compact Framework, к которому можно обратиться за реальными вопросами.

Однако я не вижу способа связаться с ним в его блоге.Возможно, он изменит это в ближайшем будущем.

...