Я не являюсь строго разработчиком программного обеспечения, я инженер-электронщик, и я в основном имею дело с аппаратным обеспечением и 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? Если так, у меня есть несколько вопросов:
Я читал, что можно создавать собственные фильтры DirectShow. Если не считать моих технических способностей, это будет вариант для достижения того, чего я хочу здесь? Я нашел http://archive.msdn.microsoft.com/dshowfilter, но я не очень знаком с C ++, и у меня возникают проблемы с переносом его в VS2008, чтобы поиграть с ним. Я достаточно опытен в C и C #, поэтому я надеюсь, что для чего-то подобного я смогу найти свой путь, если мне придется?
Кто-нибудь знает о существующем компоненте, который будет делать то, что я уже хочу? Что-то, что мы можем купить? Я не могу позволить себе тратить на это слишком много времени. Я немного искал «DirectShow для Windows CE» и «Исходные фильтры DirectShow для Windows CE», но я просто получаю те же несколько статей и неотвеченных сообщений на форуме. Я не уверен, что ничего не существует, или я ищу не ту вещь?
Если я сам напишу это, я найду такие статьи, как this , где они создали фильтры в C #, а не C ++. Это выглядит немного больше в моей зоне комфорта, но я все еще не уверен, что именно мне нужно делать. Я в порядке с идеей ввода данных потока UDP, но я не уверен, что мне нужно сделать с ним дальше, чтобы получить его к «выводу вывода». И как мне изменить наше программное обеспечение для использования этого пользовательского фильтра в отличие от обычного фильтра? На данный момент мне просто кажется, что начать работу с пустым исходным фильтром
Извините, если кое-что из этого кажется тривиальным, но все это было слишком много, чтобы принять его за один раз, и мне просто нужно немного руководства, я думаю. Я был бы очень признателен, если бы кто-нибудь мог мне помочь!
Заранее спасибо,
Rik