Jak pisałem w podobnym temacie w dziale Delphi - także w C# zakładam temat o wykorzystywaniu BDA do "porozumiewania" się z tunerami DVB do komputerów. Jest to całkiem fajna sprawa, ale nie wiele o tym słychać w sieci, bo zabawa wymaga posiadania wspomnianego tunera w komputerze, a raczej niewiele osób decyduje się na takie rozwiązanie, a jeśli już, to ogranicza się do gotowych aplikacji. Osób bawiących się w programowanie pod BDA w Polsce znam w sumie może ze 3-4...

Pod C# znalazłem dwa całkiem przyjemne sample wykorzystania BDA. Jeden z nich jest wśród przykładów dla biblioteki DirectShowNet, znaleźć go łatwo, więc linka daruję. Przykład jest bardzo ciekawy, bo prosty. Wspiera DVB-S i DVB-T (czyli też naziemną cyfrówkę - w Polsce tego nie zawiele, ale jest). Pod Windows 7 zadziałał świetnie, na XP SP3 nie chciał, ale możliwe, że to tylko wina mojej konfiguracji sprzętowej.

Ciekawy jest drugi sample: http://regis.cosnier.free.fr/?page=CodeTV Autor zatrzymał rozwój na wersji 0.1. Działa ona świetnie z DVB-T, gorzej z DVB-S, bo przy definiowaniu TuningSpace brak wskazań na typ konwertera (parametry LOF). W efekcie przykładowo u mnie program działa tak, że jeśli uruchomimy go jako pierwszego po starcie systemu, to nie będzie chciał wyszukać niczego, a jeśli wcześniej uruchomimy jakikolwiek inny program, który zainicjuje hardware, czyli wstroi się w jakąś częstotliwość, to program będzie wyszukiwać i pozwalać na oglądanie tylko kanałów z tego miejsca, wskazanego przez poprzedni program. Za to zaletą kodu jest wstępnie rozpisany parser PSI (wymaga pewnych poprawek, ale i tak solidna robota).

Ja zacząłem sobie na boku trochę w C# dłubać, póki co jestem na etapie wyszukiwania sprzętu, dekoderów i budowania grafa. Bazuję na DirectShowNet. Póki co mam takie pierwsze przemyślenia:

  • o ile z wyszukaniem samego sprzętu nie ma problemów, podobnie jak z dekoderami obrazu (osobno MPEG-2 i H.264) o tyle z Audio miałem już nieco wysiłku. Dla audio konieczne jest w przypadku kanałów satelitarnych rozróżnienie standardowego audio MPEG-1/2 od AC3 i AAC. Z tym ostatnim komplikacja polega na tym, że AAC jest rozróżnione od HEAAC. Ja póki co wyszukuję filtry z CLSID wskazującym na AAC (000000FF-0000-0010-8000-00AA00389B71) i zastanawiam się, czy się to sprawdzi później...
  • nie znalazłem sposobu na wyliczenie samych "Video Renderers". Póki co rozwiązałem to przez DirectShowLib.Utils - sprawdzając, czy dostępny jest VMR7, VMR9, a EVR sprawdzając ręcznie przez jego CLSID (przez CLSID mógłbym odwołać się też do Overlay Mixer-a, ale zrobię to na końcu, jeśli nie wymyślę nic lepszego).

Czy ktoś z tu obecnych/zaglądających próbował porozumiewać się z tunerami PC przez BDA? Jakieś doświadczenia? Co myślicie o w/w problemach? Ciekawi mnie też, choć to trochę dalszy temat i jeszcze do tego nie dobrnąłem, czy jest możliwa podmiana filtra w działającym już grafie (sytuacja, gdy przykładowo zmieniamy kanał z SD w MPEG-2 na HD w H.264), tak aby nie musieć go całkowicie "demontować" i budować na nowo ze zmienionym tylko dekoderem?