Ubuntu 10.04 open-sasc-ng och newcamd
Hej,
Ger snart upp, men hoppas på lite hjälp från er innan jag går över till windows igen ... *s*
Har fått igång vdr-SASC-NG (följt denna guide : http://dolot.kipdola.com/wiki/Install_SASC-NG) och även kortservern (cardserver.i386) och allt verkar fungerar fint, när jag startar sasc så loggar den in fint på kortserver....
Men problemen uppstår när jag försöker att se på en kodad kanal (tex via mplayer)
Följande fel spottar sasc ur sig..
start: read pes returned: Resource temporarily unavailable
Aug 23 10:50:43.281 CHANNEL: start: read pes returned err: 11
Några ideer hur jag ska lösa detta ??
Jo, men jag var tvungen att koda...
Citat:
Ursprungligen postat av
jimmyohlin
Ok, ska ge det ett till försök i eftermiddag, kan ju ev vara min newcamd server som strular
Hej.
Jag höll på i våras och grejade en massa, och det slutade med att jag var tvungen att programmera om sasc-ng. Som jag begrep det så är det nån satellitspecifik status som sasc-ng väntar på, och därmed inte kommer igång. (Jag har glömt detaljerna och även om jag är programmerare vet jag inte hur dvb funkar alls...)
Jag fick det att fungera hur som helst.
Men inte hd-kanalerna, dvs viaccess 4.0. Dessutom var det lite instabilt, vilket fick mig att avbryta experimentet, eftersom WAF inte skulle gå att uppnå...
Kontentan av detta är att jag inte på rak arm kan leverera en patch, men om du är intresserad kan jag lägga några timmar. Dock känns det lite tröstlöst eftersom utvecklingen av sasc-ng verkar vara rätt död, koden var rätt sunkig, och jag vet inte hur om någon softcam klarar viaccess 4.0, som jag antar man måste fixa inom snar framtid.
Det verkar finnas flera versioner av sasc-ng. Vilken är fräschast, och finns det nån i världen som håller på med sasc-ng?
Ska jag göra ett ryck?
PATCH för dvbloopback/plugin_getsid.c för terrestial delivery
Här är en patch för VDR/sasc-ng så att get_sid inte snubblar på "terrestial" carriers, dvs boxer.
Det löser inga krypteringsfel såklart, men snabbar upp synkandet. Jag upplever att kanalbyte går bättre i alla fall.
Tala gärna om hur det går, så kan jag göra en ansats att få upp koden i repositoryt.
Kod:
diff -r 1cc3497be31c contrib/sasc-ng/dvbloopback/src/plugin_getsid.c
--- a/contrib/sasc-ng/dvbloopback/src/plugin_getsid.c Tue Apr 13 09:55:20 2010 +0800
+++ b/contrib/sasc-ng/dvbloopback/src/plugin_getsid.c Tue Sep 21 15:44:45 2010 +0200
@@ -189,7 +189,9 @@
last_sec, MAX_PAT_SECTIONS);
return 1;
}
+ dprintf0("read_pat: end = %0x, sec = %d, last_sec = %d\n", end, sec, last_sec);
if (pat->version != version || last_sec != pat->last_section) {
+ dprintf0("read_pat: pat->version: %d, version: %d, last_sec: %d, pat->last_section\n", pat->version, version, last_sec, pat->last_section);
pat->version = version;
pat->last_section = last_sec;
while(! list_empty(&pat->dmx_filter_ll)) {
@@ -232,6 +234,8 @@
dprintf2("found NIT at PID: %d", pid);
}
}
+ dprintf0("read_pat: ŕeturn 0;");
+
return 0;
}
/*
@@ -270,14 +274,22 @@
static int read_nit(unsigned char *buf, struct nit_data *nit, unsigned int size) {
int len, tsl_len, td_len, tag_len, network_desc_len;
int network_id, pos, tag;
+
+ if( size < 10 ) {
+ dprintf0(
+ "read_nit: to short buffer read (%d) < 10 bytes for header.\n",size);
+ return -1;
+ }
if (buf[0] != 0x40 && buf[0] != 0x41 && buf[0] != 0x72) {
dprintf0(
- "read_nit expected table 0x40 or 0x41 but got 0x%02x\n", buf[0]);
+ "read_nit: aborting! Expected table 0x40,0x41 or 0x72 but got 0x%02x\n", buf[0]);
return -1;
}
if (buf[0] != 0x40) {
+ dprintf0("read_nit: ignoring table 0x%02x. (not NIT)\n", buf[0]);
return 0;
}
+
len = ((buf[1] & 0x07) << 8) | buf[2];
network_id = (buf[3]<<8) | buf[4];
network_desc_len = ((buf[8] & 0x0f) << 8) | buf[9];
@@ -289,6 +301,7 @@
tag = buf[pos+6];
tag_len = buf[pos+7];
if(tag == 0x43 && tag_len >= 11) { //satellite descriptor
+ dprintf0("read_nit: satellite delivery");
nit->type = tag;
nit->frequency = (buf[pos+8] << 24) | (buf[pos+9]<<16) | (buf[pos+10]<<8) | buf[pos+11];
nit->orbit = (buf[pos+12] << 8) | buf[pos+13];
@@ -300,6 +313,7 @@
printf("Orbit: %08x%c\n", nit->orbit, nit->is_east ? 'E' : 'W');
return 1;
} else if(tag == 0x44 && tag_len >= 11) { //cable descriptor
+ dprintf0("read_nit: cable delivery");
nit->type = tag;
nit->frequency = (buf[pos+8] << 24) | (buf[pos+9]<<16) | (buf[pos+10]<<8) | buf[pos+11];
nit->modulation = buf[pos+14];
@@ -307,7 +321,13 @@
nit->fec = buf[pos+18];
printf("Cable: %08x\n", nit->frequency);
return 1;
+ } else if(tag == 0x5A && tag_len >= 11) { //terrestial_delivery
+ dprintf0("read_nit: terrestial delivery");
+ nit->type = tag;
+ nit->frequency = (buf[pos+8] << 24) | (buf[pos+9]<<16) | (buf[pos+10]<<8) | buf[pos+11];
+ return 1;
}
+
pos += tag_len+2;
td_len -= tag_len+2;
}