пятница, 10 июля 2009 г.

саск нг + гетстрим (взято: http://forum.nag.ru/forum/index.php?showtopic=46414)

ubuntu 8,10 + 3x ss2 rev 2,8 + sasc-ng + getstream

Итак, после небольших плясок вокруг кода:

CODE
top — 00:37:53 up 5:29, 3 users, load average: 7,08, 7,25, 7,12
Tasks: 103 total, 4 running, 99 sleeping, 0 stopped, 0 zombie
Cpu0 : 42,5%us, 4,2%sy, 0,1%ni, 50,2%id, 0,1%wa, 1,8%hi, 1,1%si, 0,0%st
Cpu1 : 42,7%us, 4,8%sy, 0,1%ni, 49,7%id, 0,1%wa, 1,7%hi, 1,0%si, 0,0%st
Cpu2 : 42,8%us, 4,5%sy, 0,1%ni, 49,6%id, 0,1%wa, 1,8%hi, 1,1%si, 0,0%st
Cpu3 : 42,3%us, 4,7%sy, 0,1%ni, 50,1%id, 0,1%wa, 1,7%hi, 1,0%si, 0,0%st
Mem: 4138016k total, 679268k used, 3458748k free, 153160k buffers
Swap: 9068652k total, 0k used, 9068652k free, 153012k cached


Рецепт:

сначала обязательно пересобрать дрова v4linux с изменениями:

CODE
- v4l-dvb.OLD/linux/drivers/media/dvb/dvb-core/dvbdev.h 2009—04—04 13:48:34,000000000 +0400
+++ v4l-dvb/linux/drivers/media/dvb/dvb-core/dvbdev.h 2009—04—27 17:44:01,000000000 +0400
@@ -31,7 +31,7 @@

#define DVB_MAJOR 212

-#define DVB_MAX_ADAPTERS 8
+#define DVB_MAX_ADAPTERS 10

#define DVB_UNSET (-1)


потом пропатчить сам opensasc (я брал 77 ревизию):
CODE
diff —E —b —u —r —exclude-from diffexclude opensasc-ng.orig/open-sasc-ng/dvblb_plugins/plugin_ffdecsa.c opensasc-ng.new/open-sasc-ng/dvblb_plugins/plugin_ffdecsa.c
- opensasc-ng.orig/open-sasc-ng/dvblb_plugins/plugin_ffdecsa.c 2009—04—28 00:08:18,000000000 +0400
+++ opensasc-ng.new/open-sasc-ng/dvblb_plugins/plugin_ffdecsa.c 2009—04—27 19:31:00,000000000 +0400
@@ -15,8 +15,8 @@
#define DBG_NAME «CSA»
#include «debug.h» //This is required to happen AFTER PLUGIN_ID is defined

-#define FF_MAX_IDX 8
-#define FF_MAX_PID 8
+#define FF_MAX_IDX 16
+#define FF_MAX_PID 16

#define push_empty_queue(_item, _queue) { \
pthread_mutex_lock(&list_lock); \
diff —E —b —u —r —exclude-from diffexclude opensasc-ng.orig/open-sasc-ng/dvbloopback/module/dvbdev-2.6.v4l.h opensasc-ng.new/open-sasc-ng/dvbloopback/module/dvbdev-2.6.v4l.h
- opensasc-ng.orig/open-sasc-ng/dvbloopback/module/dvbdev-2.6.v4l.h 2009—04—28 00:08:17,000000000 +0400
+++ opensasc-ng.new/open-sasc-ng/dvbloopback/module/dvbdev-2.6.v4l.h 2009—04—27 16:35:47,000000000 +0400
@@ -31,7 +31,7 @@

#define DVB_MAJOR 212

-#define DVB_MAX_ADAPTERS 8
+#define DVB_MAX_ADAPTERS 10

#define DVB_UNSET (-1)

Only in opensasc-ng.new/open-sasc-ng/dvbloopback/module: dvbdevwrap.h
diff —E —b —u —r —exclude-from diffexclude opensasc-ng.orig/open-sasc-ng/dvbloopback/module/dvblb_internal.h opensasc-ng.new/open-sasc-ng/dvbloopback/module/dvblb_internal.h
- opensasc-ng.orig/open-sasc-ng/dvbloopback/module/dvblb_internal.h 2009—04—28 00:08:17,000000000 +0400
+++ opensasc-ng.new/open-sasc-ng/dvbloopback/module/dvblb_internal.h 2009—04—27 16:19:36,000000000 +0400
@@ -3,7 +3,7 @@
#include «dvbdev.h»
#include «dvbloopback.h»

-#define DVBLB_MAX_ADAPTERS 8
+#define DVBLB_MAX_ADAPTERS 10

struct dvblb;

diff —E —b —u —r —exclude-from diffexclude opensasc-ng.orig/open-sasc-ng/dvbloopback/src/forward.c opensasc-ng.new/open-sasc-ng/dvbloopback/src/forward.c
- opensasc-ng.orig/open-sasc-ng/dvbloopback/src/forward.c 2009—04—28 00:08:17,000000000 +0400
+++ opensasc-ng.new/open-sasc-ng/dvbloopback/src/forward.c 2009—04—27 19:41:37,000000000 +0400
@@ -203,7 +203,7 @@
dprintf(«Could not setup adapter link: %d != %d\n», real, tmp);
return 0;
}
- for(int i=0; i < 3; i++) {
+ for(int i=0; i < 4; i++) {
sprintf(str, "/proc/dvbloopback/adapter%d/%s», virt, dnames[link[i]]);
FH = fopen(str, «w»);
if(! FH)
@@ -265,12 +265,12 @@
int main(int argc, char *argv[])
{
unsigned long bufsize = 2000000;
- struct parser_adpt pc_all[8];
- struct common_data common[8];
+ struct parser_adpt pc_all[10];
+ struct common_data common[10];
struct list_head *ptr;
pthread_t msg_highpri_thread;
pthread_t socket_thread;
- int virt_adapt[8], real_adapt[8], adapter_cnt=0;
+ int virt_adapt[10], real_adapt[10], adapter_cnt=0;
unsigned long debug_port = 5456;
int longopt = 0;
int c, Option_Index = 0;
diff —E —b —u —r —exclude-from diffexclude opensasc-ng.orig/open-sasc-ng/Makefile opensasc-ng.new/open-sasc-ng/Makefile
- opensasc-ng.orig/open-sasc-ng/Makefile 2009—04—28 00:08:18,000000000 +0400
+++ opensasc-ng.new/open-sasc-ng/Makefile 2009—04—27 15:50:58,000000000 +0400
@@ -16,6 +16,7 @@
DVB_MOD_DIR = DVB_DIR=$(DVB_DIR)
endif

+DEFINES += -D__KERNEL_STRICT_NAMES
DEFINES += -DRELEASE_VERSION=\»$(VERSION)\»
INCLUDES += -Idvbloopback/module —I/lib/modules/$(shell uname —r)/build/include
LBDIR = dvbloopback/src
diff —E —b —u —r —exclude-from diffexclude opensasc-ng.orig/open-sasc-ng/sc/PLUGINS/src/sc-src/cam.c opensasc-ng.new/open-sasc-ng/sc/PLUGINS/src/sc-src/cam.c
- opensasc-ng.orig/open-sasc-ng/sc/PLUGINS/src/sc-src/cam.c 2009—04—28 00:08:17,000000000 +0400
+++ opensasc-ng.new/open-sasc-ng/sc/PLUGINS/src/sc-src/cam.c 2009—04—27 19:31:54,000000000 +0400
@@ -2264,7 +2264,7 @@
// - cDeCSA —-----

#define MAX_CSA_PIDS 8192
-#define MAX_CSA_IDX 16
+#define MAX_CSA_IDX 32

//#define DEBUG_CSA

diff —E —b —u —r —exclude-from diffexclude opensasc-ng.orig/open-sasc-ng/sc/PLUGINS/src/sc-src/systems/cardclient/newcamd.c opensasc-ng.new/open-sasc-ng/sc/PLUGINS/src/sc-src/systems/cardclient/newcamd.c
- opensasc-ng.orig/open-sasc-ng/sc/PLUGINS/src/sc-src/systems/cardclient/newcamd.c 2009—04—28 00:08:17,000000000 +0400
+++ opensasc-ng.new/open-sasc-ng/sc/PLUGINS/src/sc-src/systems/cardclient/newcamd.c 2009—04—27 15:50:58,000000000 +0400
@@ -32,7 +32,7 @@

#include <>

-#define CWS_NETMSGSIZE 240
+#define CWS_NETMSGSIZE 480

// - cTripleDes —----

diff —E —b —u —r —exclude-from diffexclude opensasc-ng.orig/open-sasc-ng/sc/PLUGINS/src/sc-src/systems/sc-irdeto/sc-irdeto.c opensasc-ng.new/open-sasc-ng/sc/PLUGINS/src/sc-src/systems/sc-irdeto/sc-irdeto.c
- opensasc-ng.orig/open-sasc-ng/sc/PLUGINS/src/sc-src/systems/sc-irdeto/sc-irdeto.c 2009—04—28 00:08:17,000000000 +0400
+++ opensasc-ng.new/open-sasc-ng/sc/PLUGINS/src/sc-src/systems/sc-irdeto/sc-irdeto.c 2009—04—27 19:32:20,000000000 +0400
@@ -37,7 +37,7 @@
#define SC_NAME «Irdeto»
#define SC_ID MAKE_SC_ID('I','r','d','t')

-#define L_SC 8
+#define L_SC 16
#define L_SC_ALL LALL(L_SC_LASTDEF)

static const struct LogModule lm_sc = {


после этого обязательно запускать отедльный sasc-ng для каждой пары адаптеров и отдельный getstream для каждого адаптера. (иначе буферов у них не хватит)

если чаще через 1 раз в сек идет запрос ECM то ответы NOT OK и sasc-ng не получает верный ключ. Тут у меня irdeto 2 карта — она тормозная сама по себе.
Есть такое. Еще забавная фишка…
Вставил в код newcamd.c строчку cCondWait::SleepMs(200);

Код
bool cCardClientNewCamd::ProcessECM(const cEcmInfo *ecm, const unsigned char *data, unsigned char *cw)
{
cMutexLock lock(this);
cCondWait::SleepMs(200);


Упала загрузка на сервер… было 80 процентов загружено, стало 50.
Экспериментирую с задержкой дальше) ставить значение 1000 не советую… lagged cw вылезает)

Комментариев нет:

Отправить комментарий