Media today (capture, cloud storage, sharing, etc, 4K, and beyond, social media, Live Photos, short-form video, OTT, wireless, H.264 & JPEG are limiting. 이런 상황이라 새로운 format 이 필요)
HEVC — High Efficiency Video coding (H.264 는 data 16x16 처럼 정해졌는데 HEVC는 좀 더 다양하게 packing 가능. 4, 8, 16, 32, 64 그러다 보니 당연히 효율이 높아짐.)
HEIF — High Efficiency Image File Format (Live Photo 같이 게 들어가다 보니 Apple에서 새로운 Image format이 필요해짐. A9 chip 부터 H/W Decode 지원. S/W 모두 지원)
Ecosystem adoption and best practices (HEIF 구조 설명. 훨씬 효율적이라 통신 부분에 있어서도 좋음. )
Compiling CIKernels on First Render (Xcode build time에 error 확인 가능해짐. Run-time까지 갈 필요 없음.)
How to Create Metal CIKernels (Writing CIKernels in Metal (사용법은 자료 참고), Compile and link Metal shader file, Initialize CIKernel with function from Metal library
CIRenderDestination API
Render To Metal Drawable Textures (CPU, GPU 효율성 높임. Sample code 참고 )
Detailed Image and Render Information (CIImage, CIRenderTask, CIRenderInfo, 정보 등을 볼 수 있음)
CIImage Quick Look (Playground 에서 눈 클릭해서 보듯이 볼 수 있음.) 👍👍
CIRenderTask Quick Look (Rendering 과정 볼 수 있음)
CIBarcodeDescriptor API (Demo 확인, barcode 를 손에 rendering. 👍)
Using Core Image with Vision (영상에서 여러 Frame 를 합성해서 하나의 사진으로! , 대표 Frame 추출 → 여러 Frame의 위치 조절 → Image, Demo 참고)
What Can Vision Do - Face Detection (작은 얼굴, 옆면, 눈만 나온 얼굴, 선글라스 모두 인식). Machine Learning 이용한 Detecting - Face Landmarks (얼굴 뿐만 아니라, 눈, 코, 잎 모양을 인식) 👍 - Image Registration (Pano 같은 경우 사진 연결) - Rectangle Detection (사격형을 인지!, Demo 참고) - Barcode Detection - Text Detection - Object Tracking (움직이는 사람을 tracking)
Vision Concepts - Request(원하는 정보 요청. 글자, 사각형, 얼굴 등등) → Request Handler(Handler 설정 ) → Observations (결과 받음.) Sample code 참고 - Face Detector LandScape (Framework 마다 장단 점이 있으니, 적절히 선택해서 사용!!)
AirPlay 2 (iOS, tvOS, macOS) - Wireless audio - Multi-room playback - Enhanced buffering (몇 초가 아니라 몇 분까지 가능, 중간에 WiFi 끊어져도 음악 재생 가능) - Multi-device control (ex. 동시에 여러 스피커에 전달 가능)
AirPlay 2 Adoption - Identify as long-form audio (Music, podcasts, audiobooks, Sample code 참고) - Add an AirPlay picker - Integrate with MediaPlayer framework ( MPRemoteConmmandCenter, MPNowPlayingInfoCenter ) - Adopt an AirPlay 2 playback API
Enhanced Audio Buffering - AVSampleBufferAudioRenderer (소리 정보) ↔ AVSampleBufferRenderSynchronizer(Timeline 정보). (2개의 정보를 넘겨줘야 함. 이 2개가 서로 같이 움직이면서 처리.)
Seek - PlayHead 동작 원리 설명 - 처리 방법 Sample code 참고
Play Queues - Renderer 에 들어간 data는 Continuous Timeline 임. Item1,2,3 처럼 나눠진 정보가 아니라서 Playhead 넘길 때 계산해서 넘겨줘야 함. - Play queue 중간에 item이 빠지면 Flush 하고 다시 연결해라. (처리 방법은 자료 참고)
Audio Format Support (LPM, AAC, mp3, ALAC, 44.1kHZ, 48 kHZ, Mixed formats may be enqueued)
AVAudioEngine - Manual rendering (구조 설명 및 Sample 참고 ) - Auto shutdown ( isAutoShoutdownEnabled Flag 참고 ) - Completion callbacks ( CompletionCallbackType: [ .dataConsumed, .dataRendered, .dataPlayedBack ] )
AVAudioSession (Music, Phone call이랑 하나의 session 사용하다 보니 서로 겹쳤는데 각각의 session 으로 독립적으로 처림 가능)
watchOS (Playbck, Recording, Format supported, 추가됨 . 자세한 spec은 자료 참고.)
AUAudioUnit (Custom UI 구현 가능. Sample Code를 이용한 Demo 참고. Garage Band 이용)
Other Enhancements (Ambisonics 같은 format 추가됨.)
Inter-Device Audio Mode (IDAM) - Send and receive MIDI via Lighting-to-USB cable - Class-complicanat USB MIDI implementation - iOS 11, macOS El Capitan or later - auto-enabled in IDAM configuration - Demo 참고
HLS (HTTP Live Streaming) Has Been Approved for Publication as an RFC!(Request For Comments)
HEVC Support in HLS - HEVC must be packeaged as fMP4 - Same encryption format — ISO/IEC 23001:7 Common Encryption (기존 것과 별 차이 없어서 새로운 것 사용해도 문제 없을 것임.)
Mixing HEVC & H.264 (H.264 에서 개선 된 것이기 때문에 호환 👍)
New Subtitle Format: IMSC1 (Streaming, styling이 좋으니 이거 써라.)
IMSC2 도 나올 수 있는데 1에 비해서 Japanese text 관련 기능 추가 중.
EXT-X-GAP: A New m3u8 Tag (Gap 이 생겼을 때 알 수 있는 방법이 없었는데 Gap tag를 생겼음)
bipbop_gear1/prog_index.m3u8{$auth} (상세 spec은 자료 참고)
Synchronized Playback of Live Streams - EXT-X-PROGRAM-DATE-TIME tag 이용한 동기화 - Demo 참고 (iPhone 2대로 동시에 Streaming, Apple TV에서 동시에 방송) 👍👍👍
preferred Maximum Resolution 값으로 Size 조절
HLS Offline Storage Management - System → App → DOWNLOADED VIDEOS 에서 삭제 가능 - Policy 설정해줘야 함
FairPlay - Streaming 순서 Request Playback → Request key → Create SPC → Send SPC, Get CKC → Respond with CKC - FairPlay Streaming Keys (Offline 상황을 위한 Key 추가. Expire 설정 등)
AVContentKeySession - 시작 시점에 Key load time 줄이기 위해서 이걸 이용해라 - WWDC 에서도 이걸 이용해서 Live Stream 제공 - Server 수정 없이 오직 client code 만으로 개선 가능. key 요청 시점을 random 하게 (조금씩) 다르게 요청. - 여러 Delegate 설명 및 sample code 참고
Dual Expiry Windows for Persistent Keys (Storage Expiry, Playback expiry, 추가 Spec은 자료 참고)