catalinii / minisatip

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

RFE: PAT rewrite removes unused programs based on pids list #147

Closed lars18th closed 9 years ago

lars18th commented 9 years ago

Hi Catalin,

Based on the function "updated PMT version" with CA changes implemented in recent versions (and commeted on #103) I suggest this idea:

Why this? If a program is doing a "scanning" process over the TS using this "filtering" mode, then it only shows one (or more) programs in the stream, and not the full programs included in the original transponder.

What you think about this improvement?

catalinii commented 9 years ago

I am not sure it is a wise decision to alter the PMT table for a specific channel more than removing the CA descriptors. Even that I am not sure how usefull it is, but removing active pids from PMT means removing subtitles, maybe audio channels....

I think every PID from the PMT has it's own purpose and without really a strong reason I think we should not fiddle with it.

Thanks

lars18th commented 9 years ago

Hi Catalin,

I explain more (I feel easy to understand, and easy to implement):

Here an example:

This is good for any "client" software that "scan" the received TS, as it only shows one FTA channel. But all other info (EIT, PMT, etc.) is keeped in the TS. For example, you can check with VLC or any other "simple" MPEG-TS video player.

You think it's easy to implement? Thank you!

catalinii commented 9 years ago

Hi,

I am not sure I understand the utility for the mpeg-ts to see just that channel in the PAT. Because you can simply play the stream by specifying the VPID and APID.

Or why is it a problem when VLC sees all the channels when you already specified the VPID/APID for a channel.

Thanks

rofafor commented 9 years ago

If you're going to implement this, please, remember that one session may contain multiple channels at once (i.e. vdr-satip). In order to rip off unnecessary pids, you'd really need DVB triplets of active channels and the satip spec doesn't provide that kind of information directly.

lars18th commented 9 years ago

@rofafor

Or the developer can implement the parameter "-tt" that not only cleans CA data of the "current" channel, but for ALL channels inside the transponder!

I feel is better to go as simple as posible. Convert all encrypted channels to FTA is the most simple solution, you agree?

catalinii commented 9 years ago

Lars,

the option -t cleans the PMT from CA information, is that not working for you ?

Minisatip generally will always have for a encrypted pid the list of PMTs that contain that channel.

Thanks

lars18th commented 9 years ago

@catalinii

the option -t cleans the PMT from CA information, is that not working for you ?

Yes, but only for the "selected" channel (the one corresponding to pids in the list). And, yes, it works!

But, I suggest to add "-tt" for clean ALL PMTs in the TS. So, if you set the pid list to "all", or include ANY other PMT table in the pid list, then you clean ALL streamed PMTs. This is targeting the scanning process of clients.

You agree?

lars18th commented 9 years ago

@catalinii

But my original suggestion is: "Clean" the PAT table (not the PMT tables) for leave only the "selected" channel and remove others.

Remember that the correspondence is: 1 PAT table with pids of all PMT tables. Then if you "clean" the PAT table, other programs are "removed" (=not listed).

This is for targeting the scanning process of clients when the pid list is the list of pids of a program... then the TS shows only one program in the PAT table.

You agree?

catalinii commented 9 years ago

Well my understanding is this:

1) you request pid 1000, 1001 which are part of pmt pid 100. 2) In the pat, there are pmt pids 100,200,300,400,500 3) You ask me to remove pmt pid 200,300,400,500 from the PAT while you request pid 1000, 1001 ? Right ? 4) What happens if somebody else requests pids 2000, 2001 from pmt pid 200, should I add pmt pid 200 back in the PAT ? 5) What happens if you request a new pid, 3000, 30001 and remove 1000, 10001 ? What if you don't remove them? 6) What if you want to have 2 - 6 doing the same on 1 TP and 1 dvb card ?

Thanks

lars18th commented 9 years ago

@catalinii

You're right, until 3 is my suggestion... However, now I noted the "interference" with more than one user requesting the same TP.

To answer to question 4, please, try to answer this: When a new client request pids 2000,2001 you will send the SAME TS to both clients? I feel that client 1 receives only pids 1000,10001, and user 2 receives only pids 2000,2001. If this is true, then the solution is simple: client 1 receives PAT with only PMT 100, and client 2 receives another modified PAT with only PMT 200. Yes, the solution is process the PAT table "by client", not by TP.

Related to question 5, when a pid changing is done... I feel this is a very special case. My suggestion: always use the current pidlist, then if the list is 3000,3001,1000,1001 (because you don't removed the pids of program 100) then the processed PAT will include PMTs 100,300. A more complex solution not will be better.

As a resume: filter PAT table based on current user. You will consider this in the future, please?

catalinii commented 9 years ago

Hi Lars,

From my perspective this is alot of work to get it supported and as I said I am not sure I understand the utility of it.

Thanks

lars18th commented 9 years ago

Hi Cantalin,

Then, no problem. However, I hope in the future we can return to discuss about this (with examples about the utility of it).

Regards!

catalinii commented 9 years ago

I mean when you have examples that to justify the work involved let me know.

meanwhile I will close this.

Thanks

lars18th commented 9 years ago

I mean when you have examples that to justify the work involved let me know.

I'll do. Not now, because there are some other priorities! ;-) Thank you!