View in English

  • 메뉴 열기 메뉴 닫기
  • Apple Developer
검색
검색 닫기
  • Apple Developer
  • 뉴스
  • 둘러보기
  • 디자인
  • 개발
  • 배포
  • 지원
  • 계정
페이지에서만 검색

빠른 링크

5 빠른 링크

비디오

메뉴 열기 메뉴 닫기
  • 컬렉션
  • 주제
  • 전체 비디오
  • 소개

WWDC25 컬렉션으로 돌아가기

  • 소개
  • 요약
  • 자막 전문
  • 코드
  • Apple Projected Media Profile 알아보기

    APMP(Apple Projected Media Profile)를 자세히 알아보고 APMP가 비디오 확장 사용 신호를 사용하여 QuickTime 및 MP4 파일에서 180º/360º 및 Wide FoV 투영 방식을 지원하는 기능을 어떻게 지원하는지 확인하세요. OS에서 제공하는 프레임워크 및 도구를 사용하여 APMP가 포함된 미디어를 변환, 읽기/쓰기, 편집 및 인코딩하는 방법을 안내합니다. 또한 APAC(Apple Positional Audio Codec)의 기능을 검토하여 가장 몰입감 넘치는 경험을 위한 공간 음향 콘텐츠를 생성 및 배포하는 방법을 알아보겠습니다.

    챕터

    • 0:00 - 서론
    • 1:12 - 직선형이 아닌 비디오 기본 사항
    • 3:42 - Apple Projected Media Profile 사양
    • 5:59 - APMP 콘텐츠 캡처 및 작업 흐름
    • 8:33 - 애셋 변환 기능
    • 10:45 - APMP 비디오 읽기
    • 11:47 - APMP 비디오 편집
    • 13:42 - APMP 비디오 게시
    • 16:14 - Apple Positional Audio Codec

    리소스

    • Apple HEVC Stereo Video Interoperability Profile
    • AVFoundation
    • Converting projected video to Apple Projected Media Profile
    • Core Media
    • HTTP Live Streaming
    • HTTP Live Streaming (HLS) authoring specification for Apple devices
    • QuickTime and ISO Base Media File Formats and Spatial and Immersive Media
    • Using Apple’s HTTP Live Streaming (HLS) Tools
      • HD 비디오
      • SD 비디오

    관련 비디오

    WWDC25

    • 공간 웹의 새로운 기능
    • Apple Immersive Video 기술에 대해 알아보기
    • visionOS 앱에서 몰입형 비디오 재생 지원하기
    • visionOS를 위한 비디오 경험 살펴보기

    WWDC22

    • AVQT의 새로운 기능

    WWDC21

    • Evaluate videos with the Advanced Video Quality Tool
  • 비디오 검색…

    안녕하세요, 저는 Jon이고 Core Media Spatial Technologies 팀 엔지니어입니다 이 영상에서는 비직선형 비디오 투영이 QuickTime 파일에 어떻게 표현되는지 살펴보겠습니다 Apple Projected Media Profile (APMP) 비디오의 읽기, 쓰기, 편집 및 출판을 지원하도록 Core Media, Video Toolbox 및 AVFoundation 프레임워크에 도입된 업데이트도 소개합니다 마지막으로 Apple Positional Audio Codec을 사용해 비디오 미디어에 공간 음향을 추가하는 법을 살펴봅니다 180, 360 또는 와이드 뷰 카메라를 제공하는 공급업체이든 비디오 편집 소프트웨어 개발자 또는 흥미로운 새로운 유형의 미디어를 다루기를 원하는 앱 개발자이든 이 비디오가 여러분에게 도움이 될 것입니다 “visionOS를 위한 비디오 경험 살펴보기”를 보면 몰입형 비디오 프로필에 대한 중요한 소개 정보가 들어있습니다 visionOS 26에서 사용 가능한 및 비디오 프로젝션 개념이죠 비직선형 비디오 기본 사항부터 검토하겠습니다 “visionOS를 위한 비디오 경험 살펴보기”에 있죠 visionOS 26은 새 Apple Projected Media Profile 형식을 사용해 180, 360 및 광각 FOV 비디오를 지원합니다 소비자가 접근 가능한 카메라를 통해서요 투영된 미디어 프로파일 내 차별화 요소는 투영 방식입니다 2D, 3D 및 공간 비디오는 직선 투영을 사용합니다 180도 비디오는 반직사각형 투영을 사용합니다 360도 비디오는 직사각형을 사용합니다 넓은 FOV 비디오는 매개변수 투영을 사용합니다 직사각형 투영의 경우 등거리 원통 투영으로도 알려져 있습니다 Final Cut Pro와 같은 편집 애플리케이션에서 널리 지원됩니다 직사각형 투영의 경우 둘러싸는 구의 픽셀 좌표가 위도와 경도의 각도로 표현됩니다 직사각형 비디오 프레임의 행과 열에 동일하게 투영됩니다 수평 축은 -180도부터 +180도까지의 경도를 매핑하고 수직 축은 -90도부터 +90도까지의 위도를 매핑합니다 반직사각형 투영도도 유사합니다 하지만 비디오 프레임 내의 X 좌표는 -90도에서 +90도까지의 범위를 나타냅니다 ParametricImmersive 프로젝션은 내재적 및 렌즈 왜곡 매개변수를 나타내며 이 매개변수는 광각 또는 어안 렌즈와 연관되어 있습니다 내부 매개변수는 초점 거리, 광학 중심 촬영에 사용된 렌즈 시스템의 기울기 등의 정보입니다 이러한 매개변수는 3D 세계 좌표에서 이미지 평면 2D 좌표로의 변환을 나타내는 3x3 행렬로 해석되며 카메라 행렬 ‘K’로 표기됩니다 또한 ParametricImmersive 프로젝션은 렌즈 왜곡 매개변수를 나타낼 수 있습니다, 방사형 왜곡과 같죠 방사형 왜곡 매개변수는 배럴 왜곡을 보정합니다 직선이 거리에 비례하여 곡선으로 나타나는 곳이죠 광각 렌즈 설계로 인해 광학 중심을 기준으로 합니다 이 이미지에서는 울타리 기둥이 렌즈 가장자리로 휘어 보입니다 접선 왜곡, 투영 오프셋 반경 각도 제한 렌즈 프레임 조정 등의 기타 렌즈 왜곡 특성은 ParametricImmersive 투영에서도 지정할 수 있습니다

    기본 사항을 다루었으므로 Apple API를 사용한 Apple Projected Media Profile 콘텐츠 처리 방법을 살펴봅니다

    APMP 비디오가 QuickTime 및 MP4 동영상 파일로 전송되는 방법부터 설명하겠습니다 Apple Projected Media Profile을 사용해 QuickTime 및 MP4 파일의 180도, 360도 및 Wide FOV 콘텐츠임을 신호화하죠 QuickTime 파일은 계층 구조로 구성됩니다 여러 미디어 데이터 유형을 담은 컨테이너로 구성되었죠 오디오 및 비디오 트랙이 포함될 수 있습니다 각 트랙의 세부 사항을 설명하는 데이터도 마찬가지죠 MP4용 ISO Base Media File Format (ISOBMFF) 사양이 QuickTime을 기반으로 하여 수정되었습니다 ISOBMFF 파일의 데이터 구성의 기본 단위는 상자입니다 visionOS 1의 경우 Video Extended Usage 확장 상자에 입체 또는 단안 콘텐츠임을 표시하는 정보가 포함되었죠 visionOS 26에서는 Video Extended Usage(vexu)에 추가된 상자에서 투영 미디어 프로파일 신호화를 사용하죠 투영 상자는 투영 유형 중 하나를 신호로 보냅니다 예를 들어 직사각형이나 반-정방형 또는 ParametricImmersive입니다 렌즈 모음 상자에는 ParametricImmersive 투영법에 대한 내부 및 외부 매개변수 렌즈 왜곡 설정이 포함되어 있죠 View 포장 상자에는 상하, 좌우 등 프레임 패킹 이미지의 좌우 시점 배치 정보가 있습니다 모노스코픽 직사각형 파일의 최소 신호의 예를 봅시다 투영 상자에 ProjectionKind가 equirectangular로 설정되어 있죠 입체 180도 파일은 projectionkind가 half-equirectangular로 설정된 것 외에 추가로 스테레오 뷰 박스가 필요합니다 이 구성 요소를 사용해 입체 360도와 같은 다른 조합을 신호화하는 것도 가능합니다 Apple Projected Media Profile 로 지원되는 투영 상자 외 다른 상자에 대한 자세한 내용은 developer.apple.com/kr의 QuickTime 및 ISOBMFF 공간 및 몰입형 미디어 사양을 확인하세요 다음으로 APMP 콘텐츠 촬영 방법과 일반적인 APMP 워크플로를 간략히 살펴보겠습니다 다양한 카메라로 APMP 호환 콘텐츠를 촬영합니다 캐논 EOS VR 시스템으로 입체 180도 비디오를 촬영 및 처리하고 GoPro MAX 또는 Insta360 X5로 360도 비디오를 촬영합니다 GoPro HERO 13 및 Insta360 Ace Pro 2 등 최신 액션 카메라는 광각 FOV 비디오 촬영용입니다 Final Cut Pro는 360도 APMP 콘텐츠 읽기 쓰기를 지원하죠 올 하반기부터 Canon EOS VR Utility GoPro Player 등 카메라 비디오 편집 소프트웨어에서 Apple Projected Media Profile 시그널링을 통한 MOV 또는 MP4 파일 내보내기를 지원합니다 180도, 360도 비디오의 스티칭, 안정화, 스테레오 이미지 보정에 카메라 회사 소프트웨어를 사용하세요 편집기에서 APMP가 활성화되어 있으면 APMP 시그널링이 포함된 MOV 또는 MP4 파일로 내보냅니다 AirDrop 또는 iCloud를 사용해 파일을 Apple Vision Pro로 전송합니다 소프트웨어에서 Apple Projected Media를 지원하지 않으면 구형 메타데이터를 사용해 180 또는 360으로 내보냅니다 그런 다음 명령줄이나 Finder 작업에서 Ctrl 키를 누른 채로 비디오 파일을 선택해 avconvert macOS 유틸리티를 사용합니다 AirDrop 또는 iCloud를 사용해 파일을 Apple Vision Pro로 전송합니다 Apple Projected Media Profile은 촬영, 편집, 전달을 포함한 워크플로를 통한 투영 비디오 시그널링에 적합하죠 다음은 입체 180 워크플로의 예입니다 APMP 시그널링을 각 단계에서 사용할 수 있죠 HEVC, RAW 또는 ProRes 코덱을 사용하여 콘텐츠를 캡처합니다 그런 다음 ProRes를 사용하여 편집합니다 3D 콘텐츠의 촬영 및 편집 시 프레임 패킹, 멀티뷰, 시점별 동영상 파일, 파일 하나에 비디오 트랙 2개 시그널링도 가능하며, 예제의 촬영에서는 좌우 프레임 패킹 콘텐츠로 편집하는 동안 동영상 파일이 2개 필요합니다 멀티뷰 HEVC 또는 MV-HEVC 코덱으로 인코딩하고 게시해야만 전달 및 visionOS 재생이 효율적입니다 이제 APMP 사양과 일반적인 워크플로를 다뤘으니 macOS 및 visionOS 26의 새로운 기능을 검토해 보겠습니다 기존 미디어 API를 사용하여 APMP 파일로 작업할 때 유용하죠 먼저 자산 변환 기능부터 살펴보겠습니다 미디어 워크플로 관련 앱 개발자의 경우 APMP 시그널링을 도입하기까지 시간이 걸리므로 AVFoundation에 구형(V1 또는 V2) 사용 호환 애셋 인식 기능을 추가했죠 호환 180 또는 360 콘텐츠에는 equirectangular 투영이 있으며 프레임 패킹 스테레오 또는 모노스코픽이 가능합니다 애셋 생성 옵션 ShouldParseExternalSphericalTags을 전달해 직접 호환되는 구형 콘텐츠를 인식하고 적절한 형식 설명 확장을 합성합니다 이렇게 하면 다른 시스템 API가 애셋을 Apple Projected Media Profile로 신호가 전달된 것처럼 처리됩니다 형식 설명 확장인 convertedFromExternalSphericalTag 를 보고 구형 메타데이터가 파싱되었는지 확인합니다 visionOS 26은 렌즈 투영 매개변수와 GoPro 및 Insta360 등 카메라 회사의 시야 모드를 기본 지원합니다 Quick Look에서는 파일을 열 때 해당 파일을 변환할지 묻습니다 애플리케이션에서 와이드 FOV 콘텐츠 변환을 활성화하려면 ImmersiveMediaSupport 프레임워크의 ParametricImmersiveAssetInfo 객체를 사용하면 호환되는 카메라 모델의 경우 내부 및 렌즈 왜곡 매개변수가 있는 ParametricImmersive 투영을 포함한 비디오 형식 설명이 생성됩니다 isConvertible 속성을 사용해 호환 카메라의 메타데이터가 감지되었는지 확인하고 비디오 트랙의 형식 설명을 새로 파생된 형식 설명으로 대체하고 애셋 사용 시스템 API가 콘텐츠를 wide-FOV APMP로 인식하죠 “투영 비디오를 Apple Projected Media Profile로 변환하기”의 샘플 앱을 참고해 APMP 형식으로 변환 방법을 알아 보세요 시스템 미디어 API로 APMP 비디오를 판독할 수 있습니다 CoreMedia 및 AVFoundation 프레임워크가 업데이트 되어 투사된 미디어의 식별 및 판독을 지원합니다 배지를 붙이기 위한 목적으로 APMP 프로필에 부합하는 애셋을 식별해야 하는 경우 또는 특정 재생 경험을 준비하려는 경우 AVAssetPlaybackAssistant를 사용할 수 있습니다 비직선형 투영 구성 옵션을 찾아보세요 APMP 비디오 재생 경험 구축에 대해 보려면 “visionOS 앱에서 몰입형 비디오 재생 지원하기”를 확인하세요

    더 자세한 정보가 필요할 경우 먼저 미디어 특성을 조사해 비디오 트랙이 직선이 아닌 투사를 나타내는지 확인합니다 그런 다음 projectionKind를 검사하여 시그널된 투사를 정확하게 알아봅니다 viewPackingKind 포맷 설명 확장 프로그램은 프레임으로 가득 찬 콘텐츠를 식별합니다 나란히 및 위아래 프레임 패킹을 지원합니다 투영된 미디어를 편집하려면 AVFoundation 프레임워크의 AVVideoComposition 객체를 사용하고 CMTaggedBuffers를 익힙니다 CMTaggedDynamicBuffers는 AVVideoComposition 등 편집 API를 비롯해 입체 콘텐츠를 처리하는 여러 API에서 사용됩니다 CMTaggedDynamicBuffer는 기저 버퍼의 특정 속성을 지정하는 방법을 제공하며 CM 태그로 표시됩니다 각 CM 태그에는 카테고리와 값이 포함됩니다 다음은 StereoView 카테고리를 나타내는 CMTag의 예입니다 왼쪽 눈을 나타내죠

    CMTaggedDynamicBuffers는 관련 버퍼로 그룹화될 수 있습니다 이 예에서처럼 좌우 눈을 입체 영상 샘플에서 CVPixelBuffers로 보여주죠 AVVideoComposition을 사용하여 입체 비디오 편집을 활성화하려면 합성기가 생성한 태그가 지정된 버퍼의 형식을 지정하기 위해 API를 추가했습니다 태그가 지정된 버퍼를 구성 요청에 전달하는 메서드도 지정하죠 outputBufferDescription은 합성기가 생성할 CMTaggedBuffers의 유형을 지정합니다 합성을 시작하기 전에 정의하세요 CMTaggedBuffers의 입체 쌍을 구성한 후 finish를 호출하고 태그가 지정된 버퍼를 전달합니다

    Apple Projected Media Profile 애셋의 변환, 읽기 및 편집 방법을 설명했으니 이를 작성하는 과정에 대해서 이야기하겠습니다

    이 코드 예제에서는 단안 360 비디오를 작성합니다 AVAssetWriter를 사용하여 애셋을 생성합니다 CompressionPropertyKey 종류를 사용하여 직사각형 투영 종류를 지정합니다 압축 속성이 AVAssetWriterInput으로 전달됩니다 outputSettings 사전 속성 AVVideoCompressionPropertiesKey를 사용합니다

    APMP 콘텐츠 게시를 위한 추천사항을 알려드리겠습니다

    visionOS에서 재생에 대한 추천 제한입니다 비디오 코덱 인코딩 매개변수는 HEVC Main 또는 Main 10 (4:2:0 크로마 서브샘플링 포함)을 준수해야 합니다 Rec 709 또는 P3-D65 컬러 1차 검사를 권장합니다 스테레오 모드로는 단안경 또는 입체경이 있습니다 10비트에서 제안된 해상도 단안경은 7680 x 3840입니다 입체경의 경우 눈당 4320x4320입니다 프레임 속도는 해상도 및 비트 심도에 따라 다르며 10비트 단안 8K 또는 입체 4K에는 30fps가 권장됩니다 비트레이트 인코딩 설정은 콘텐츠에 따라 다르며 사용 사례에 맞게 적절히 선택해야 합니다 초당 최대 150메가비트를 초과하지 않는 것이 좋습니다 Apple에서 사용하는 MV-HEVC 스테레오 비디오 프로파일에 대해 “Apple HEVC 스테레오 비디오 상호 운용성 프로파일” 문서에서 알아볼 수 있습니다 developer.apple.com/kr에 있습니다 고급 비디오 품질 도구(AVQT)를 업데이트했습니다 3D, 공간 및 APMP 180도 및 360도 콘텐츠의 몰입형 형식을 지원하고 정확도 향상을 위해 알고리즘 또한 개선되었습니다 AVQT는 지각적 품질을 평가하고 압축된 비디오 콘텐츠의 비디오 인코더 매개변수를 미세 조정하는 데 유용합니다 HLS 티어 비트레이트 최적화에도 도움이 됩니다 새로운 기능에는 품질 지표 계산이 포함됩니다 직사각형 및 반직사각형 프로젝션의 인식을 사용하죠 HTTP Live Streaming 사양이 강화되어 Apple Projected Media Profile 스트리밍을 지원하고 Apple 개발자 웹사이트에서 얻을 수 있는 최신 HLS 도구도 업데이트되어 APMP 게시를 지원합니다 입체경 180 애셋 매니페스트의 예입니다 핵심적인 변화는 EXT-X-STREAM-INFORMATION 태그이며 REQ-VIDEO-LAYOUT 속성을 통해 스테레오 및 반직사각형 투영을 지정합니다 맵 분할에는 반직사각형 투영 및 스테레오 뷰 정보 시그널링 formatDescription 확장도 포함됩니다 HLS 비트레이트 계층 사다리 및 다른 HLS 작성 가이드 최신 정보는 “HLS 작성 사양”을 참고하세요 Apple Developer 웹사이트에 있습니다 공간 음향은 비디오만큼이나 중요합니다 매력적인 몰입형 경험을 조성할 때 더욱 그렇죠 현실 세계에서는 소리는 어디에나 존재합니다 이 경험을 재현하려면 음향 필드 전체를 표현할 수 있는 기술이 필요합니다 이러한 용도로 Apple Positional Audio Codec(APAC)을 설계했으며 APAC의 중요한 기능 중 하나는 사운드 필드를 충실하게 표현하도록 앰비소닉 오디오를 인코딩하는 것입니다 앰비소닉 오디오는 전 방향 공간 음향의 녹음, 믹싱 및 재생을 위한 기술입니다

    앰비소닉 녹음은 특정 스피커 레이아웃에 국한되지 않습니다 사운드 필드가 수학적으로 인코딩되기 때문입니다 여기에는 구면 하모닉 기저 함수 집합을 사용합니다

    앰비소닉 오디오 캡처는 마이크 배열을 사용합니다 3D 사운드 환경을 녹음하기 위해 배열되었죠 디지털 신호 처리를 사용하여 마이크 신호가 구면 하모니 요소를 지향하는 신호로 변환됩니다 이 모든 신호의 조합을 통해 기존 사운드 필드가 정확히 표현됩니다 앰비소닉의 ‘차수’는 오디오 믹스를 표현하기 위해 사용된 구형 컴포넌트의 수입니다 1차는 4개의 컴포넌트 또는 채널로 1개의 전방향 채널에 대응합니다 그리고 3개의 채널은 앞뒤, 좌우 및 상하 방향 오디오를 나타냅니다 2차 앰비소닉은 9개의 컴포넌트를 사용하며 3차 앰비소닉은 16개를 사용합니다 앰비소닉 차수가 클수록 공간 해상도가 높습니다 Apple Positional Audio Codec은 고효율의 공간 음향 코덱으로 공간 음향 인코딩에 권장됩니다 APMP 비디오 포함 앰비소닉을 포함하죠 APAC는 watchOS를 제외한 Apple 플랫폼에서 디코딩합니다 iOS, macOS 및 visionOS 플랫폼의 AVAssetWriter를 통해 접근 가능한 내장 APAC 인코더는 1차, 2차, 3차 앰비소닉을 지원합니다 이 코드는 AVAssetWriter로 1차, 2차, 3차 앰비소닉을 인코딩하는 데 필요한 최소 outputSettings을 보여 줍니다 APMP의 경우 APAC에 인코딩된 앰비소닉의 권장 비트레이트는 1차의 경우 초당 384킬로비트부터 3차의 경우 초당 768킬로비트까지 다양합니다 APAC 오디오는 분할 가능하고 HLS를 통해 스트리밍됩니다 3차 앰비소닉 트랙을 인코딩하는 APAC 오디오가 포함된 단일경 정방형 비디오의 예시입니다

    Apple Projected Media Profile에 대해 알아보았으니 앱 또는 서비스에 APMP 지원을 추가하여 몰입형 UGC의 재생 편집, 공유를 활성화해 보세요 카메라 회사인 경우 해당하는 대로 APMP를 통합하여 Apple 생태계 내에서 재생할 수 있도록 하세요 Apple Positional Audio Codec으로 몰입형 비디오와 함께 앱비소닉 마이크 캡처의 오디오 사운드 필드를 제공하세요 시청해 주셔서 감사합니다 이제 180도 입체 영상을 촬영해 보겠습니다

    • 8:58 - Recognize spherical v1/v2 equirectangular content

      // Convert spherical v1/v2 RFC 180/360 equirectangular content
      
      import AVFoundation
      
      func wasConvertedFromSpherical(url: URL) -> Bool {
      	let assetOptions = [AVURLAssetShouldParseExternalSphericalTagsKey: true]
      	let urlAsset = AVURLAsset(url: url, options: assetOptions)
      	
      	// simplified for sample, assume first video track
      	let track = try await urlAsset.loadTracks(withMediaType: .video).first!
      	
      	// Retrieve formatDescription from video track, simplified for sample assume first format description
      	let formatDescription = try await videoTrack.load(.formatDescriptions).first
      	
      	// Detect if formatDescription includes extensions synthesized from spherical
      	let wasConvertedFromSpherical = formatDescription.extensions[.convertedFromExternalSphericalTags]
      	
      	return wasConvertedFromSpherical
      }
    • 9:54 - Convert wide FOV content from supported cameras

      // Convert wide-FOV content from recognized camera models
      import ImmersiveMediaSupport
      
      func upliftIntoParametricImmersiveIfPossible(url: URL) -> AVMutableMovie {
      	let movie = AVMutableMovie(url: url)
      
      	let assetInfo = try await ParametricImmersiveAssetInfo(asset: movie)
      	if (assetInfo.isConvertible) {
      		guard let newDescription = assetInfo.requiredFormatDescription else {
      			fatalError("no format description for convertible asset")
      		}
      		let videoTracks = try await movie.loadTracks(withMediaType: .video)
      		guard let videoTrack = videoTracks.first,
      			  let currentDescription = try await videoTrack.load(.formatDescriptions).first
      		else {
            fatalError("missing format description for video track")
      		}
      		// presumes that format already compatible for intended use case (delivery or production)
          // for delivery then if not already HEVC should transcode for example
      		videoTrack.replaceFormatDescription(currentDescription, with: newDescription)
      	}
        return movie
      }
    • 10:58 - Recognize Projected & Immersive Video

      // Determine if an asset contains any tracks with nonRectilinearVideo and if so, whether any are AIV
      import AVFoundation
      
      func classifyProjectedMedia( movieURL: URL ) async -> (containsNonRectilinearVideo: Bool, containsAppleImmersiveVideo: Bool) {
      	
      	let asset = AVMovie(url: movieURL)
      	let assistant = AVAssetPlaybackAssistant(asset: asset)
      	let options = await assistant.playbackConfigurationOptions
      	// Note contains(.nonRectilinearProjection) is true for both APMP & AIV, while contains(.appleImmersiveVideo) is true only for AIV
      	return (options.contains(.nonRectilinearProjection), options.contains(.appleImmersiveVideo))
      }
    • 11:22 - Perform projection or viewPacking processing

      import AVFoundation
      import CoreMedia
      
      // Perform projection or viewPacking specific processing
      func handleProjectionAndViewPackingKind(_ movieURL: URL) async throws {
      	
      	let movie = AVMovie(url: movieURL)
      	let track = try await movie.loadTracks(withMediaType: .video).first!
      	let mediaCharacteristics = try await track.load(.mediaCharacteristics)
      	
      	// Check for presence of non-rectilinear projection
      	if mediaCharacteristics.contains(.indicatesNonRectilinearProjection) {
      		let formatDescriptions = try await track.load(.formatDescriptions)
      		for formatDesc in formatDescriptions {
      			if let projectionKind = formatDesc.extensions[.projectionKind] {
      				if projectionKind == .projectionKind(.equirectangular) {
      					// handle equirectangular (360) video
      				} else if projectionKind == .projectionKind(.halfEquirectangular) {
      					// handle 180 video
      				} else if projectionKind == .projectionKind(.parametricImmersive) {
      					// handle parametric wfov video
      				} else if projectionKind == .projectionKind(.appleImmersiveVideo) {
      					// handle AIV
      				}
      			}
      			if let viewPackingKind = formatDesc.extensions[.viewPackingKind] {
      				if viewPackingKind == .viewPackingKind(.sideBySide) {
      					// handle side by side
      				} else if viewPackingKind == .viewPackingKind(.overUnder) {
      					// handle over under
      				}
      			}
      		}
      	}
      }
    • 12:51 - Specify outputBufferDescription for a stereoscopic pair

      var config = try await AVVideoComposition.Configuration(for: asset)
      	
      	config.outputBufferDescription = [[.stereoView(.leftEye)], [.stereoView(.rightEye)]]
      
      	let videoComposition = AVVideoComposition(configuration: config)
    • 13:01 - Finish an asyncVideoCompositionRequest with tagged buffers

      func startRequest(_ asyncVideoCompositionRequest: AVAsynchronousVideoCompositionRequest) {
      	var taggedBuffers: [CMTaggedDynamicBuffer] = []
      	let MVHEVCLayerIDs = [0, 1]
      	let eyes: [CMStereoViewComponents] = [.leftEye, .rightEye]
      	
      	for (layerID, eye) in zip(MVHEVCLayerIDs, eyes) {
      		// take a monoscopic image and convert it to a z=0 stereo image with identical content for each eye
      		let pixelBuffer = asyncVideoCompositionRequest.sourceReadOnlyPixelBuffer(byTrackID: 0)
      		
      		let tags: [CMTag] = [.videoLayerID(Int64(layerID)), .stereoView(eye)]
      		let buffer = CMTaggedDynamicBuffer(tags: tags, content: .pixelBuffer(pixelBuffer!))
      		taggedBuffers.append(buffer)
      	}
      	asyncVideoCompositionRequest.finish(withComposedTaggedBuffers: taggedBuffers)
      }
    • 0:00 - 서론
    • 비선형 비디오 투영이 QuickTime 파일에 어떻게 표현되는지 살펴보겠습니다. 공간 음향을 사용하여 APMP 비디오를 만들고, 편집하고, 게시하기 위한 새로운 API를 알아보세요. 이 영상은 카메라 공급업체, 비디오 편집 소프트웨어 개발자, 몰입형 미디어, 특히 visionOS에 관심이 있는 앱 개발자를 위해 맞춤 제작되었습니다.

    • 1:12 - 직선형이 아닌 비디오 기본 사항
    • visionOS 26에서는 기존 2D, 3D, 공간 비디오를 넘어 다양한 비직선형 비디오 형식을 지원하는 Apple Projected Media Profile을 소개합니다. 이 프로필에는 180도 비디오에 대한 반직사각형 투영, 360도 비디오에 대한 정방형 투영, 광각 또는 어안 렌즈로 촬영한 wide FOV 비디오에 대한 매개변수 투영이 포함되어 있습니다. 정방형 투영은 위도와 경도 각도를 사용하여 구면 좌표를 직사각형 프레임에 매핑합니다. 매개변수 기반의 몰입형 투영은 초점 거리, 광학 중심, 기울기, 방사형 왜곡과 같은 렌즈 왜곡 매개변수를 고려하여 광각 렌즈에서 일반적으로 나타나는 배럴 왜곡을 보정합니다. 이를 통해 Wide FOV 비디오 콘텐츠를 더욱 정확하고 몰입감 있게 표현할 수 있습니다.

    • 3:42 - Apple Projected Media Profile 사양
    • Apple Projected Media Profile(APMP)을 사용하면 180, 360, Wide FOV 투영의 신호를 활성화합니다. Apple API를 사용하면 QuickTime 및 MP4 파일에 있는 APMP 콘텐츠를 작업할 수 있습니다. visionOS 26의 비디오 확장 사용(vexu) 상자 내의 새 상자는 투영 유형, 렌즈 매개변수, 뷰 패킹 배열을 지정합니다. 이러한 상자를 사용하면 모노스코픽 정방형 및 입체 180도 비디오와 같은 다양한 몰입형 미디어 형식을 표현할 수 있습니다.

    • 5:59 - APMP 콘텐츠 캡처 및 작업 흐름
    • 다양한 카메라와 편집 소프트웨어는 180도 및 360도 비디오를 촬영하고 편집하기 위해 APMP를 지원합니다. APMP 신호는 visionOS 기기에서 효율적으로 재생할 수 있도록 워크플로 전반에서 캡처, 편집, 전달 시 사용됩니다. APMP를 지원하지 않는 소프트웨어의 경우, 파일을 Apple Vision Pro로 전송하기 전에 구형 메타데이터와 avconvert 유틸리티를 사용하여 변환할 수 있습니다.

    • 8:33 - 애셋 변환 기능
    • macOS 및 visionOS 26에서는 APMP 파일 작업을 위한 새로운 기능이 도입됩니다. AVFoundation은 이제 호환되는 구면 애셋을 인식하고 APMP 신호를 합성합니다. visionOS 26에는 인기 있는 카메라 공급업체의 렌즈 투사 매개변수와 시야 모드에 대한 기본 지원 기능이 내장되어 있어 열 때 자동으로 변환할 수 있습니다. 새로운 프레임워크와 객체를 사용하여 Wide FOV 콘텐츠를 APMP 형식으로 변환하여 시스템 API에서 인식할 수 있도록 합니다.

    • 10:45 - APMP 비디오 읽기
    • visionOS의 업데이트된 CoreMedia 및 AVFoundation 프레임워크를 사용하면 시스템 미디어 API를 사용하여 APMP 비디오를 읽고 식별할 수 있습니다. ‘AVAssetPlaybackAssistant’는 직선형이 아닌 투영 구성을 확인하는 데 사용할 수 있고 ‘viewPackingKind’ 형식 설명 확장 프로그램은 몰입형 비디오 재생 환경을 위해 나란히 그리고 위아래에서 프레임 패킹을 지원합니다.

    • 11:47 - APMP 비디오 편집
    • AVFoundation의 AVVideoComposition 객체 및 CMTaggedDynamicBuffer는 입체 비디오 편집에 사용됩니다. CM 태그와 범주, 값이 포함된 CMTaggedDynamicBuffer는 왼쪽 눈과 오른쪽 눈에 대한 CVPixelBuffer와 같은 관련 버퍼를 그룹화합니다. 입체 편집을 활성화하려면 outputBufferDescription을 정의하고 입체 쌍을 구성한 후 태그가 지정된 버퍼를 구성 요청에 전달합니다.

    • 13:42 - APMP 비디오 게시
    • visionOS에 APMP 콘텐츠를 게시하려면 특정 색상 기본색과 해상도를 적용한 HEVC Main 또는 Main 10 인코딩을 사용해야 합니다. 스테레오 모드는 모노스코픽 또는 스테레오스코픽으로 구성되며, 권장 프레임 속도와 비트 전송률은 해상도에 따라 달라집니다. Apple Advanced Video Quality Tool(AVQT)이 몰입형 형식을 지원하고 비디오 품질을 평가하도록 업데이트되었습니다. HLS가 APMP 스트리밍을 지원하도록 향상되었고 업데이트된 툴 및 지침은 Apple Developer 웹사이트에서 확인 가능합니다.

    • 16:14 - Apple Positional Audio Codec
    • Apple Positional Audio Codec(APAC)은 몰입형 공간 음향 경험을 구현하기 위해 앰비소닉 오디오를 인코딩하도록 설계된 기술입니다. 앰비소닉 오디오는 전체 구면 음장을 녹음하고 재생하는 기술입니다. 수학적 함수와 다양한 마이크를 사용하여 어느 방향에서든 소리가 나오도록 합니다. APAC은 1차, 2차, 3차 앰비소닉을 지원하며, 차수가 높을수록 공간 해상도가 높아집니다. 이 코덱은 매우 효율적이며 APMP 비디오로 공간 음향을 인코딩하는 데 권장됩니다. APAC는 watchOS를 제외한 Apple의 모든 주요 플랫폼에서 디코딩하며 HLS를 통한 분할 및 스트리밍 오디오를 허용합니다.

Developer Footer

  • 비디오
  • WWDC25
  • Apple Projected Media Profile 알아보기
  • 메뉴 열기 메뉴 닫기
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    메뉴 열기 메뉴 닫기
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    메뉴 열기 메뉴 닫기
    • 손쉬운 사용
    • 액세서리
    • 앱 확장 프로그램
    • App Store
    • 오디오 및 비디오(영문)
    • 증강 현실
    • 디자인
    • 배포
    • 교육
    • 서체(영문)
    • 게임
    • 건강 및 피트니스
    • 앱 내 구입
    • 현지화
    • 지도 및 위치
    • 머신 러닝 및 AI
    • 오픈 소스(영문)
    • 보안
    • Safari 및 웹(영문)
    메뉴 열기 메뉴 닫기
    • 문서(영문)
    • 튜토리얼
    • 다운로드(영문)
    • 포럼(영문)
    • 비디오
    메뉴 열기 메뉴 닫기
    • 지원 문서
    • 문의하기
    • 버그 보고
    • 시스템 상태(영문)
    메뉴 열기 메뉴 닫기
    • Apple Developer
    • App Store Connect
    • 인증서, 식별자 및 프로파일(영문)
    • 피드백 지원
    메뉴 열기 메뉴 닫기
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(영문)
    • News Partner Program(영문)
    • Video Partner Program(영문)
    • Security Bounty Program(영문)
    • Security Research Device Program(영문)
    메뉴 열기 메뉴 닫기
    • Apple과의 만남
    • Apple Developer Center
    • App Store 어워드(영문)
    • Apple 디자인 어워드
    • Apple Developer Academy(영문)
    • WWDC
    Apple Developer 앱 받기
    Copyright © 2025 Apple Inc. 모든 권리 보유.
    약관 개인정보 처리방침 계약 및 지침