Hello Today I'm wondering about the SetId from cChannels.h As I know, I can specify a channel only by NID, TID and SID
I know vdr don't use the way, but is there an way to switch to a channel only by this values?
I have tried this code: cChannel* channel = new cChannel(); channel->SetId(8468,12801,16406); cDevice::ActualDevice()->SwitchChannel(channel,true);
If I execute this code, vdr will show me only the last still Pic of the old channel.
The values are from my channels.conf created with w_scan
Name http://www.vdr-wiki.de/wiki/index.php/Syntax_der_channels.conf#Name Frequenz http://www.vdr-wiki.de/wiki/index.php/Syntax_der_channels.conf#Frequenz Parameter http://www.vdr-wiki.de/wiki/index.php/Syntax_der_channels.conf#Parameter Quelle http://www.vdr-wiki.de/wiki/index.php/Syntax_der_channels.conf#Quelle_-_Source SRate http://www.vdr-wiki.de/wiki/index.php/Syntax_der_channels.conf#SRate_-_Symbolrate VPID http://www.vdr-wiki.de/wiki/index.php/Syntax_der_channels.conf#VPID APID http://www.vdr-wiki.de/wiki/index.php/Syntax_der_channels.conf#APID TPID http://www.vdr-wiki.de/wiki/index.php/Syntax_der_channels.conf#TPID CA http://www.vdr-wiki.de/wiki/index.php/Syntax_der_channels.conf#CA_-_Conditional_access SID http://www.vdr-wiki.de/wiki/index.php/Syntax_der_channels.conf#SID NID http://www.vdr-wiki.de/wiki/index.php/Syntax_der_channels.conf#NID TID http://www.vdr-wiki.de/wiki/index.php/Syntax_der_channels.conf#TID RID http://www.vdr-wiki.de/wiki/index.php/Syntax_der_channels.conf#RID RTL2:578000:I0C23D12M16B8T8G4Y0:T:27500:353:354:359:0:16406:8468:12801:0
If I don't find a better way, I will parse my channels.conf for the SID,NID and TID If I found the right line, then I can create a cChannel with cChannel-Parse(the found line);
I don't like the alternative way. Can anybody tell me a better way?
greetings Patrick
//damn copy&past.... new version
Hello Today I'm wondering about the SetId from cChannels.h As I know, I can specify a channel only by NID, TID and SID
I know vdr don't use the way, but is there an way to switch to a channel only by this values?
I have tried this code: cChannel* channel = new cChannel(); channel->SetId(8468,12801,16406); cDevice::ActualDevice()->SwitchChannel(channel,true);
If I execute this code, vdr will show me only the last still Pic of the old channel.
The values are from my channels.conf created with w_scan
Name Frequenz Parameter Quelle SRate VPID APID TPID CA SID NID TID RID RTL2:578000:I0C23D12M16B8T8G4Y0:T:27500:353:354:359:0:16406:8468:12801:0
If I don't find a better way, I will parse my channels.conf for the SID,NID and TID If I found the right line, then I can create a cChannel with cChannel-Parse(the found line);
I don't like the alternative way. Can anybody tell me a better way?
greetings Patrick
Now I can switch only be define Nid, Tid and Sid. This is my provisional Version which only works if I make a channelsscan which takes the Nid, Tid and Sid. Im not very happy with this solution but it works for me.
Maybe somebody make a better version.
This is my provisional Version:
bool ctuner::changeService(int originalNetworkId, int transportStreamId, int serviceId){ char buffer[MAXPARSEBUFFER]; if (getLineByIDs(originalNetworkId,transportStreamId,serviceId,buffer)){ dsyslog("Can't find originalNetworkId=%d, transportStreamId=%d and serviceId=%d in Channels.conf",originalNetworkId,transportStreamId,serviceId); return false; } cChannel* channel = new cChannel(); if (!channel->Parse(buffer)){ dsyslog("can't parse channel from buffer"); return false; }
cChannel *mChannel = Channels.GetByServiceID(channel->Source(),channel->Transponder(),channel->Sid()); delete channel; if (!mChannel){ //should never be reached esyslog("can't find channel from channels.conf in channelslist"); return false; }
if (!cDevice::PrimaryDevice()->SwitchChannel(mChannel,true)){ dsyslog("can't switch to channel"); return false; }
return true; }
bool getLineByIDs(int originalNetworkId, int transportStreamId, int serviceId, char* resultbuffer){
char *FileName = "/video/channels.conf";//TODO "AddDirectory(ConfigDirectory, "channels.conf"); bool allowComments = false; if (FileName && access(FileName, F_OK) == 0) { isyslog("loading %s", FileName); FILE *f = fopen(FileName, "r"); if (f) { char buffer[MAXPARSEBUFFER]; while (fgets(buffer, sizeof(buffer), f) > 0) { if (allowComments) { char *p = strchr(buffer, '#'); if (p) *p = 0; } stripspace(buffer); if (!isempty(buffer)) { int tmp, sid, nid, tid; int fields = sscanf(buffer, "%*[^:]:%d :%*[^:]:%*[^:] :%d :%*[^:]:%*[^:]:%d :%*[^:]:%d :%d :%d :%d ", &tmp, &tmp, &tmp, &sid, &nid, &tid, &tmp); if (fields == 7 && originalNetworkId==nid && transportStreamId==tid && serviceId == sid){ memcpy(resultbuffer, buffer, MAXPARSEBUFFER); fclose(f); return true; } } } fclose(f); } else { LOG_ERROR_STR(FileName); return false; } } return false; }
Patrick Fischer schrieb:
//damn copy&past.... new version
Hello Today I'm wondering about the SetId from cChannels.h As I know, I can specify a channel only by NID, TID and SID
I know vdr don't use the way, but is there an way to switch to a channel only by this values?
I have tried this code: cChannel* channel = new cChannel(); channel->SetId(8468,12801,16406); cDevice::ActualDevice()->SwitchChannel(channel,true);
If I execute this code, vdr will show me only the last still Pic of the old channel.
The values are from my channels.conf created with w_scan
Name Frequenz Parameter Quelle SRate VPID APID TPID CA SID NID TID RID RTL2:578000:I0C23D12M16B8T8G4Y0:T:27500:353:354:359:0:16406:8468:12801:0
If I don't find a better way, I will parse my channels.conf for the SID,NID and TID If I found the right line, then I can create a cChannel with cChannel-Parse(the found line);
I don't like the alternative way. Can anybody tell me a better way?
greetings Patrick
vdr mailing list vdr@linuxtv.org http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr