Odczyt EPG ze strumienia danych.

Re: Odczyt EPG ze strumienia danych.

Postnapisał demsey sobota, 22 sierpnia 2009, 20:03

Odgrzewam tego kotleta:)
Jeśli kogos interesuje jak sie dobrać do strumieni dvb poprzez dvb3 api (e2) to mogę sie podzielić "zdobyczami"
Aktualnie otwieram demuxer ustawiam filtry i skanuje i aprsuje PAT, PMT, CAT, SDT, ECM z epg w EIT też nie bedzie problemów
Wszystko w pythonie:)
demsey
Polish Koders Team
 
Posty: 71
Dołączył(a): czwartek, 12 lutego 2009, 23:44

Odczyt EPG ze strumienia danych.

Postnapisał t4ndeta sobota, 22 sierpnia 2009, 22:34

No to jak juz by był logger to może posyłanie EMM do newcs :>
Avatar użytkownika
t4ndeta
Polish Koders Team
 
Posty: 691
Dołączył(a): poniedziałek, 25 lutego 2008, 00:50

Re: Odczyt EPG ze strumienia danych.

Postnapisał demsey sobota, 22 sierpnia 2009, 22:44

Akurat ten logger EMM chodzi mi po głowie.
Wysyłanie EMM do newcs'a też mi przyszlo na myśl szczegolnei ze protokol do newcamd jest dobrze udokumentowany i juz to kiedyś robiłem
Wiec takie 2 pluginki logger EMM oraz wysyłanie EMM'a do newcs'a (lub jeden zintegrowany) fajnei bylo by wykonać

Uporządkuje troche szalony kod i podeslę paczke demonstarcyjną z jakims opisem
demsey
Polish Koders Team
 
Posty: 71
Dołączył(a): czwartek, 12 lutego 2009, 23:44

Re: Odczyt EPG ze strumienia danych.

Postnapisał demsey niedziela, 13 grudnia 2009, 20:30

Taj jakos wyszlo ze koniec koncow nie zrobilem czytania EMM'ow - tylko ECM'y oraz klenta newcamd'a (laczy sie z newcs) i moze wysylac ECM'y i EMM'y

Jesli chodzi o parsowanie streamow dvbsi to zrobilem taki skrypt dvbsi.py
Kod: Zaznacz cały
python dvbsi.py
Wypluwa liste programów oraz ich pidy z aktualnie działającego transpondera. Dokladniej to z demuxera odczytywana jest tablica PAT i SDT sa parsowane i łączone po polu program_id i otrzymujemy np:
Program: 0x0000, PID: 0x0010
Program: 0x10e0, PID: 0x010d ['TVN', 'TVN Style']
Program: 0x10e2, PID: 0x010f ['TVN Grupa ITI', 'TVN CNBC Biznes']
Program: 0x10e1, PID: 0x010e ['TVN Grupa ITI', 'Test']
Program: 0x10ed, PID: 0x0118 ['TVN Grupa ITI', 'test_radio']
Program: 0x10d7, PID: 0x0104 ['TVN Grupa ITI', 'TVN']
Program: 0x10d8, PID: 0x0105 ['TVN Grupa ITI', 'TVN 24']
Program: 0x10d9, PID: 0x0106 ['TVN', 'TVN Siedem']
Program: 0x10dc, PID: 0x0109 ['', 'Mango 24']
Program: 0x10de, PID: 0x010b ['TVN Grupa ITI', 'TVN METEO']
Program: 0x10df, PID: 0x010c ['TVN GRUPA ITI', 'TVN TURBO']
Nastepnie wypieramy pid np dla TVN 24 i wpisujemy
Kod: Zaznacz cały
python dvbsi.py 105
Dzieje sie to co wczesniej ale dodatkowo odczytywana i parsowana jest tablica PMT podanego programu np:
PMT PID: 0x0105

Stream_type: 0x02 - ['ITU-T Rec. H.262 | ISO/IEC 18818-2 Video or ISO/IEC 11172-2 constrained parameter video stream', 'MPEG-2 Video']
Elementary_PID: 0x0201
ES_info_length: 0x0035

MPEG-DescriptorTag: 0x02 - Video Stream
Descriptor_length: 0x03
Unknown_data: 0x1a485f

MPEG-DescriptorTag: 0x09 - Conditional Access
Descriptor_length: 0x11
CA system ID: 0x0100
ECM PID: 0x06b3
Provider ID: 0x0068
SECA_descriptor:0xff
SECA_PBM: 0098200000000100
Subsription_date: 0x278d (2009-12-13)

MPEG-DescriptorTag: 0x09 - Conditional Access
Descriptor_length: 0x0f
CA system ID: 0x0500
ECM PID: 0x064e
Provider ID: 0x1001
Unknown_data: 0x001301201403032a00

MPEG-DescriptorTag: 0x09 - Conditional Access
Descriptor_length: 0x04
CA system ID: 0x1803
ECM PID: 0x05a2

MPEG-DescriptorTag: 0x52 - Stream Indentifier
Descriptor_length: 0x01
component_tag: 0x01

MPEG-DescriptorTag: 0x06 - Data Stream Alignment
Descriptor_length: 0x01
Unknown_data: 0x02

Stream_type: 0x04 - ['ISO/IEC 13818-3 Audio', 'MPEG-2 Audio']
Elementary_PID: 0x0294
ES_info_length: 0x0036

MPEG-DescriptorTag: 0x03 - Audio Stream
Descriptor_length: 0x01
Unknown_data: 0x67

MPEG-DescriptorTag: 0x09 - Conditional Access
Descriptor_length: 0x11
CA system ID: 0x0100
ECM PID: 0x06b3
Provider ID: 0x0068
SECA_descriptor:0xff
SECA_PBM: 0098200000000100
Subsription_date: 0x278d (2009-12-13)

MPEG-DescriptorTag: 0x09 - Conditional Access
Descriptor_length: 0x0f
CA system ID: 0x0500
ECM PID: 0x064e
Provider ID: 0x1001
Unknown_data: 0x001301201403032a00

MPEG-DescriptorTag: 0x09 - Conditional Access
Descriptor_length: 0x04
CA system ID: 0x1803
ECM PID: 0x05a2

MPEG-DescriptorTag: 0x0a - ISO 639 Language
Descriptor_length: 0x04
ISO639_language_code: pol
Unknown_data: 0x01

MPEG-DescriptorTag: 0x52 - Stream Indentifier
Descriptor_length: 0x01
component_tag: 0x94

Stream_type: 0xc0 - ['ATSC Reserved', '']
Elementary_PID: 0x00d0
ES_info_length: 0x0021

MPEG-DescriptorTag: 0xc2 - User defined
Descriptor_length: 0x18
Unknown_data: 0x504f4c5f5f455047504f4c5f5f50494c504f4c5f5f43484c

MPEG-DescriptorTag: 0xc6 - User defined
Descriptor_length: 0x05
Unknown_data: 0x00000702ff

Stream_type: 0xc1 - ['ATSC Reserved', '']
Elementary_PID: 0x00d5
ES_info_length: 0x000a

MPEG-DescriptorTag: 0xc2 - User defined
Descriptor_length: 0x08
Unknown_data: 0x50494c4f54450000

Tutaj na wyjsciu dostejemy odpowiedz prawie jak dvbsnoop:)
Pidy ECM'ów znajduja sie w sekcjach "0x09 - Conditional Access", ktorych moze byc kilka albo wcale w zaleznosci od systemów uzytych kodowania dla danego programu oraz oczywiscie osobno dla video i audio:)

Następnie wybieramy odpowiedni ECM PID dla odpowiedniego providera i dla audio bądz video i wpisujemy jako 2 parametr np:
Kod: Zaznacz cały
python dvbsi.py 105 6b3
Skryprt wypluje 15 ECM'ów dla podanego pid'a (0x06b3, ktory w momencie pisania skryptu odpowiadal providerowi 0x0068 Cyfra+ dla streamu mpeg video):
ECM PID: 0x06b3
ECM: 00813061006800000e009568fea8801ef67eafe18848d0e2ba04b95c447e99bf2143c87902d5433f9705eb00c3f896ca1f920093711699b2a30441816823eb4b915d03591862712e607f693af8e28b4754ac90b7efbffa69dae50200aaf864ad8794991969
ECM: 00813061006800000e009568fea8801ef67eafe18848d0e2ba04b95c447e99bf2143c87902d5433f9705eb00c3f896ca1f920093711699b2a30441816823eb4b915d03591862712e607f693af8e28b4754ac90b7efbffa69dae50200aaf864ad8794991969
ECM: 00813061006800000e009568fea8801ef67eafe18848d0e2ba04b95c447e99bf2143c87902d5433f9705eb00c3f896ca1f920093711699b2a30441816823eb4b915d03591862712e607f693af8e28b4754ac90b7efbffa69dae50200aaf864ad8794991969
ECM: 00813061006800000e009568fea8801ef67eafe18848d0e2ba04b95c447e99bf2143c87902d5433f9705eb00c3f896ca1f920093711699b2a30441816823eb4b915d03591862712e607f693af8e28b4754ac90b7efbffa69dae50200aaf864ad8794991969
ECM: 00813061006800000e009568fea8801ef67eafe18848d0e2ba04b95c447e99bf2143c87902d5433f9705eb00c3f896ca1f920093711699b2a30441816823eb4b915d03591862712e607f693af8e28b4754ac90b7efbffa69dae50200aaf864ad8794991969
ECM: 00813061006800000e009568fea8801ef67eafe18848d0e2ba04b95c447e99bf2143c87902d5433f9705eb00c3f896ca1f920093711699b2a30441816823eb4b915d03591862712e607f693af8e28b4754ac90b7efbffa69dae50200aaf864ad8794991969
ECM: 00813061006800000e009568fea8801ef67eafe18848d0e2ba04b95c447e99bf2143c87902d5433f9705eb00c3f896ca1f920093711699b2a30441816823eb4b915d03591862712e607f693af8e28b4754ac90b7efbffa69dae50200aaf864ad8794991969
ECM: 00813061006800000e009568fea8801ef67eafe18848d0e2ba04b95c447e99bf2143c87902d5433f9705eb00c3f896ca1f920093711699b2a30441816823eb4b915d03591862712e607f693af8e28b4754ac90b7efbffa69dae50200aaf864ad8794991969
ECM: 00813061006800000e009568fea8801ef67eafe18848d0e2ba04b95c447e99bf2143c87902d5433f9705eb00c3f896ca1f920093711699b2a30441816823eb4b915d03591862712e607f693af8e28b4754ac90b7efbffa69dae50200aaf864ad8794991969
ECM: 00813061006800000e009568fea8801ef67eafe18848d0e2ba04b95c447e99bf2143c87902d5433f9705eb00c3f896ca1f920093711699b2a30441816823eb4b915d03591862712e607f693af8e28b4754ac90b7efbffa69dae50200aaf864ad8794991969
ECM: 00813061006800000e009568fea8801ef67eafe18848d0e2ba04b95c447e99bf2143c87902d5433f9705eb00c3f896ca1f920093711699b2a30441816823eb4b915d03591862712e607f693af8e28b4754ac90b7efbffa69dae50200aaf864ad8794991969
ECM: 00813061006800000e009568fea8801ef67eafe18848d0e2ba04b95c447e99bf2143c87902d5433f9705eb00c3f896ca1f920093711699b2a30441816823eb4b915d03591862712e607f693af8e28b4754ac90b7efbffa69dae50200aaf864ad8794991969
ECM: 00813061006800000e009568fea8801ef67eafe18848d0e2ba04b95c447e99bf2143c87902d5433f9705eb00c3f896ca1f920093711699b2a30441816823eb4b915d03591862712e607f693af8e28b4754ac90b7efbffa69dae50200aaf864ad8794991969
ECM: 00813061006800000e009568fea8801ef67eafe18848d0e2ba04b95c447e99bf2143c87902d5433f9705eb00c3f896ca1f920093711699b2a30441816823eb4b915d03591862712e607f693af8e28b4754ac90b7efbffa69dae50200aaf864ad8794991969
ECM: 00813061006800000e009568fea8801ef67eafe18848d0e2ba04b95c447e99bf2143c87902d5433f9705eb00c3f896ca1f920093711699b2a30441816823eb4b915d03591862712e607f693af8e28b4754ac90b7efbffa69dae50200aaf864ad8794991969
ECM: 00813061006800000e009568fea8801ef67eafe18848d0e2ba04b95c447e99bf2143c87902d5433f9705eb00c3f896ca1f920093711699b2a30441816823eb4b915d03591862712e607f693af8e28b4754ac90b7efbffa69dae50200aaf864ad8794991969


Wiekszosc zabawy odbywa sie w funkcji dmx() (demuxer) funkcje audio() i video() to zabawy z przechwytywania audio i video do pliku ts (udanych)
Parsowanie innych tabel jest podobne, łapiemy "surówke" reciveOneShot(fd,DVB_SI_PAT_PID,DVB_SI_PAT_TAB_ID) oczywiscie zmieniajac parametry i dalej wrzucamy do swojego parsera - tutaj trzeaba sobie znaleźć dokumentacje do odpowiedneij tablicy w google:).
Dysponuje jakimis linakmi - jak by to kogos interesowalo to moge poszukac.
Parser do PMT jest skomplikowany ale wyswietla informacje jakoś tam opisane Nie udalo mi sie znależć dokumentacji do wszystkich deskryptorow wiec czesto mozna zobaczyc "unknown data" - ale chyba wszystkie podstawowe sa:) Zreszta wszystko jest do wygooglowania -niestety nei ma jednego spojnego zrodla dokumentacji.
Narazie przynajmniej tyle napisalem;)
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
demsey
Polish Koders Team
 
Posty: 71
Dołączył(a): czwartek, 12 lutego 2009, 23:44

Re: Odczyt EPG ze strumienia danych.

Postnapisał demsey niedziela, 13 grudnia 2009, 21:37

Dalo bysie - ale tak bylo szybciej;)
Generalnei nie che mi sie powieleac funkcjonalnoscie enigmy :) - ale to ma potencjal tylko jakies konkretne zastosowanie? :)
Tak wogole to musiualem dorobic "bindings" do dvb3 api - ale jest juz takie cos zrobione lepej projekt kamelia - tylko w pythonie w naszych pudelkach nie ma modulu mapujacego ctypes :( - Jak by komus udalo sie przekonac Tideglo....
Podobno w python 2.5 jest domyslenie ale nei w ipboxach
demsey
Polish Koders Team
 
Posty: 71
Dołączył(a): czwartek, 12 lutego 2009, 23:44

Re: Odczyt EPG ze strumienia danych.

Postnapisał demsey poniedziałek, 14 grudnia 2009, 13:40

No to jest powazne wyzwanie;)
Moze przyda sie klient newcamd pure python - jak by go polączyc z mozliwoscia wycagania ECM'ów ze streema to mamy natywny w pythonie cam Dorobienie wybierania EMM'ow pozwala na aktualizowanie uprawnień
...Skoro mówisz że się da to muszę się doszkolić...
Polecam linuxową dokumentacje do DVB3 api, ogolnie polega to na wyslaniu polecen ioctl z odpowiednimi danymi w odpowiednich strukturach. Potem zwykle operacje na plkach;)
Linki ktore moga sie przydac: http://www.linuxtv.org/docs/dvbapi/DVB_Demux_Device.html#SECTION00418000000000000000 oraz http://lists.alioth.debian.org/pipermail/pkg-vdr-dvb-changes/2004-May/000205.html
...Bo oglądanie divixów bez E2 to działa bez problemu...
Mi udało sie przechwycic video z tunera do pliku ts W odwrotna strone tez nie nie powinno byc problemu - ale divixa to nie wiem jak ruszyc... pewnie trzeba go jakoś porozklejac...
demsey
Polish Koders Team
 
Posty: 71
Dołączył(a): czwartek, 12 lutego 2009, 23:44

Re: Odczyt EPG ze strumienia danych.

Postnapisał szaro102 wtorek, 29 grudnia 2015, 12:22

Witam,
mam poszukuje możliwości "wydostania" danych EPG z ENIGMY, jedną z opcji jest przechwytywanie danych za pomocą skryptów kolegi demsey, ale odbiornik wszystkie te dane posiada w pamięci i najprościej było by je poprostu wydostać. Próbowałem napisać własny skrypt eksportujący dane z odbiornika ->
Kod: Zaznacz cały
from enigma import eEPGCache
epgcache = eEPGCache.getInstance()
epgcache.importEvent(serviceref, eventlist)

ale niestety mam problem z importem modułu enigma

Kod: Zaznacz cały
nbox:/usr/lib/enigma2/python# python test.py
Traceback (most recent call last):
File "test.py", line 2, in <module>
 from enigma import eEPGCache
 File "/usr/lib/enigma2/python/enigma.py", line 30, in <module>
 File "/usr/lib/enigma2/python/enigma.py", line 22, in swig_import_helper
ImportError: No module named _enigma
nbox:/usr/lib/enigma2/python#


Jeśli to nie problem to proszę o małą pomoc, bądź pomysł jak najłatwiej wydostać dane EPG z ENIGMY.
Pozdrawiam
szaro102
 
Posty: 3
Dołączył(a): czwartek, 20 lutego 2014, 15:27
Dekoder:: ADB

Re: Odczyt EPG ze strumienia danych.

Postnapisał Father Pio wtorek, 29 grudnia 2015, 17:18

wystarczy zrzucić cache na dysk. Czyli zapis zawartości do ścieżki domyślnej - zazwyczaj /hdd/epg.dat

Kod: Zaznacz cały
epgcache = eEPGCache.getInstance()
epgcache.save()               


z tym że to masz zrzuc całości, bez wydłubywania eventów
Avatar użytkownika
Father Pio
Polish Koders Team
 
Posty: 2428
Dołączył(a): piątek, 19 czerwca 2009, 23:45

Re: Odczyt EPG ze strumienia danych.

Postnapisał szaro102 wtorek, 29 grudnia 2015, 22:23

OK, już nawet wstępnie zabrałem się za pisanie parsera do pliku epg.dat, ale póki co mam problem z ładowaniem modułu enigma w skrypcie Python-a.
szaro102
 
Posty: 3
Dołączył(a): czwartek, 20 lutego 2014, 15:27
Dekoder:: ADB

Poprzednia strona

Powrót do Developer Corner

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości