2011-09-22 3 views
1

Libav를 사용하는 Windows 플랫폼에서 DirectShow만큼 카메라 유형에서 프레임을 캡처 할 수있는 방법이 있습니까? DirectShow 필터를 사용하지 않고 카메라 출력을 캡쳐해야하고 내 응용 프로그램이 많은 카메라 장치 유형과 작동하도록해야합니다.Libav를 사용하여 Windows에서 카메라 장치를 캡처하는 방법은 무엇입니까?

저는 인터넷에서이 libav의 기능을 검색했으며 libav를 통해 특수한 입력 형식 "vfwcap"을 사용하여이를 수행 할 수 있음을 확인했습니다. 그런 뭔가 (코드 정확성에 대해 확실하지 않습니다 - 내가 쓴 자신에 의해) :

AVFormatParameters formatParams = NULL; 
AVInputFormat* pInfmt = NULL; 
pInFormatCtx* pInFormatCtx = NULL; 

av_register_all(); 

//formatParams.device = NULL; //this was probably deprecated and then removed 
formatParams.channel = 0; 
formatParams.standard = "ntsc"; //deprecated too but still available 
formatParams.width = 640; 
formatParams.height = 480; 
formatParams.time_base.num = 1000; 
formatParams.time_base.den = 30000; //so we want 30000/1000 = 30 frames per second 
formatParams.prealloced_context = 0; 


pInfmt = av_find_input_format("vfwcap"); 
if(!pInfmt) 
{ 
    fprintf(stderr,"Unknown input format\n"); 
    return -1; 
} 

// Open video file (formatParams can be NULL for autodetecting probably) 
if (av_open_input_file(&pInFormatCtx, 0, pInfmt, 0, formatParams) < 0) 
    return -1; // Couldn't open device 

/* Same as video4linux code*/ 

그래서 또 다른 질문은 다음과 같습니다 Libav에서 지원하는 얼마나 많은 장치? libav가 너무 적은 장치를 지원하기 때문에 윈도우에서 libav로 카메라 출력을 캡쳐하는 것에 관해서 제가 발견 한 것은 DirectShow를 사용하기위한 조언입니다. 어쩌면 상황이 이미 변경되었고 프로덕션 애플리케이션에서 사용할 수있는 충분한 장치를 지원합니까?

만약 이것이 가능하지 않다면 ... 글쎄, 내 질문에 쓸모가 없어지기를 바란다. 다른 소스 코드로 구성된이 코드는이 테마에 관심이있는 누군가를 도울 것이다. 전체 인터넷.

+0

관심있는 사람들을 위해 비디오 캡처 작업을 위해 "libvidcap"이라는 분리 된 플랫폼 라이브러리가있다. [sourceforge] (http://sourceforge.net/projects/libvidcap/)에서 볼 수 있습니다. –

답변

2

FFMPEG는 Windows에서 비디오를 캡처 할 수 없습니다. 일단 DirectShow 캡처를 사용하여 이것을 구현해야만한다.

+0

위에서 작성한 코드는 부분적으로 가능하다는 것을 증명합니다. 이 방법을 사용하여 얼마나 많은 장치가 작동하는지 알고 싶습니다. DircetShow는 한 응용 프로그램에서 libav뿐만 아니라 그것을 사용합니다. 그러나 Libav를 통해 가능하다면 DirectShow없이 할 수 있습니다. –

+0

TBH 전에이 방법을 본 적이 없습니다. 마치 기존의 'Video For Windows'접근 방식 인 것 같습니다. –

+1

이 맞는지 확인하십시오. 새로운 카메라 장치에서 캡처하기 위해 오래된 기술을 사용하는 것은 위험한 것처럼 보입니다. –

관련 문제