5

AVCaptureSession을 사용하여 비디오를 녹화 중입니다. AVCaptureSessionPreset640x480입니다. 나는 비 표준 크기 (300 x 300)에서 AVCaptureVideoPreviewLayer을 사용하고 있는데 중력은 레코딩하는 동안 애스펙트 채우기로 설정되어 있습니다. 다음과 같이 설정했습니다.미리보기 레이어와 일치하는 크기로 AVCaptureSession 비디오 내보내기

self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession]; 
_previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
_previewLayer.frame = _previewView.bounds; // 300 x 300 
[_previewView.layer addSublayer:_previewLayer]; 

동영상을 녹화 한 후 퀵타임 형식으로 파일에 기록하고 싶습니다. 재생하는 동안 300 x 300 비표준 크기 레이어에서 다시 한 번 동영상을 재생합니다. 이 비디오는 궁극적으로 네트워크 연결을 통해 전송되기 때문에 전체 640x480 비디오를 유지하는 것은 낭비입니다.

내 300x300 미리보기 레이어와 일치하도록 비디오를 내보내려면 가장 좋은 방법은 무엇입니까? 나는 AVFoundation의 멍청한 놈입니다. 그래서 내가 잘못 알고 있다면, 알려주세요. 디스크에 내 보낸 비디오와 일치하도록 녹화하는 동안 미리보기 레이어에 표시된 녹화 된 비디오를 원할뿐입니다.

+0

나는이 [답변] [1]이 (가) 도움을 주어야한다고 생각합니다. [1] : http://stackoverflow.com/a/16910263/2315453 – arunit21

답변

10

비디오 해상도와 비디오 크기는 두 가지입니다. 해상도는 선명도를 나타내며 해상도가 높으면 선명도가 높아집니다. 반면 비디오 크기는 비디오를 표시 할 범위입니다. 비디오의 비디오 해상도와 종횡비에 따라 비디오는 뷰어에 표시 될 때 늘어나거나 줄어 듭니다. 사실 설명 된대로

자, 여기 당신의 대답을 찾을 수 있습니다

How do I use AVFoundation to crop a video

이 순서대로 단계를 수행하여 디스크에

  1. 비디오 녹화.
  2. 디스크에서 자산 라이브러리에 저장하십시오.
  3. 디스크에서 삭제하십시오.
  4. 위의 링크에서 설명한 단계를 수행하십시오.

참고 : 녹화 및 저장 자산 인 자산 라이브러리에 saveComposition을 동영상을 작성 후 단계를 수행합니다.

이 단계에서 크기 제공 : videoComposition.renderSize = CGSizeMake(320, 240);

그리고 조언 videoComposition.renderSize = CGSizeMake(300, 300);있다. 파일을 디스크에 쓰고 나서 라이브러리에 쓰고 나서 디스크에 다시 저장하면 길어진 작업이됩니다. dispatch_queue 또는 operationBlock

건배, 즐겁게 사용하여 비동기식으로 모두 시도해보십시오.

+0

당신에게 효과가 있습니까 ??? – croyneaus4u

+0

도움이 되었기 때문에이 답을 가장 좋은 답으로 표시 하겠지만, 연결된 자르기 코드를 제대로 가져 오지 못했습니다. – user2393462435

+0

동영상을자를 수 없습니까? 뭐가 문제 야? – croyneaus4u