Linux操作系统自带的DVB API是不支持CA_SET_PID指令的,也就无法支持音视频使用不同CW的情况。不过VDR在操作系统上打了补丁,提供了对CA_SET_PID指令的处理,所以VDR上应该不受数码反制的影响,至少使用SCPlugin的是不会受影响的。
以下是SCPlugin中的两段代码:
void cCam::SetCWIndex(int pid, int index)
{
if(index<MAX_CW_IDX) {
ca_pid_t ca_pid;
ca_pid.pid=pid;
ca_pid.index=index;
PRINTF(L_CORE_PIDS,"%d: descrambling pid %04x on index %x",cardNum,pid,index);
if(!device->SetCaPid(&ca_pid))
if(index>0) {
PRINTF(L_GEN_ERROR,"CA_SET_PID failed (%s). Expect a black screen/bad recording. Do you use the patched DVB driver?",strerror(errno));
PRINTF(L_GEN_WARN,"Adjusting 'Concurrent FF streams' to NO");
ScSetup.ConcurrentFF=0;
ScSetup.Store(true);
}
}
}
void cEcmHandler::SetPrg(cPrg *prg)
{
...
for(cPrgPid *npid=prg->pids.First(); npid; npid=prg->pids.Next(npid)) {
if(!npid->Proc()) {
cPrgPid *pid=new cPrgPid(npid->Type(),npid->Pid());
pids.Add(pid);
cam->SetCWIndex(pid->Pid(),cwIndex);
}
}
...
}
扫码下方或搜索关注公众号“卫星参数网”,独家内幕新闻!