Giter Club home page Giter Club logo

Comments (9)

Rayn0r avatar Rayn0r commented on June 11, 2024

I tried to find my way through the code and got stuck in several places.
Still I managed to add some syslog to the code to see what is going on with the constant PID changes.
I added the lines error("addpids: %s", *addPidsM.ListPids()); and error("delpids: %s", *delPidsM.ListPids()); here and here to start figuring out what is happening.

I then switched to this channel:
BBC World News Europe HD;SES ASTRA:11229:VC23M5O20P0S1:S19.2E:22000:2091=27:0;2092=@106:0:0:5001:1:1002:0
with only one device configured for the satip plugin.
I waited 10 minutes after switching to the channel and before I had the the last 5 minutes of logs written to a file via:

journalctl -u vdr.service --since "5 minutes ago"> /tmp/vdr-5m.log

Looking into the file and counting the lines containing addpids: and delpids: I got this:

awk '{ print substr($0, index($0,$7)) }' /tmp/vdr-5m.log|grep SATIP-ERROR|grep pids:|sort|uniq -c
     81 SATIP-ERROR: addpids: 212
     82 SATIP-ERROR: addpids: 3100
     81 SATIP-ERROR: addpids: 5071
     81 SATIP-ERROR: addpids: 96
     81 SATIP-ERROR: addpids: 97
     81 SATIP-ERROR: delpids: 212
     82 SATIP-ERROR: delpids: 3100
     81 SATIP-ERROR: delpids: 5071
     81 SATIP-ERROR: delpids: 96
     81 SATIP-ERROR: delpids: 97

In those 5 minutes, 406 times non-existing, PIDS were added and removed again(812 total). This causes a PID change being sent to the box every 0.37 seconds on average.
Where do those PID numbers come from? None of them seem to exist on this transponder.

Any help is greatly appreciated.

from vdr-plugin-satip.

Rayn0r avatar Rayn0r commented on June 11, 2024

I managed to find above mystery numbers:
Enabling debug output in pat.c of vdr itself, delivered this in the log:

Mai 23 18:34:01 server vdr[29960]: [29978] PAT 211229 -1 -> 7
Mai 23 18:34:01 server vdr[29960]: [29978]     PMT pid  0   212  SID  5001
Mai 23 18:34:01 server vdr[29960]: [29978] sid = 5001 pmtIndex = 0
Mai 23 18:34:01 server vdr[29960]: [29978]     PMT pid  1    96  SID  5010
Mai 23 18:34:01 server vdr[29960]: [29978]     PMT pid  2    97  SID  5011
Mai 23 18:34:01 server vdr[29960]: [29978]     PMT pid  3  5071  SID  5021
Mai 23 18:34:01 server vdr[29960]: [29978]     PMT pid  4  3100  SID  5031

Now I "only" need to figure out if/why/where this got mixed up.

from vdr-plugin-satip.

rofafor avatar rofafor commented on June 11, 2024

VDR is autodetecting all the pids found in the stream and scanning them to find out new channels, transponders, epg data, etc. You can disable most of these by disabling required section filters in the plugin's setup menu, but this is how the VDR works and I don't recommend it unless some transponder is providing invalid data.

Pid updates have been limited to 250ms: https://github.com/rofafor/vdr-plugin-satip/blob/master/tuner.h#L87

from vdr-plugin-satip.

Rayn0r avatar Rayn0r commented on June 11, 2024

If I am not completely mistaken, then the SatIP-box does not know what to do with those IDs(212,96,97,507 & 3100). And how could it do something when they are deleted right after adding them?
Upon tuning to a new channel the vdr-plugin-satip requests a TS via SETUP command. This SETUP contains the IDs from the channels.conf. This should be everything the SatIP-box needs to know, in order to send the correct stream to VDR. If the stream-IDs change, then this must be communicated to the SatIP Box in order to be able to receive it. I believe this is the reason the addpids and delpids parameter exist. But the stream's IDs do not change here, they remain the same.

What happens here is different. As soon as VDR starts receiving the requested stream, it starts decoding the PMT. Then the vdr-plugin-satip plugin starts to send those decoded IDs to the SatIP Box via addpids and delpids (continuesly). If I understood things correctly then those IDs from the PMT must not be used here. (I'm confused by the naming here. There are SIDs and PIDs. I don't really know which is which. According to the debug log from pat.c, the SIDs are the values from the channels.conf, where the "mystery"-IDs are the PIDs.)
What also caught my attention, is the fact that the addition/deletion of above PIDs appears to correlate with each call to
bool cPatFilter::PmtVersionChanged(int PmtPid, int Sid, int Version, bool SetNewVersion) in VDR's pat.c.

Something seems odd here and I'd like to figure out where these IDs come from and how to avoid adding and deleting them over and over again. But my C-knowledge is weak, and so is my understanding of VDR's internals.

My Google-foo doesn't seem to be strong enough, so any help is greatly appreciated.

from vdr-plugin-satip.

rofafor avatar rofafor commented on June 11, 2024

Your channels.conf contains a snapshot of pids and stream related ids. Pids are dynamic and they might change even during an event, e.g. subtitling pids are usually such ones. Now, VDR is inspecting all the time the stream detecting any changes in it and updating channels according to them - these add/del pids is business as usual. Take a look at the cPatFilter::SwitchToNextPmtPid() in VDR's pat.c. You need to remember that you're tuning into transponder containing usually multiple channels instead of one you're looking at on your monitor.

from vdr-plugin-satip.

rofafor avatar rofafor commented on June 11, 2024

Disabling all the section filters in plugin's setup menu should stop the add/delpids looping as the core VDR shouldn't have nothing to parse anymore. Make sure to keep your channels.conf up to date manually afterwards.

from vdr-plugin-satip.

Rayn0r avatar Rayn0r commented on June 11, 2024

First of all thank you for taking the time to guide me trough this.

I'm not eager to disable the section filters. I'd like to know where the IDs come from and how to not send them to the box.
Please take a look at the pat.c debug above. It contains 5 SIDs. Those are the service-IDs for all channels on this transponder.
SID:
5001 == BBC World News Europe HD
5010 == INSIGHT TV HD
5011 == INSIGHT TV HD INT
5021 == NHK WORLD-JPN
5031 == Al Jazeera English HD

The PIDs that are constantly added and deleted are the IDs two columns before SIDs. The column containing: 212, 96, 97, 507, 3100.
I'm quite certain that they are not related to the IDs that are ment to be sent in the SETUP- or PLAY-request to the SatIP box.

What we need to send to the box (to receive "BBC World News Europe HD") are the video, audio and teletext PIDs for stream ID 5001 and transponder ID 1002. The rest must not be sent to the SatIP box.

from vdr-plugin-satip.

rofafor avatar rofafor commented on June 11, 2024

The plugin just implements VDR's SetPid() interface. If VDR asks for pid 5071, the plugin delivers it back to VDR :
https://github.com/rofafor/vdr-plugin-satip/blob/master/device.h#L92
http://git.tvdr.de/?p=vdr.git;a=blob;f=device.h;h=63eef603b17b070ba8cc538ca6e8ffb19057a3e6;hb=c40fb4b4aa1f594fa94d89673d0a537bac3ec91d#l414

Now , take a look at your logs of the following altering pids (source: https://www.satindex.de/frequenz/11229/):

  • 212, that's the PMT of SID 5001
  • 96, that's the PMT pid of SID 5010
  • 97, that's the PMT pid of SID 5011
  • 5071, that's the PMT pid of SID 5021
  • 3100, that's the PMT pid of SID 5031

This looks totally normal to me as VDR is just scanning through PMT pids as it should.

from vdr-plugin-satip.

Rayn0r avatar Rayn0r commented on June 11, 2024

The issue seems to be in VDR itself.
I got in touch with VDR's maintainer. Uncommenting 2 lines in pat.c (as a hot fix) eliminates the problem of PIDs popping in and out. But it needs some more looking into.

from vdr-plugin-satip.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.