AVFoundation

Horus-iOS·2022년 5월 29일
0

AVFoundation


AVCam: Building a Camera App

샘플 코드.

https://developer.apple.com/documentation/avfoundation/cameras_and_media_capture/avcam_building_a_camera_app

Setting Up a Capture Session

캡처 세션을 설정하는 방법에 대한 내용. 번역 링크는 아래에.

https://velog.io/@horus222128/Setting-Up-a-Capture-Session

인풋 기기에서 아웃풋으로 흘러가는 데이터 흐름, 기기 설정, 세션의 시작과 끝, 프리뷰 등의 내용이 나온다. 아래 AVCaptureSession 내용을 보면 정말 캡처에 대한 전반을 다 하는 타입인데, 이 글에서 전반적인 구현 방법을 말하고 있다.

AVCaptureSession

아래 링크처럼 카메라 구현 연습 중 잘 알고 있어야 한다고 생각한 타입이라 애플 문서를 보고 번역했다.

https://github.com/panther222128/CameraPractice

An object that manages capture activity and coordinates the flow of data from input devices to capture outputs.

캡처 활동을 관리하고 인풋 기기에서 캡처 아웃풋으로 흘러가는 데이터 흐름을 조정하는 객체입니다.

라고 하는데, 아키텍처 관점에서 고민해볼 부분이 많아질 것 같다. 인풋 기기 설정, 캡처 흐름, 데이터 흐름 모두 나눠서 구현되어야 할 것 같다고 생각했기 때문.

번역은 아래 링크에.

https://velog.io/@horus222128/AVCaptureSession

AVCapturePhotoCaptureDelegate

Methods for monitoring progress and receiving results from a photo capture output.

사진 캡처 아웃풋으로부터 진행상황을 모니터하고 결과를 받기 위한 메소드 집합입니다.

애플 샘플 코드 보면서 겁먹었는데, 모든 메소드가 옵셔널, 즉 선택사항이다. 앞서 써놓은 말 그대로 진행상황 및 결과에 대한 메소드들이다. 그런데 오류 처리 때문에 결국은 구현하게 될 것 같다.

다른 글과 착각했다. 구현은 선택사항이 아니다.

번역은 아래 링크.

https://velog.io/@horus222128/AVCapturePhotoCaptureDelegate

AVCaptureVideoDataOutputSampleBufferDelegate

Methods for receiving sample buffers from, and monitoring the status of, a video data output.

비디오 데이터 아웃풋으로부터 샘플 버퍼를 받거나 비디오 데이터 아웃풋의 상태를 모니터링하기 위한 메소드들입니다.

샘플 버퍼가 무엇인지부터 이해해야 할 것 같다.
https://velog.io/@horus222128/Core-Media

번역 링크.

https://velog.io/@horus222128/AVCaptureVideoDataOutputSampleBufferDelegate

AVCapturePhotoOutput

A capture output for still image, Live Photos, and other photography workflows.

스틸 이미지, 라이브 사진, 기타 사진촬영 작업흐름을 위한 캡처 아웃풋입니다.

로컬 기기에 실제로 저장되는 실질적인 사진 결과물이 아니다. 결과물을 위한 설정 적용이 가능하다. AVCaptureSessionstartRunning() 메소드 호출 전에 isHighResolutionCaptureEnabled, isLivePhotoCaptureEnabled, isLivePhotoAutoTrimmingEnabled와 같은 설정을 적용해야 한다. 주의해야 하는 점은 세션 시작 후 설정을 변경하면 세션이 종료된다는 점.

https://velog.io/@horus222128/AVCapturePhotoOutput

AVCaptureConnection

An object that represents a connection from a capture input to a capture output.

캡처 인풋으로부터 캡처 아웃풋으로 이어지는 연결을 나타내는 객체입니다.

레이어로 테스트해보지는 않았고, AVCaptureVideoDataOutputSampleBufferDelegate로 테스트했을 때 AVCaptureSessionconnections 배열이 비어있으면 카메라로 비추는 화면이 나타나지 않는 것을 확인했다.

번역은 아래에.

https://velog.io/@horus222128/AVCaptureConnection

AVCaptureVideoDataOutput

A capture output that records video and provides access to video frames for processing.

비디오를 레코드할 수 있도록 해주고, 프로세싱을 위한 비디오 프레임 접근을 제공하는 캡처 아웃풋입니다.

https://velog.io/@horus222128/AVCaptureVideoDataOutput

AVAssetWriter

An object that writes media data to a container file.

컨테이너 파일로 미디어 데이터를 쓰는 객체입니다.

AVAssetWriter를 사용해서 영상을 촬영해야 하는 상황인데, 샘플 코드를 구글링하면 잘 나오지 않는다. 아래 링크는 전후면 두 카메라를 모두 사용해서 PiP(Picture in Picture) 영상 촬영에 대한 예시이다. 여기서 AVAssetWriter의 쓰임을 찾을 수 있었다. MovieRecorder라는 객체를 보면 startRecording(), stopRecording(completion: @escaping (URL) -> Void), recordVideo(sampleBuffer: CMSampleBuffer), recordAudio(sampleBuffer: CMSampleBuffer) 메소드를 볼 수 있다.

https://developer.apple.com/documentation/avfoundation/capture_setup/avmulticampip_capturing_from_multiple_cameras

https://velog.io/@horus222128/AVAssetWriter

AVPlayer

An object that provides the interface to control the player’s transport behavior.

플레이어의 트랜스포트 동작을 제어하기 위한 인터페이스를 제공하는 객체입니다.

재생기. play(), pause()와 같은 메소드가 보인다. currentTime()도 보인다.

https://developer.apple.com/documentation/avfoundation/avplayer

AVPlayerLayer

An object that presents the visual contents of a player object.

플레이어 객체의 시각적 컨텐츠를 제공하는 객체입니다.

CALayer가 부모이다. 영상이 재생되는 레이어로 보는 것이 맞을지.

AVPlayerItem

An object that models the timing and presentation state of an asset during playback.

재생되는 동안 에셋의 타이밍 및 표시 상태를 모델링하는 객체입니다.

https://velog.io/@horus222128/AVPlayerItem

WWDC15: Editing Movies in AVFoundation

https://velog.io/@horus222128/WWDC15-Editing-Movies-in-AVFoundation

AVComposition

An object that combines and arranges media from multiple assets into a single composite asset that you can play or process.

여러 에셋 미디어를 재생 혹은 처리 가능한 하나의 컴포지트 에셋으로 조합 및 정렬하는 객체입니다.

트랙들을 위한 컨테이너이다.

https://velog.io/@horus222128/AVComposition

AVMutableComposition

An object that you use to create a new composition from existing assets.

기존 에셋들로부터 새로운 컴포지션을 생성하기 위해 사용하는 객체입니다.

https://velog.io/@horus222128/AVMutableComposition

AVMutableVideoCompositionLayerInstruction

An object used to modify the transform, cropping, and opacity ramps applied to a given track in a mutable composition.

수정 가능한 컴포지션의 주어진 트랙에 적용된 변형, 크롭, 불투명도 램프를 수정하는 데 사용되는 객체입니다.

https://velog.io/@horus222128/AVMutableVideoCompositionLayerInstruction

AVMutableVideoCompositionInstruction

An operation performed by a compositor.

컴포지터에 의해 수행되는 작업입니다.

배경색, 시간 범위 등의 속성이 있다.

https://velog.io/@horus222128/AVMutableVideoCompositionInstruction

videoZoomFactor

A value that controls the cropping and enlargement of images captured by the device.

디바이스에 의해 캡처되는 이미지의 크롭, 확대를 제어하는 값입니다.

lockForConfiguration(), unlockForConfiguration() 메소드를 정확히 이해하지 못하고 있었는데, 이 문서 덕분에 조금 더 가깝게 이해한 것 같다. 디바이스 설정 권한을 갖고 다시 돌려주는 것 같다. 독점적이라고 하니 그동안 다른 곳에서 변경은 못하도록 하는 것 같다.

https://velog.io/@horus222128/videoZoomFactor

0개의 댓글