2017-10-19 34 views
0

Je setted paramètres DVB comme ceci: AlorsFFmpeg ne voit pas setted paramètres frontend0

static struct dtv_property props[] = { 
{ .cmd = DTV_DELIVERY_SYSTEM, .u.data = SYS_DVBT2 }, 
{ .cmd = DTV_FREQUENCY,  .u.data = 474000000 }, 
{ .cmd = DTV_MODULATION,  .u.data = QAM_64 }, 
{ .cmd = DTV_INVERSION,  .u.data = INVERSION_AUTO }, 
{ .cmd = DTV_INNER_FEC,  .u.data = FEC_AUTO }, 
{ .cmd = DTV_TUNE ,   .u.data = FE_SET_FRONTEND}, 
{ .cmd = DTV_BANDWIDTH_HZ , .u.data = 8 }, 
}; 

static struct dtv_properties dtv_prop = { 
.num = 7, .props = props 
}; 

Je suis en train d'utiliser cette utilisation setted DVB dans FFmpeg mais il obtient FFmpeg error.Why ne voit pas Frontend0 ?

if(avformat_open_input(&pFormatCtx, "/dev/dvb/adapter0/frontend0", NULL, NULL)!=0) 
{ 
    printf("error"); 
    return -1; 
} 
+0

Je suppose que vous avez installé des applications DVB? Vous devez créer un fichier de configuration de canal avant de pouvoir capturer un flux. zappez le frontal, puis utilisez ffmpeg. – WLGfx

+0

J'ai utilisé w_scan et tzap.après avoir exécuté cette commande avformat_open_input (& pFormatCtx, "/ dev/dvb/adaptateur0/frontend0", NULL, NULL) mais il obtient l'erreur –

+0

dans ffmpeg/dev/dvb/adapter0/dvr0: Device ou ressource occupée –

Répondre

0

votre source est erronée et incomplète; vous avez rempli un tableau de struct dtv_property, mais il n'est envoyé nulle part au frontend via ioctl.

Etape 1: Un quelque chose comme ioctl() ce manque (fd est int retourné par appel précédent pour ouvrir() sur le dispositif de frontend) pour effectuer le réglage réel:

if ((ioctl(fd, FE_SET_PROPERTY, &dtv_prop)) != 0) { 
     perror("FE_SET_PROPERTY failed"); 
     // do something on error here.. 
     } 

Et fixer votre tableau valeurs, la bande passante doit être définie avant DTV_TUNE, DTV_TUNE n'a aucun argument et est le dernier élément dans l'ordre. Aussi: DTV_BANDWIDTH_HZ est en Hz, pas en MHz. Étape 2: tandis que le frontend est toujours ouvert (!), Ouvrez le périphérique de demux, soit IE. "/ dev/dvb/adapter0/demux0" ou "/ dev/dvb/adapter0/dvr0" et définissez les filtres PID sur ce périphérique. Avant de choisir l'un ou l'autre appareil, lisez le document sur la différence. Étape 3: ne pas essayer de lire à partir d'un frontend dvb.

Lire à partir du demux alors que le frontend est toujours ouvert. Le frontal est uniquement utilisé pour recevoir les commandes de réglage ou les statistiques de signal de réponse, mais les données MPEG TS sont reçues du démux. Dès que le frontend est fermé, vous ne pouvez plus rien lire du démux, alors gardez-le ouvert. Par conséquent, 3.1 démultiplexage ouvert 3.2 utiliser iDOC_SET_FILTER DMX ou DMX_SET_PES_FILTER ioctl pour définir les données (PID) que vous voulez recevoir. 3.3 lire à partir du dispositif de démultiplexage et envoyer à ffmpeg

Tout cela est bien documenté, peut-être que vous devriez juste lire les documents.