> Andreas U. Trottmann wrote: > >>This looks like a success at first, but the stream that I can >>take from /dev/dvb/adapter0/dvr0 doesn't seem to be playable. >> >> > > The message from the userland application is wrong, due to bugs. Will > need to fix that for descrambling to happen. > This has been subjected to discussion many times. > > > Manu > I am currently working on this code. The parsing and handling of the stream descriptors are getting there, but I have not verified if the ca_pmt is ok yet. I'll get back when I have. Regards, Henrik ps I tried Andreas PMT data through the parser and came out better than before: parse_pmt: PMT Data=[ 02 b0 9a 03 85 d7 00 00 e0 a0 f0 00 02 e0 a0 f0 17 52 01 01 11 01 ff 09 0f 05 00 e2 c3 10 01 00 13 01 20 14 0 3 00 94 0c 06 e0 20 f0 2e 52 01 05 56 0a 64 65 75 09 00 64 65 75 17 77 45 1d 01 18 e7 e8 e9 ea eb ec ed ee ef f3 f4 f5 c7 c8 c9 ca cb cc cd ce cf d3 d4 d5 04 01 f0 03 e0 50 f0 1a 52 01 02 0a 04 64 65 75 01 09 0f 05 00 e2 c3 10 01 00 13 01 20 14 03 00 94 0c 03 e0 51 f0 1a 52 01 03 0a 04 65 6e 67 01 09 0f 05 00 e2 c3 10 01 00 13 01 20 14 03 00 94 0c cf f3 24 8f ] parse_pmt: PMT PID=[1030], length=[157] parse_pmt_header: Table ID=[2], Section Length=[154], Program Number=[901], Section Number=[0], PCR PID=[160], Program info length= [0] parse_pmt: Program info length=[0] parse_pmt: Parsing stream 0: ->parse_streams: Elements=[ 02 e0 a0 f0 17 52 01 01 11 01 ff 09 0f 05 00 e2 c3 10 01 00 13 01 20 14 03 00 94 0c] ->parse_streams: Stream=[0], Stream Type=[2], Elementary PID=[160], ES info length=[23] ->parse_streams: Parsing descriptor 1: -->parse_descriptor: Descriptor: Tag=[0x52], Length=[1] -->parse_stream_identifier_descriptor: Parsing Stream Identifier Descriptor ->parse_streams: Parsing descriptor 2: -->parse_descriptor: Descriptor: Tag=[0x11], Length=[1] -->parse_std_descriptor: Parsing STD Descriptor ->parse_streams: Parsing descriptor 3: -->parse_descriptor: Descriptor: Tag=[0x09], Length=[15] -->parse_ca_descriptor: Parsing CA Descriptor -->parse_ca_descriptor: CA System=[500], CA PID=[2c3] -->parse_ca_descriptor: CA Private Data=[ 10 01 00 13 01 20 14 03 00 94 0c ] parse_pmt: Parsing stream 1: ->parse_streams: Elements=[ 06 e0 20 f0 2e 52 01 05 56 0a 64 65 75 09 00 64 65 75 17 77 45 1d 01 18 e7 e8 e9 ea eb ec ed ee ef f3 f 4 f5 c7 c8 c9 ca cb cc cd ce cf d3 d4 d5 04 01 f0] ->parse_streams: Stream=[1], Stream Type=[6], Elementary PID=[32], ES info length=[46] ->parse_streams: Parsing descriptor 1: -->parse_descriptor: Descriptor: Tag=[0x52], Length=[1] -->parse_stream_identifier_descriptor: Parsing Stream Identifier Descriptor ->parse_streams: Parsing descriptor 2: -->parse_descriptor: Descriptor: Tag=[0x56], Length=[10] -->parse_teletext_descriptor: Parsing Teletext Descriptor ->parse_streams: Parsing descriptor 3: -->parse_descriptor: Descriptor: Tag=[0x45], Length=[29] -->Skipping unknown descriptor tag [0x45] parse_pmt: Parsing stream 2: ->parse_streams: Elements=[ 03 e0 50 f0 1a 52 01 02 0a 04 64 65 75 01 09 0f 05 00 e2 c3 10 01 00 13 01 20 14 03 00 94 0c] ->parse_streams: Stream=[2], Stream Type=[3], Elementary PID=[80], ES info length=[26] ->parse_streams: Parsing descriptor 1: -->parse_descriptor: Descriptor: Tag=[0x52], Length=[1] -->parse_stream_identifier_descriptor: Parsing Stream Identifier Descriptor ->parse_streams: Parsing descriptor 2: -->parse_descriptor: Descriptor: Tag=[0x0a], Length=[4] -->parse_iso_639_language_descriptor: Parsing ISO 639 Language Descriptor ->parse_streams: Parsing descriptor 3: -->parse_descriptor: Descriptor: Tag=[0x09], Length=[15] -->parse_ca_descriptor: Parsing CA Descriptor -->parse_ca_descriptor: CA System=[500], CA PID=[2c3] -->parse_ca_descriptor: CA Private Data=[ 10 01 00 13 01 20 14 03 00 94 0c ] parse_pmt: Parsing stream 3: ->parse_streams: Elements=[ 03 e0 51 f0 1a 52 01 03 0a 04 65 6e 67 01 09 0f 05 00 e2 c3 10 01 00 13 01 20 14 03 00 94 0c] ->parse_streams: Stream=[3], Stream Type=[3], Elementary PID=[81], ES info length=[26] ->parse_streams: Parsing descriptor 1: -->parse_descriptor: Descriptor: Tag=[0x52], Length=[1] -->parse_stream_identifier_descriptor: Parsing Stream Identifier Descriptor ->parse_streams: Parsing descriptor 2: -->parse_descriptor: Descriptor: Tag=[0x0a], Length=[4] -->parse_iso_639_language_descriptor: Parsing ISO 639 Language Descriptor ->parse_streams: Parsing descriptor 3: -->parse_descriptor: Descriptor: Tag=[0x09], Length=[15] -->parse_ca_descriptor: Parsing CA Descriptor -->parse_ca_descriptor: CA System=[500], CA PID=[2c3] -->parse_ca_descriptor: CA Private Data=[ 10 01 00 13 01 20 14 03 00 94 0c ] copy_en50221_pmt_object: Copying EN50221 Header copy_en50221_pmt_object: Program Number=[901], Program info length=[0] copy_en50221_pmt_object: Program level descriptor count=[0] copy_en50221_stream_object: Stream Type=[2], Elementary PID=[160], ES length=[23], Number of descriptors=[3] copy_en50221_descriptor_object: Tag=[09], Length=[0f], CA system ID=[500], CA PID=[2c3] copy_en50221_descriptor_object: Private bytes=[11] [ 10 01 00 13 01 20 14 03 00 94 0c ] copy_en50221_stream_object: Stream Type=[6], Elementary PID=[32], ES length=[46], Number of descriptors=[3] copy_en50221_stream_object: Stream Type=[3], Elementary PID=[80], ES length=[26], Number of descriptors=[3] copy_en50221_descriptor_object: Tag=[09], Length=[0f], CA system ID=[500], CA PID=[2c3] copy_en50221_descriptor_object: Private bytes=[11] [ 10 01 00 13 01 20 14 03 00 94 0c ] copy_en50221_stream_object: Stream Type=[3], Elementary PID=[81], ES length=[26], Number of descriptors=[3] copy_en50221_descriptor_object: Tag=[09], Length=[0f], CA system ID=[500], CA PID=[2c3] copy_en50221_descriptor_object: Private bytes=[11] [ 10 01 00 13 01 20 14 03 00 94 0c ] do_en50221_pmt_object: CA PMT List Management=[03] set_pmt_command: Setting PMT Command set_pmt_command: CA descriptor found @ STREAMS Level, Setting CA PMT command=[01] set_pmt_command: CA descriptor found @ STREAMS Level, Setting CA PMT command=[01] set_pmt_command: CA descriptor found @ STREAMS Level, Setting CA PMT command=[01] do_en50221_pmt_object: Object length=[640], Total length=[80] asn_1_encode: Length=[80] asn_1_encode: length indicator=[50] do_en50221_pmt_object: ASN.1 words=[1], Length Array=[ 80 ] en50221_encode_header: CA PMT List Mgmt=[3], Program Number=[901], Program info length=[0] write_en50221_pmt_object: EN50221 header encoded en50221_encode_streams: Stream type=[02], ES PID=[a0], ES Info length=[17] encode_ca_pmt_command: Encoding SCRAMBLING @ STREAMS Level, Command=[01] en50221_encode_descriptor: Tag=[09], length=[0f], CA system id=[500], CA PID=[2c3] en50221_encode_descriptor: Private Bytes=[11] [ 10 01 00 13 01 20 14 03 00 94 0c ] en50221_encode_streams: Stream type=[06], ES PID=[20], ES Info length=[2e] en50221_encode_streams: Stream type=[03], ES PID=[50], ES Info length=[1a] encode_ca_pmt_command: Encoding SCRAMBLING @ STREAMS Level, Command=[01] en50221_encode_descriptor: Tag=[09], length=[0f], CA system id=[500], CA PID=[2c3] en50221_encode_descriptor: Private Bytes=[11] [ 10 01 00 13 01 20 14 03 00 94 0c ] en50221_encode_streams: Stream type=[03], ES PID=[51], ES Info length=[1a] encode_ca_pmt_command: Encoding SCRAMBLING @ STREAMS Level, Command=[01] en50221_encode_descriptor: Tag=[09], length=[0f], CA system id=[500], CA PID=[2c3] en50221_encode_descriptor: Private Bytes=[11] [ 10 01 00 13 01 20 14 03 00 94 0c ] debug_message: CA MESSAGE=[ 9f 80 32 50 03 03 85 ed 10 00 02 e0 a0 ff ee 01 09 0f 05 00 e2 c3 10 01 00 13 01 20 14 03 00 94 0c 06 e 0 20 f0 00 03 e0 50 ff ee 01 09 0f 05 00 e2 c3 10 01 00 13 01 20 14 03 00 94 0c 03 e0 51 ff ee 01 09 0f 05 00 e2 c3 10 01 00 13 01 20 14 03 00 94 0c ] ds