2017-10-19 8 views
0

frontend0 매개 변수 살고 있고 참조하지 않습니다는 FFmpeg은이 같은 DVB 매개 변수를 잘 살고 있어요

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에서이 살고 있고 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.after를 사용했습니다. 리소스가 사용 중입니다 –

답변

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는 Hz가 아닌 MHz입니다.

2 단계 : 프론트 엔드가 계속 열려있는 동안 (!), demux 장치를 엽니 다 (ie). "/ dev/dvb/adapter0/demux0"또는 "/ dev/dvb/adapter0/dvr0"을 입력하고 해당 장치에 PID 필터를 설정하십시오. 두 장치 중 하나를 선택하기 전에 차이점에 관한 문서를 읽으십시오.

3 단계 : dvb 프론트 엔드에서 읽지 마시기 바랍니다. 프론트 엔드가 아직 열려있는 동안 demux에서 읽습니다. 프런트 엔드는 튜닝 명령 또는 응답 신호 통계를 수신하는 데만 사용되지만 MPEG TS 데이터는 demux에서 수신됩니다. 프론트 엔드가 닫히 자마자 더 이상 demux에서 아무 것도 읽을 수 없으므로 계속 열어 두십시오. 따라서 3.1 open demux 3.2 수신 할 데이터 (PID)를 정의하려면 DMX_SET_FILTER ioctl 또는 DMX_SET_PES_FILTER ioctl을 사용하십시오. 3.3 demux 장치에서 읽고 ffmpeg로 보내기

이 모든 것이 잘 문서화되어 있습니다. 문서를 읽어야 할 수도 있습니다.