catalinii / minisatip

minisatip is an SATIP server for linux using local DVB-S2, DVB-C, DVB-T or ATSC cards
https://minisatip.org
324 stars 78 forks source link

Create a virtual SDT for DDCI adapters #1077

Closed Jalle19 closed 1 year ago

Jalle19 commented 1 year ago

https://github.com/catalinii/minisatip/issues/1068#issuecomment-1465290449

$ journalctl -u minisatip -f | grep 'mapped adapter' 
Mar 12 22:21:08 vladimir minisatip[80152]: [12/03 22:21:08.966 AD2]: mapped adapter 2 (2) pid 1 (1) to 1, pmt 91
Mar 12 22:21:08 vladimir minisatip[80152]: [12/03 22:21:08.966 AD2]: mapped adapter 2 (2) pid 17 (17) to 17, pmt 91
Mar 12 22:21:08 vladimir minisatip[80152]: [12/03 22:21:08.966 AD2]: mapped adapter 2 (2) pid 1480 (1480) to 1480, pmt 91
Mar 12 22:21:08 vladimir minisatip[80152]: [12/03 22:21:08.966 AD2]: mapped adapter 2 (2) pid 1399 (1399) to 1399, pmt 91
Mar 12 22:21:08 vladimir minisatip[80152]: [12/03 22:21:08.966 AD2]: mapped adapter 2 (2) pid 452 (452) to 452, pmt 91
Mar 12 22:21:08 vladimir minisatip[80152]: [12/03 22:21:08.966 AD2]: mapped adapter 2 (2) pid 551 (551) to 551, pmt 91
Mar 12 22:21:08 vladimir minisatip[80152]: [12/03 22:21:08.966 AD2]: mapped adapter 2 (2) pid 555 (555) to 555, pmt 91
Mar 12 22:21:09 vladimir minisatip[80152]: [12/03 22:21:09.026 AD2]: mapped adapter 2 (2) pid 48 (48) to 48, pmt 91
Mar 12 22:21:15 vladimir minisatip[80152]: [12/03 22:21:15.900 AD3]: mapped adapter 3 (3) pid 1 (1) to 2, pmt 158
Mar 12 22:21:15 vladimir minisatip[80152]: [12/03 22:21:15.900 AD3]: mapped adapter 3 (3) pid 17 (17) to 18, pmt 158
Mar 12 22:21:15 vladimir minisatip[80152]: [12/03 22:21:15.900 AD3]: mapped adapter 3 (3) pid 1452 (1452) to 1452, pmt 158
Mar 12 22:21:15 vladimir minisatip[80152]: [12/03 22:21:15.900 AD3]: mapped adapter 3 (3) pid 1399 (1399) to 1400, pmt 158
Mar 12 22:21:15 vladimir minisatip[80152]: [12/03 22:21:15.900 AD3]: mapped adapter 3 (3) pid 451 (451) to 451, pmt 158
Mar 12 22:21:15 vladimir minisatip[80152]: [12/03 22:21:15.900 AD3]: mapped adapter 3 (3) pid 553 (553) to 553, pmt 158
Mar 12 22:21:15 vladimir minisatip[80152]: [12/03 22:21:15.900 AD3]: mapped adapter 3 (3) pid 554 (554) to 554, pmt 158

Imagine the following scenario:

  1. A channel is started on a DDCI adapter. PID 17 gets mapped to PID 17, because the mapping table is empty.
  2. ddci_create_epg() writes a virtual EIT to PID 18
  3. A second channel is started on the same DDCI adapter. PID 17 gets mapped to PID 18, because PID 17 is already taken
  4. ddci_create_epg() writes a virtual EIT to PID 18

The end result is that PID 18 becomes a mix of an SDT and an EIT.

The best solution would be to stop mapping PID 17 and instead create a virtual SDT table, just like we do for PAT, PMT and EIT.

catalinii commented 1 year ago

That would be probably be best

catalinii commented 1 year ago

Your analysis is correct. The only question is why pid 17 is getting mapped twice because mapping pid 17 should happen just with the first PMT: https://github.com/catalinii/minisatip/blob/master/src/ddci.c#L425

But yeah, let's create the SDT too. I needed SDT mapped for my CAM which would not update without it

Jalle19 commented 1 year ago

https://github.com/Jalle19/minisatip/commit/fd97161657dae5d05e0be46f1f553b5609b45ad7

@catalinii I started implementing ddci_create_sdt() here but I'm stuck on the CRC check in the tests. Do you think you could help me out? I'm in a bit over my head here :D

catalinii commented 1 year ago

On position 0, it should be a 0. That should be followed by 0x42. See this: https://github.com/catalinii/minisatip/blob/master/src/ddci.c#L606

Jalle19 commented 1 year ago

Closed by #1084