2009-04-27 4 views
3

웹캠에서 녹화하고 있습니다. 카메라가 PhotoBooth에서 멋지게 보입니다. 그러나 QTCaptureView를 사용하여 프로그램에서 미리 보거나 파일에 기록하면 매우 느립니다. 그 이유는 QuickTime이 최대 해상도 인 1600x1200을 제공하기 때문입니다. QTCaptureView와 내 레코딩 모두에 대해보다 합리적인 크기의 강제 파일을 만들 수 있습니까?QTCapture에서 해상도를 설정 하시겠습니까?

답변

7

described here으로 QTCaptureSession의 출력 내에서 픽셀 버퍼 속성을 설정하여 캡처중인 비디오의 해상도를 변경할 수 있습니다. 예를 들어 :

[[[myCaptureSession outputs] objectAtIndex:0] setPixelBufferAttributes: [NSDictionary dictionaryWithObjectsAndKeys: 
                   [NSNumber numberWithInt:480], kCVPixelBufferHeightKey, 
                   [NSNumber numberWithInt:640], kCVPixelBufferWidthKey, nil]]; 

은 캡처 세션의 첫 번째 출력 640 × 480으로 비디오 해상도를 설정합니다. 또한 카메라 설정 자체를 조정하여 해당 크기의 이미지 프레임을 반환하도록해야합니다 (카메라 하드웨어에서 지원하는 경우).

실시간 비디오 녹화를 수행하려면 h.264 대신 기본 MPEG4 인코딩을 사용하는 것이 좋습니다.

NSArray *outputConnections = [mCaptureMovieFileOutput connections]; 
QTCaptureConnection *connection; 
for (connection in outputConnections) 
{ 
    if ([[connection mediaType] isEqualToString:QTMediaTypeVideo]) 
      [mCaptureMovieFileOutput setCompressionOptions:[QTCompressionOptions compressionOptionsWithIdentifier:@"QTCompressionOptionsSD480SizeMPEG4Video"] forConnection:connection]; 
} 

H.264 인코딩 특히 퀵타임 구현베이스 MPEG4 인코딩보다 많은 CPU 파워를 사용한다 : 이것은 다음과 같은 코드를 사용하여 설정 될 수있다.

3

위에서 (setPixelBufferAttributes :) 해결책은 미리보기 크기를 올바르게 설정하지만 동영상 녹화가 시작되면 미리 설정 한 이미지가 원래 값 (내 MBP에서 1280 x 1024)으로 다시 설정됩니다.) 모든 압축 옵션.

동영상 녹화 중에 만 녹화가 완료되었지만 녹화가 완료되면 이후 setPixelBufferAttributes를 호출해도 아무런 효과가 없습니다.

실제 압축 된 동영상을 녹화 할 계획이 없다면 미리보기 이미지 크기를 변경할 수 있습니다.

이것은 10.5.8/9L30, MBP와 GeForce 8600M입니다. 압축을 제외한 모든 압축 옵션 또는 위에서 설명한대로 QTCompressionOptionsSD240SizeH264Video 나누기.

rdar : // 7447812

0

이 항목에 대한 자세한 정보를 추가하려면 :

은 직접 캡처 측의 정의에서 지정할 수 없습니다. 오히려 이것은 정의를 정의하는 캡처 세션의 결과입니다. 예 :

  • QtCaptureDecompressedVideoOutput에 캡처하는 경우이 개체에 정의를 지정해야합니다.
관련 문제