- This topic has 3개 답변, 2명 참여, and was last updated 4 years, 6 months 전에 by 야곰.
-
글쓴이글
-
-
광현참가자
- 글작성 : 15
- 답글작성 : 26
system camera ui 가 아닌 custom 한 ui 를 가진 camera 앱을 만들기 위핵서 MTKView를 이용해서 애플에서 제공하는 AVCam 과 AVCamFilter 를 보며 공부 및 따라 하는 중입니다. 그래서 AVCapturePreviewLayer를 사용하지 않고 직접 AVCaptureSession, AVCatpureDevice, AVCatpureVideoDataOutput 를 이용해서 구현 중입니다.
class CameraViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate
AVCaptureVideoDataOutputSampleBufferDelegate 를 채택해서
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) { guard let videoPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer), let _ = CMSampleBufferGetFormatDescription(sampleBuffer) else {return} self.metalView.pixelBuffer = videoPixelBuffer self.metalView.rotation = .rotate90Degrees }
을 구현해서 CVImageBuffer를
MTKView로 보내서 preview를 구현하고 있는 데 맞는 프로토콜을 채택해서 구현한 것인지 궁금합니다.
애플 공식 문서 내용은 아래와 같습니다.
- AVCaptureVideoDataOutputSampleBufferDelegate
- video data output 으로부터 샘플 버터들을 받아오고, video data output의 상태를 모니터할 수 있는 메쏘드를 제공한다
- 이 게시글은 광현에 의해 4 years, 6 months 전에 수정됐습니다.
- 이 게시글은 광현에 의해 4 years, 6 months 전에 수정됐습니다.
- 이 게시글은 광현에 의해 4 years, 6 months 전에 수정됐습니다.
- 이 게시글은 광현에 의해 4 years, 6 months 전에 수정됐습니다.
- 이 게시글은 광현에 의해 4 years, 6 months 전에 수정됐습니다.
- 이 게시글은 광현에 의해 4 years, 6 months 전에 수정됐습니다.
- 이 게시글은 광현에 의해 4 years, 6 months 전에 수정됐습니다.
- 이 게시글은 광현에 의해 4 years, 6 months 전에 수정됐습니다.
2020-06-17 오후 9:45 #9210 -
야곰키 마스터
- 글작성 : 37
- 답글작성 : 579
AVCapturePreviewLayer
를 사용하지 않는 이유가 궁금합니다. 학습 때문에 굳이 피하는 것이라면 사용 자체는 큰 문제 없어보입니다.
혹시 말씀하신 것처럼 구현 후 성능상에 큰 이슈가 있나요?
해당 딜리게이트의 메서드 문서의 Discussion을 보면 성능상의 이슈가 발생할 여지들에 대해 말해주고 있는데요, 실제로 사양이 좀 낮은 기기를 가지고 구현하려면 이 부분에 대해 신경쓰셔야 할 것 같습니다.2020-06-17 오후 10:26 #9229-
광현참가자
- 글작성 : 15
- 답글작성 : 26
나중에 실시간으로 필터 적용하는 화면을 preview 상에 보이도록 하기 위해서 AVCapturePreviewLayer 사용하지 않고 preview 에 보이도록 하는 것을 공부하는 중입니다
성능상의 이슈는 아직 문제되지는 않지만 고려해 보겠습니다.
AVSession을 이용하는 부분은 그럭저럭 따라가며 이해하고 있는 데, MTKView 를 상속해서 구현하는 부분은 좀 많이 어렵네요ㅎㅎ
특히 샘플 코드에 있는 Shader 나
override func draw(_ rect:)
너무 어렵습니다.답변 감사합니다. 🙂
- 이 답변은 광현에 의해 4 years, 6 months 전에 수정됐습니다.
2020-06-17 오후 10:50 #9248-
야곰키 마스터
- 글작성 : 37
- 답글작성 : 579
draw(_ rect:)
메서드도 성능상의 이슈를 발생시킬 여지가 크기 때문에 사용할 때 고려할 것들이 많습니다 ㅎㅎ
UIKit을 사용하지 않고 레이어나 기타 뷰를 활용하는 것이 꽤 큰 리소스 컨트롤이 필요한 경우가 많아요.
UIKit 요소들은 알아서 캐싱하고 최적화 하는데, 커스텀 드로잉은 그렇지 못하기 때문이에요.
draw(_ rect:)
메서드의 Discussion 부분과 Quartz 2D Programming Guide 문서에서도 관련된 내용을 참고해보세요 🙂2020-06-17 오후 11:01 #9252
-
-
글쓴이글
- 답변은 로그인 후 가능합니다.