manio / vdr-plugin-dvbapi

VDR dvbapi plugin for use with OSCam
http://www.streamboard.tv/wbb2/thread.php?threadid=40060
GNU General Public License v2.0
58 stars 25 forks source link

Integrate Multiple Transponder Decryption in DVBAPI #133

Closed stahlhelmknacker closed 3 years ago

stahlhelmknacker commented 4 years ago

Hello Manio, Thank you very much for your work! Since VDR version 2.4.0, Multiple Transponder Decryption (MTD) is supported (http://www.tvdr.de/changelog.htm). Would there be a possibility to add this feature to the DVBAPI plugin?

Currently, when i start a second stream the de-scrambling of the stream is not working. If I am switching to a different channel on the same Transponder it works (so Multiple Channel Decryption is working). I am posting the Log Files of the VDR + OSCAM:

Initialization VDR

Sep 17 15:00:25 raspberrypi vdr[20794]: [20804] CAM 1: module ready Sep 17 15:00:25 raspberrypi vdr[20794]: [20804] CAM 2: module ready Sep 17 15:00:25 raspberrypi vdr[20794]: [20804] DVBAPI: CaInfo: 0.0 sending CA info Sep 17 15:00:25 raspberrypi vdr[20794]: [20804] DVBAPI: CaInfo: 1.1 sending CA info Sep 17 15:00:25 raspberrypi vdr[20794]: [20804] CAM 1: system ids: FFFF Sep 17 15:00:25 raspberrypi vdr[20794]: [20804] DVBAPI: 0.0 CA_PMT decoding len=7 lm=3 prg=0 len=1 Sep 17 15:00:25 raspberrypi vdr[20794]: [20804] DVBAPI: ci_cmd(G)=03 Sep 17 15:00:25 raspberrypi vdr[20794]: [20804] DVBAPI: 0.0 got CA pmt ciCmd=3 caLm=3 Sep 17 15:00:25 raspberrypi vdr[20794]: [20804] DVBAPI: 0.0 answer to query Sep 17 15:00:25 raspberrypi vdr[20794]: [20804] DVBAPI: 0.0 no action taken Sep 17 15:00:25 raspberrypi vdr[20794]: [20804] CAM 2: system ids: FFFF Sep 17 15:00:25 raspberrypi vdr[20794]: [20804] DVBAPI: 1.1 CA_PMT decoding len=7 lm=3 prg=0 len=1 Sep 17 15:00:25 raspberrypi vdr[20794]: [20804] DVBAPI: ci_cmd(G)=03 Sep 17 15:00:25 raspberrypi vdr[20794]: [20804] DVBAPI: 1.1 got CA pmt ciCmd=3 caLm=3 Sep 17 15:00:25 raspberrypi vdr[20794]: [20804] DVBAPI: 1.1 answer to query Sep 17 15:00:25 raspberrypi vdr[20794]: [20804] DVBAPI: 1.1 no action taken Sep 17 15:00:25 raspberrypi vdr[20794]: [20804] CAM 1: replies to QUERY - multi channel decryption (MCD) possible Sep 17 15:00:25 raspberrypi vdr[20794]: [20794] CAM 1: ready, master (OSCam) Sep 17 15:00:25 raspberrypi vdr[20794]: [20794] CAM 2: ready, slave of CAM 1

Decrypt Channel 1 on Device 1

Sep 17 15:00:56 raspberrypi vdr[20794]: [21241] CAM 1: assigned to device 1 Sep 17 15:00:56 raspberrypi vdr[20794]: [21260] device 1 receiver thread started (pid=20794, tid=21260, prio=high) Sep 17 15:00:56 raspberrypi vdr[20794]: [21241] VNSI: Successfully found following device: 0x175e480 (1) for receiving, priority=0 Sep 17 15:00:56 raspberrypi vdr[20794]: [21261] device 1 TS buffer thread started (pid=20794, tid=21261, prio=high) Sep 17 15:00:56 raspberrypi vdr[20794]: [21241] VNSI: Dummy receiver (0xb3b01820) activated Sep 17 15:00:56 raspberrypi vdr[20794]: [21241] VNSI: activate live receiver: 1 Sep 17 15:00:56 raspberrypi vdr[20794]: [21241] DVBAPI: 0.0 CA_PMT decoding len=1e5 lm=4 prg=21107 len=1d0 Sep 17 15:00:56 raspberrypi vdr[20794]: [21241] DVBAPI: ci_cmd(G)=01 Sep 17 15:00:56 raspberrypi vdr[20794]: [21241] DVBAPI: pid=2,01ff len=0 (0x0) Sep 17 15:00:56 raspberrypi vdr[20794]: [21241] DVBAPI: pid=6,0203 len=0 (0x0) Sep 17 15:00:56 raspberrypi vdr[20794]: [21241] DVBAPI: pid=6,0204 len=0 (0x0) Sep 17 15:00:56 raspberrypi vdr[20794]: [21241] DVBAPI: 0.0 got CA pmt ciCmd=1 caLm=4 Sep 17 15:00:56 raspberrypi vdr[20794]: [21241] DVBAPI: 0.0 answer to query suppressed Sep 17 15:00:56 raspberrypi vdr[20794]: [21241] DVBAPI: 0.0 set CAM decrypt (SID 21107 (0x5273), caLm 4, HasCaDescriptors 1) Sep 17 15:00:56 raspberrypi vdr[20794]: [21241] DVBAPI: send: channelSid=0x5273 (21107) Sep 17 15:00:56 raspberrypi vdr[20794]: [21241] DVBAPI: Write, sock=0 Sep 17 15:00:56 raspberrypi vdr[20794]: [20803] DVBAPI: OSCam not connected, (re)connecting... Sep 17 15:00:56 raspberrypi vdr[20794]: [20803] DVBAPI: created socket with socket_fd=34 Sep 17 15:00:56 raspberrypi vdr[20794]: [20803] DVBAPI: Successfully (re)connected to OSCam Sep 17 15:00:56 raspberrypi vdr[20794]: [20803] DVBAPI: Write, sock=34 Sep 17 15:00:56 raspberrypi vdr[20794]: [20803] DVBAPI: socket_fd=34 len=54 wrote=54 Sep 17 15:00:56 raspberrypi vdr[20794]: [20803] DVBAPI: send: channelSid=0x5273 (21107) Sep 17 15:00:56 raspberrypi vdr[20794]: [20803] DVBAPI: Write, sock=34 Sep 17 15:00:56 raspberrypi vdr[20794]: [20803] DVBAPI: socket_fd=34 len=500 wrote=500 Sep 17 15:00:56 raspberrypi vdr[20794]: [20803] DVBAPI: Action: Got SERVER_INFO: OSCam v1.20-unstable_svn, build r11221 (arm-linux-gnueabihf), protocol_version = 2 Sep 17 15:00:56 raspberrypi vdr[20794]: [20803] DVBAPI: Action: Got DMX_SET_FILTER request, adapter_index=0, pid=0, demux_idx=0, filter_num=0 Sep 17 15:00:56 raspberrypi vdr[20794]: [20803] DVBAPI: SetFilter: adapter=0 set FILTER pid=0000 start=1, demux=0, filter=0 Sep 17 15:00:56 raspberrypi vdr[20794]: [20803] DVBAPI: --> FILTER: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Sep 17 15:00:56 raspberrypi vdr[20794]: [20803] DVBAPI: --> MASK: FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Sep 17 15:00:56 raspberrypi vdr[20794]: [20803] DVBAPI: SetFilter: inserting new filter, demux=0, filter_num=0 Sep 17 15:00:56 raspberrypi vdr[20794]: [20803] DVBAPI: Action: Got DMX_SET_FILTER request, adapter_index=0, pid=1, demux_idx=0, filter_num=1

Decrypt Channel 2 on Device 2

Sep 17 15:01:26 raspberrypi vdr[20794]: [21704] CAM 1: assigned to device 2 Sep 17 15:01:26 raspberrypi vdr[20794]: [21705] device 2 receiver thread started (pid=20794, tid=21705, prio=high) Sep 17 15:01:26 raspberrypi vdr[20794]: [21706] device 2 TS buffer thread started (pid=20794, tid=21706, prio=high) Sep 17 15:01:26 raspberrypi vdr[20794]: [21704] VNSI: Successfully found following device: 0x1760e40 (2) for receiving, priority=0 Sep 17 15:01:26 raspberrypi vdr[20794]: [21704] DVBAPI: 1.1 CA_PMT decoding len=6 lm=5 prg=12502 len=0 Sep 17 15:01:26 raspberrypi vdr[20794]: [21704] DVBAPI: 1.1 got CA pmt ciCmd=-1 caLm=5 Sep 17 15:01:26 raspberrypi vdr[20794]: [21704] DVBAPI: 1.1 answer to query suppressed Sep 17 15:01:26 raspberrypi vdr[20794]: [21704] DVBAPI: 1.1 set CAM decrypt (SID 12502 (0x30D6), caLm 5, HasCaDescriptors 0) Sep 17 15:01:26 raspberrypi vdr[20794]: [21704] VNSI: Dummy receiver (0xb3a04be0) activated Sep 17 15:01:26 raspberrypi vdr[20794]: [21704] VNSI: activate live receiver: 1 Sep 17 15:01:27 raspberrypi vdr[20794]: [21704] DVBAPI: 1.1 CA_PMT decoding len=10 lm=4 prg=12502 len=0 Sep 17 15:01:27 raspberrypi vdr[20794]: [21704] DVBAPI: pid=2,02ff len=0 (0x0) Sep 17 15:01:27 raspberrypi vdr[20794]: [21704] DVBAPI: pid=6,0303 len=0 (0x0) Sep 17 15:01:27 raspberrypi vdr[20794]: [21704] DVBAPI: 1.1 got CA pmt ciCmd=-1 caLm=4 Sep 17 15:01:27 raspberrypi vdr[20794]: [21704] DVBAPI: 1.1 answer to query suppressed Sep 17 15:01:27 raspberrypi vdr[20794]: [21704] DVBAPI: 1.1 set CAM decrypt (SID 12502 (0x30D6), caLm 4, HasCaDescriptors 0) Sep 17 15:01:27 raspberrypi vdr[20794]: [21704] DVBAPI: CA_PMT doesn't contain CA descriptors Sep 17 15:01:27 raspberrypi vdr[20794]: [21704] VNSI: Successfully switched to channel 44 - Eurosport 1 HD Sep 17 15:01:27 raspberrypi vdr[20794]: [21704] VNSI: Started streaming of channel Eurosport 1 HD (timeout 10 seconds) Sep 17 15:01:27 raspberrypi vdr[20794]: [21707] cLiveStreamer stream processor thread started (pid=20794, tid=21707, prio=high) Sep 17 15:01:27 raspberrypi vdr[20794]: [21707] VNSI: Created stream for pid=767 and type=8 Sep 17 15:01:27 raspberrypi vdr[20794]: [21707] VNSI: Created stream for pid=771 and type=1 Sep 17 15:01:28 raspberrypi vdr[20794]: [20822] VNSI: Requesting clients to reload channel list Sep 17 15:01:28 raspberrypi vdr[20794]: [21707] VNSI-Error: cParser::AddPESPacket - max buffer size reached, pid: 767 Sep 17 15:01:29 raspberrypi vdr[20794]: [20794] VNSI: re-tune to channel Eurosport 1 HD Sep 17 15:01:29 raspberrypi vdr[20794]: [21707] VNSI: re-tuning... Sep 17 15:01:29 raspberrypi vdr[20794]: [21707] VNSI: close video input ... Sep 17 15:01:29 raspberrypi vdr[20794]: [21707] VNSI: activate live receiver: 0 Sep 17 15:01:29 raspberrypi vdr[20794]: [21707] DVBAPI: 1.1 CA_PMT decoding len=1d0 lm=5 prg=12502 len=1ca Sep 17 15:01:29 raspberrypi vdr[20794]: [21707] DVBAPI: ci_cmd(G)=04 Sep 17 15:01:29 raspberrypi vdr[20794]: [21707] DVBAPI: 1.1 got CA pmt ciCmd=4 caLm=5 Sep 17 15:01:29 raspberrypi vdr[20794]: [21707] DVBAPI: 1.1 answer to query suppressed Sep 17 15:01:29 raspberrypi vdr[20794]: [21707] DVBAPI: 1.1 stop decrypt Sep 17 15:01:29 raspberrypi vdr[20794]: [21707] DVBAPI: 1.1 CA_PMT decoding len=6 lm=3 prg=0 len=0 Sep 17 15:01:29 raspberrypi vdr[20794]: [21707] DVBAPI: 1.1 got CA pmt ciCmd=-1 caLm=3 Sep 17 15:01:29 raspberrypi vdr[20794]: [21707] DVBAPI: 1.1 answer to query suppressed Sep 17 15:01:29 raspberrypi vdr[20794]: [21707] DVBAPI: 1.1 stop decrypt Sep 17 15:01:29 raspberrypi vdr[20794]: [21707] DVBAPI: ProcessSIDRequest: got empty SID - returning from function Sep 17 15:01:29 raspberrypi vdr[20794]: [21707] CAM 1: unassigned from device 2

OSCAM Log

2019/09/17 15:00:56 136CD244 c (dvbapi) Client connected: 'vdr-plugin-dvbapi 2.2.5-GIT-197e752 / VDR 2.4.0' (protocol version = 2) 2019/09/17 15:00:56 136CD244 c (dvbapi) Demuxer 0 ecmpid 0 CAID: 1830 ECM_PID: 1CC0 PROVID: 000000 2019/09/17 15:00:56 136CD244 c (dvbapi) Demuxer 0 ecmpid 1 CAID: 1843 ECM_PID: 19C0 PROVID: 000000 2019/09/17 15:00:56 136CD244 c (dvbapi) Demuxer 0 ecmpid 2 CAID: 09C4 ECM_PID: 1BC0 PROVID: 000000 2019/09/17 15:00:56 136CD244 c (dvbapi) Demuxer 0 ecmpid 3 CAID: 098C ECM_PID: 1AC0 PROVID: 000000 2019/09/17 15:00:56 136CD244 c (dvbapi) Demuxer 0 ecmpid 4 CAID: 0648 ECM_PID: 1FC0 PROVID: 000000 2019/09/17 15:00:56 136CD244 c (dvbapi) Demuxer 0 ecmpid 5 CAID: 1860 ECM_PID: 1EC0 PROVID: 000000 2019/09/17 15:00:56 136CD244 c (dvbapi) Demuxer 0 ecmpid 6 CAID: 186A ECM_PID: 1DC0 PROVID: 000000 2019/09/17 15:00:56 136CD244 c (dvbapi) Demuxer 0 ecmpid 7 CAID: 0500 ECM_PID: 1DC1 PROVID: 051900 2019/09/17 15:00:56 136CD244 c (dvbapi) Demuxer 0 ecmpid 8 CAID: 098D ECM_PID: 18C0 PROVID: 000000 2019/09/17 15:00:56 136CD244 c (dvbapi) Demuxer 0 ecmpid 9 CAID: 186D ECM_PID: 1D92 PROVID: 000000 2019/09/17 15:00:56 136CD244 c (dvbapi) Demuxer 0 ecmpid 10 CAID: 06CB ECM_PID: 1BC1 PROVID: 000000 2019/09/17 15:00:56 136CD244 c (dvbapi) Demuxer 0 ecmpid 11 CAID: 1842 ECM_PID: 1CC1 PROVID: 000000 2019/09/17 15:00:56 136CD244 c (dvbapi) Demuxer 0 ecmpid 12 CAID: 4B64 ECM_PID: 1CC1 PROVID: 000000 2019/09/17 15:00:56 136CD244 c (dvbapi) Demuxer 0 found 13 ECMpids and 3 STREAMpids in caPMT 2019/09/17 15:00:56 136CD244 c (dvbapi) Demuxer 0 trying to descramble PID 0 CAID 1830 PROVID 000000 ECMPID 1CC0 ANY CHID PMTPID 0000 VPID 01FF 2019/09/17 15:00:56 2C124C1F p (reader) OSCAMREADER [cccam] connecting to OSCAMREADER.server.net:port 2019/09/17 15:01:01 136CD244 c (ecm) vdr (1830@000000): timeout (5001 ms) by OSCAMREADER - Comedy Central HD 2019/09/17 15:01:05 136CD244 c (ecm) vdr (1830@000000): found (344 ms) by OSCAMREADER - Comedy Central HD 2019/09/17 15:01:05 136CD244 c (ecm) vdr (1830@000000): found (4203 ms) by OSCAMREADER - Comedy Central HD 2019/09/17 15:01:20 136CD244 c (ecm) vdr (1830@000000): found (345 ms) by OSCAMREADER - Comedy Central HD 2019/09/17 15:01:29 136CD244 c (dvbapi) Demuxer 0 continue decoding of SRVID 5273 2019/09/17 15:01:29 136CD244 c (dvbapi) Demuxer 0 found 13 ECMpids and 3 STREAMpids in caPMT 2019/09/17 15:01:29 136CD244 c (dvbapi) Demuxer 1 ecmpid 0 CAID: 1830 ECM_PID: 1CFC PROVID: 000000 2019/09/17 15:01:29 136CD244 c (dvbapi) Demuxer 1 ecmpid 1 CAID: 1860 ECM_PID: 1EFC PROVID: 000000 2019/09/17 15:01:29 136CD244 c (dvbapi) Demuxer 1 ecmpid 2 CAID: 1843 ECM_PID: 19FC PROVID: 000000 2019/09/17 15:01:29 136CD244 c (dvbapi) Demuxer 1 ecmpid 3 CAID: 098C ECM_PID: 1AFC PROVID: 000000 2019/09/17 15:01:29 136CD244 c (dvbapi) Demuxer 1 ecmpid 4 CAID: 09C4 ECM_PID: 1BFC PROVID: 000000 2019/09/17 15:01:29 136CD244 c (dvbapi) Demuxer 1 ecmpid 5 CAID: 186A ECM_PID: 1DFC PROVID: 000000 2019/09/17 15:01:29 136CD244 c (dvbapi) Demuxer 1 ecmpid 6 CAID: 186D ECM_PID: 1DFD PROVID: 000000 2019/09/17 15:01:29 136CD244 c (dvbapi) Demuxer 1 ecmpid 7 CAID: 098D ECM_PID: 18FC PROVID: 000000 2019/09/17 15:01:29 136CD244 c (dvbapi) Demuxer 1 ecmpid 8 CAID: 0500 ECM_PID: 1FFC PROVID: 051900 2019/09/17 15:01:29 136CD244 c (dvbapi) Demuxer 1 ecmpid 9 CAID: 06CB ECM_PID: 1BFD PROVID: 000000 2019/09/17 15:01:29 136CD244 c (dvbapi) Demuxer 1 ecmpid 10 CAID: 1842 ECM_PID: 1CFD PROVID: 000000 2019/09/17 15:01:29 136CD244 c (dvbapi) Demuxer 1 ecmpid 11 CAID: 4B64 ECM_PID: 1CFD PROVID: 000000 2019/09/17 15:01:29 136CD244 c (dvbapi) Demuxer 1 found 12 ECMpids and 2 STREAMpids in caPMT 2019/09/17 15:01:29 136CD244 c (dvbapi) Demuxer 1 trying to descramble PID 0 CAID 1830 PROVID 000000 ECMPID 1CFC ANY CHID PMTPID 0000 VPID 02FF 2019/09/17 15:01:35 136CD244 c (ecm) vdr (1830@000000): found (337 ms) by OSCAMREADER - Comedy Central HD 2019/09/17 15:01:50 136CD244 c (ecm) vdr (1830@000000): found (344 ms) by OSCAMREADER - Comedy Central HD 2019/09/17 15:02:05 136CD244 c (ecm) vdr (1830@000000): found (339 ms) by OSCAMREADER - Comedy Central HD

MTD Info VDR (mtd.h)

Multiple Transponder Decryption (MTD) is the method of sending TS packets

from channels on different transponders to one single CAM for decryption. While decrypting several channels from the same transponder ("Multi Channel Decryption") is straightforward, because the PIDs are unique within one transponder, channels on different transponders might use the same PIDs for different streams.

Here's a summary of how MTD is implemented in VDR:

Identifying the relevant source code

The actual code that implements the MTD handling is located in the files mtd.h and mtd.c. There are also a few places in ci.[hc], device.c and menu.c where things need to be handled differently for MTD. All functions and variables that have to do with MTD have the three letters "mtd" (upper- and/or lowercase) in their name, so that these code lines can be easily identified if necessary.

What a plugin implementing a cCiAdapter/cCamSlot needs to do

If an implementation of cCiAdapter/cCamSlot supports MTD, it needs to fulfill the following requirements:

Thank you very much!

manio commented 4 years ago

It's hard thing for me as first - I don't have such hardware and secondly - a free time for develop this feature.... :( Nevertheless I am open for any submission which are tested and are enabling such a feature. I assume oscam also need to handle this MTD properly. No idea if it is doing so currently... I am leaving this open for reference...

ua0lnj commented 3 years ago

I have researched this question. MTD in the form made in vdr will not work with dvbapi plugin and oscam. The functionality of the MTD must be done in the Oscam itself. Vdr changes real pids and sid to unique ones in the case of working with MTD, but oscam only needs real pids and sid. Dvbapi plugin must transfer real pids to oscam, so it is impossible to make support for MTD at the dvbapi plugin level. This issue can be closed, and need made a topic on the oscam forum.

manio commented 3 years ago

Thank you for your research. Closing.