2017-10-19 11 views
0

を見ていない私はこのようなsetted DVBパラメータ午前:FFmpegのはsetted 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 
}; 

だから、私はFFmpegの中に、このsetted DVBの使用を使用しようとしていますが、それはerror.WhyにFFmpegはFrontend0は表示されません取得します?

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

私はdvb-appsがインストールされていると仮定していますか?ストリームを取得する前に、チャンネル設定ファイルを作成する必要があります。フロントエンドを圧縮し、ffmpegを使用します。 – WLGfx

+0

私はこのコマンドをavformat_open_input(&pFormatCtx、 "/ dev/dvb/adapter0/frontend0"、NULL、NULL)コマンドを実行したが、ffmpeg/dev/dvb/adapter0/dvr0: –

+0

にエラーが発生すると、w_scanとtzapを使いました。リソースが忙しい –

答えて

0

ソースが間違っていて不完全です。 struct dtv_propertyの配列を埋めましたが、ioctl経由でフロントエンドに送ることはありません。

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

そして、あなたの配列を修正:

ステップ1:実際のチューニングを行うことのioctl()このような何かが欠落している(フロントエンドデバイスに()を開くために、以前の呼び出しによって返されたfdはintです)値は、の前に設定する必要があります。 DTV_TUNE、DTV_TUNEはまったくargを持たず、最後の項目です。また、DTV_BANDWIDTH_HZはMHzではなくHzです。

ステップ2:フロントエンドはまだ開いたままですが(!)、demuxデバイスを開きます。 "/ dev/dvb/adapter0/demux0"または "/ dev/dvb/adapter0/dvr0"と入力し、そのデバイスにPIDフィルタを設定します。いずれかのデバイスを選択する前に、その違いについてのドキュメントをお読みください。

ステップ3:dvbフロントエンドからの読み取りを試みません。フロントエンドがまだ開いている間にdemuxから読み込みます。フロントエンドは、チューンコマンドまたは応答信号の統計情報を受信するためにのみ使用されますが、MPEG TSデータはdemuxから受信されます。フロントエンドが閉じられるとすぐに、demuxから何も読み込めないので、開いたままにしておきます。そのため、受信するデータ(PID)を定義するには、DMX_SET_FILTER ioctlまたはDMX_SET_PES_FILTER ioctlを使用します。 3.3 demuxデバイスから読み込んでffmpegに送信

これはすべて文書化されていますが、ドキュメントを読むだけでよいかもしれません。