WWDC 2017 & Fall

Media

Posted by Den on December 10, 2017 · 16 mins read

Media

🔍 Introducing HEIF and HEVC

  • 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 구조 설명. 훨씬 효율적이라 통신 부분에 있어서도 좋음. )

🔍 Working with HEIF and HEVC

  • 작업할 때, HEIF, HEVC 지원하는 지 안하는 지 꼭 확인하고 작업하라!!! 
    (A9 부터 H/W 지원). isEncodable 등 값으로 확인 가능
  • HEVC 40% smaller than H.264
  • HEVC plackback (iOS 11, High Sierra)
  • HEVC Capture and export APIs (Sample code 확인 필수 확인)
  • HEIC 2x smaller JPEG 
    (Sample 영상 보기, Pano JPEG 사진 2G짜리가 140M 정도)
  • HEIF (iOS 11, High Sierra)
  • HEIC files using the new AVCapturePhoto interface
  • 호환성을 따진다면, 기존 H.264 나 JPEG!! Capture 할 때도 성능 따져가면서 선택

🔍 High Efficiency Image File Format

  • HEIF 구조 설명
  • HW acceleration 가능한 format
  • Auxiliary Images (alpha, depth) 정도 따로 저장.
  • Tile 구조로 Scale 이 효율적 (Multi Image, Multi resolution)
  • Thumbnail 정보를 가지고 있음.
  • 영상 정보 가지고 있어 Live Photo에 적합.

🔍 Capturing Depth in iPhone Photography

  • Disparity system (Dual camera depth 계산하는 방법 설명. 사람 눈 2개가 거리 측정하는 방법과 동일)
  • AVDepthData (DepthData API 공개. 3party 에서 사용 가능). Filter On 해야 사용할 만한 수준
  • AVCameraCalibrationData ( Calibration Data도 공개. )
  • AVCaptureDepthDataOutput (Photo, Video spec 이 다름, 자료 확인.)
  • AVCapturePhotoOutput
  • Dual camera 경우, Wide, tele 정보를 동시에 받을 수 있음
  • Depth 정보를 가지고 2D를 3D 처럼 변경 가능! Demo 확인 👍👍👍

🔍 Image Editing with Depth

  • What Is Depth? (iPhone 7+, iOS 11, Depth = 1/Disparity )
  • Loading, Reading depth data 
    (No depth in UIImage, Sample code 참고, CPU, GPU 사용하는 format 이 달라서 covert 꼭 해줘야 함. DisparityFloat16)
  • Preparing, Filtering with depth data 
    (Nearest, Linear, CIEdgePreserveUpsampleFilter 참고, Depth 에 따라 Mask 주는 Demo 👍 )
  • Custom Depth Effect 
    (Scale, Disparity에 custom 곡선 적용. Sample code 참고. 👍)
  • CIDepthBlurEffect 
    (Depth 에 따라서 Blur 처리, 카메라 조리개 효과, 자료 참고. 👍)
  • Dolly Zoom (Depth data를 이용한 2D → 3D 변환. Demo 확인 👍👍👍)
  • Transforming DepthData 
    (Orientation , Crop 등 Depth data와 Image 를 맞춰줘야함. Depth Data, Image는 해상도 다르고 변형할 때 둘다 맞춰줘야 함! 주의!! )
  • Saving depth data (Sample code 참고.)

🔍 Advances in Core Images: Filters, Metal, Vision and More

  • 196 Built-In Filters
  • Writing CIKernels in Metal
  • 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’s New in Photo APIs

  • Photos 에 access PopUp 없이 접근 가능 👍 
    (ImageExportPreset =. current 설정시 HEIF 로 접근 가능.)
  • Addtions and best practices 
    (PHAssetMediaType, SubType , PHAssetPlaybackStyle 설명. GIF, Live Photo, Looping Video, Sample code 확인.)
  • 1000000 Image Test App 제공 👍 
    (iCloud에서 불러오기 Test 를 위해 100000 Photo Test app 제공.)
  • 무식하게 Fetch 하지 말고 😡🤬. SmartAlbums, SortDescriptors. 이용해서 loading 시간을 줄여라! (indexOfObjext, containsObject 도 활용)
  • Photos Project Extension 
    (Photo extension 를 통한 custom photos app 개발 가능. macOS 만 가능.)

🔍 Vision Framework: Building on Core ML

  • 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 마다 장단 점이 있으니, 적절히 선택해서 사용!!)

🔍 Introducing MusicKit

  • [ iOS Frameworks ↔ Apple Music API (Catalog Services, personalized Services) ] 로 구성 됨
  • https://api.music.apple.com/{version}/catalog/{strorefront}/{api}?[param]. (Song, Album, Artist, Genres. 상세 정보는 spec 참고)
  • API Access 
    (Dev Token, Music User Token ) 2가지 필요. Fetching code 참고
  • Allow users to subscribe 
    (사용자가 구독 중인지 확인해서 Subscription 화면 노출 시킬 수 있음.)
  • MPMusicPlayerController 관련 설명.

🔍 Introducing AirPlay2

  • 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)
  • Preferred Audio Formats 
    (Original audio format, interleaved channel formats, [1–2 sec / CMSampleBuffer] )
  • Video Synchronization 
    - AVSampleBufferAudioRenderer (소리 정보) ↔ AVSampleBufferRenderSynchronizer(Timeline 정보) ↔ DisplayLayer. (소리에서 화면 부분만 추가됨.)
  • 기기 Test 모드에서 AirPlay2 지원

🔍 What’s New in Audio

  • 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 참고

🔍 Apple Podcasts

  • Introduction (Podcasts 인기 상승 중)
  • Podcasts in iOS 11 (Music app 처럼 UI 변경)
  • Updates to Apple Podcasts Spec 
    (Session, Group 기능 추가, Tag, Value Type, Values 등 Spec 참고)
  • How to Create a Show 
    (Podcasts 시작할 때 어떻게 해야하는 지, 전 과정으로 이야기 형식으로 설명)

🔍 Advances in HTTP Live Streaming

  • 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은 자료 참고)

🔍 Error Handling Best Practices for HTTP Live Streaming

  • Http Status Code 에 따른 Error 설명
  • GAP Tag 추가에 따른 Handling 설명
  • AVPlayer.status, AVPlayerItem.status, AVPlayerItem.error 잘 활용

🔍 HLS Authoring Update

  • 위에서 설명했던 HLS 에 대한 것 요약
  • HLS Tools 
    - Developer site 에서 Download 
    - Segmenting, encrypting content 
    - Validating content (Local file)
    - video, audio encoding 은 3rd-Party tool 사용 (별도로 확인해주지 않음.)
    - HEVC 지원

🔍 An Introduction HDR Video

  • Rec 709 < P3 < REC 2020 (색 범위)
  • Dolby Vision (가변 적으로 명도 등 저장 가능 )
  • HDR10 
    - Display MetaData (Display Primaries, Chromaticity of White Point)
    - Content Metadata (Maximum Content Light Level, Maximum Frame-Average Light Level)

🔍 Authoring 4K and HDR HLS Streams

  • HEVC 를 이용해야 한다.
  • New Tag 
    - VIDEO-RANGE( SDR [Standard dynamic range variants], PQ [HDR10, Dolby Vision variants] )
    - HDCP-LEVEL (NONE, TYPE-0, TYPE-1) 
    - Sample 참고

← Previous Post Next Post