iOS Swift
-
[WWDC20] AVAssetWriter fmp4writer 소스 분석iOS Swift 2023. 6. 9. 11:20
코드 리뷰 이 문서는 WWDC20 Author fragmented MPEG-4 content with AVAssetWriter 세션의 샘플 예제에 대한 코드를 리뷰합니다. 여기서는 해당 프로그램의 구조를 먼저 살펴보겠습니다. Overview 해당 예제는 기본적으로 Combine 을 이용해 파이프라인 형태의 구조를 채택하고 있습니다. Segment Generator는 ReaderWriter에서 세그먼트를 만들어 send(_)를 통해 해당 세그먼트를 퍼블리시합니다. 해당 세그먼트는 Segment File Writer에서 세그먼트를 수신할 때마다 해당 세그먼트를 설정된 출력 디렉토리에 세그먼트 파일을 생성합니다. 그 와 함꼐 Reduce 에서 세그먼트와 함께 수신된 AVAssetSegmentReport를 통해..
-
[WWDC20] AVAssetWriter를 이용한 fragmented MPEG-4 ContentiOS Swift 2023. 6. 8. 14:34
iOS14에 AVAssetWriter에 fragmented MPEG-4 파일 형식의 미디어 데이터를 출력할 수 있도록 기능이 추가되었습니다. Apple HLS는 MPEG-2 전송 스트림, ADTS 및 MPEG 오디오와 같은 형식을 지원하지만 이 기능은 Fragmented MP4에만 해당됩니다. 해당 강의에서 VOD 와 라이브 스트리밍에 어떻게 사용될 수 있는 예시를 보여줍니다. Fragmented MPEG-4(fMP4)는 ISO에 정한 미디어 파일 포맷으로 2016년 부터 Apple HTTP Live Streaming에서 지원되어왔습니다. 간단하게 전통적인 MP4 파일과 fMP4 파일을 살펴보면 다음과 같은 구조를 같습니다. MP4 파일에는 파일 타입, 모든 샘플 데이터에 대한 정보를 구성하는 Movie..
-
Creating images from a video assetiOS Swift/애플 문서 한글화 2023. 6. 7. 20:22
Article 애플 공식 문서 Creating images from a video asset을 한글화한 문서입니다. 비디오 에셋에서 이미지 생성 비디오 프레임에서 이미지를 생성하여 미디어 타임라인 내의 특정 시간에 대한 이미지를 표시합니다. Overview 일반적으로 동영상 앱을 만들 때 일반적인 요구 사항은 비디오 컨테츠의 이미지를 표시하는 것입니다. 비디오 목록에 단일 썸네일을 표시하거나 비디오 파일 로딩 중에 이미지를 보여주고 타임 라인 바를 선택했을 때 해당 지점의 이미지를 보여 주고 선택 시 해당 지점으로 이동 할 수 있도록 할 수 있습니다. AVFoundation을 사용하면 AVAssetImageGenerator를 사용하여 앱의 비디오 컨텐츠에서 이미지를 간단하게 생성할 수 있습니다. AVAs..
-
Recording movies in alternative formatsiOS Swift/애플 문서 한글화 2023. 6. 7. 19:28
Article 이 문서는 애플의 공식 문서 Recording movies in alternative formats 을 한글화한 문서입니다. 레코딩 영상의 포맷 변경 캡쳐링하는 동영상 파일의 기본 포맷 변경 Overview AVCaptureMovieFileOutput을 사용하여 QuickTime 동영상 파일을 캡처하면 프레임워크는 대부분의 iPhone 및 iPad 모델에서 기본적으로 HEVC 형식을 선택합니다. 그러나 다른 형식이 필요한 경우 기본 형식을 미리 변경할 수 있습니다. 앱이 System Share Sheet를 사용하여 캡처한 비디오를 공유하면 시스템이 자동으로 비디오를 대상 장치와 호환되는 형식으로 변환합니다. 그러나 앱이 캡처한 비디오를 내부적으로 저장하거나 공유하는 경우 System Sha..
-
Exporting video to alternative formatsiOS Swift/애플 문서 한글화 2023. 6. 7. 19:16
Article 비디오를 다른 포맷으로 내보내기 기존동영상 파일을 다른 형식으로 변환 Overview 기존 동영상 파일을 다른 장치와 호환되는 형식으로 변환하려면 기존 파일의 내용을 기반으로 새 동영상 파일을 생성해야 합니다. 저장된 비디오의 형식을 변경할 수는 없지만 이 문서에 설명된 단계에 따라 원하는 형식으로 새 파일을 만들 수 있습니다. Tip 앱이 비디오 캡처에서 직접 동영상을 저장할 수 있는 경우 Recording movies in alternative formats를 참조하여 기본 포맷을 수정하는 게 더 효율적입니다. 요청된 포맷으로 새 비디오 내보내기 비디오를 다른 형식으로 내보내려면 AVAset 동영상 파일로 다음 단계의 작업을 수행해야 합니다. Export Presets 리스트에서 내보낼..
-
Loading media data asynchronouslyiOS Swift/애플 문서 한글화 2023. 6. 7. 18:47
Article 이 문서는 Loding media data asynchronously 애플 문서를 한글화 합니다. 비동기적인 미디어 데이터 로딩 언어 수준의 동시성 기능을 사용하여 미디어 데이터를 효율적으로 로드하는 반응형 앱 빌드 Overview AVFoundation은 AVAsset 클래스를 사용하여 동영상을 모델링합니다. 에셋 생성은 데이터가 필요할 때까지 미디어 로드를 연기하기 때문에 가벼운 작업입니다. 에셋이 데이터를 로드하는 데 걸리는 시간은 미디어 크기, 로컬 장치 기능 및 원격 네트워크 조건을 비롯한 요인에 따라 다릅니다. 호출 스레드를 차단하지 않으려면 미디어 데이터를 비동기적으로 로드해야 합니다. important iOS 16, tvOS 16, MacCatalyst 16 및 macOS 1..
-
VTDecompressionSession을 이용한 H.264 비디오 코덱iOS Swift 2023. 6. 7. 17:34
이전 글에서 네트워크를 통해 Elementray Stream 형식으로 들어온 NAL 유닛을 CMSampleBuffer로 변환하는 과정을 보았습니다. 이 샘플 버퍼에는 H.264로 압축된 영상이 있는데 해당 영상은 VTDecompressionSession을 이용해 직접 압축을 해제할 수 있습니다. 이를 통해 MetalKit을 이용해 화면에 영상을 출력할 수 있습니다. 이번에는 VTDecompression을 이용해 H.264 디코더를 구현하는 방법에 대해 살펴보겠습니다. VTDecompression 생성 func VTDecompressionSessionCreate( allocator: CFAllocator?, formatDescription videoFormatDescription: CMVideoFormat..
-
iOS 에서 H.264 Elementary Stream to MPEG4 포맷으로 변환iOS Swift 2023. 6. 7. 16:41
RTP로 H.264 영상을 수신하게 되면 iOS는 해당 스트림을 재생할 수 없습니다. iOS는 MPEG-4 포맷의 데이터를 CMSampleBuffer 형태로 관리하는 데 이를 위해서는 RTP로 수신된 데이터의 NALU을 파싱해 해당 CMSampleBuffer 형태로 변환해 주어야 합니다. 우선 CMSampleBuffer에 대해서 살펴 보겠습니다. CMSampleBuffer CMSampleBuffer 샘플버퍼는 미디어 파이프라인을 통해 샘플데이터를 이동하는데 사용하는 CoreFoundation 객체입니다. CMSampleBuffer 인스턴스에는 특정 미디어 타입의 압축되거나 압축되지 않은 샘플이 하나 이상 포함되어 있습니다. 해당 샘플 버퍼가 포함할 수 있는 객체는 CMBlockBuffer, CVImage..