Upgrade to Pro — share decks privately, control downloads, hide ads and more …

空間再現力の鍵、APMPを読み解く

Avatar for Chiharu Nameki Chiharu Nameki
September 19, 2025

 空間再現力の鍵、APMPを読み解く

iOSDC JAPAN 2025, day0 (9/19)

空間ビデオや空間写真、Apple Immersive Video などの空間メディアの特徴の一つに「実物大」の再現があります。これによって視聴者はあたかも撮影場所にいるかのような臨場感を味わうことができます。「実物大」を再現するには撮影した映像そのものに加えて投影方法や撮影時のレンズの特性などのメタデータが必要になるのですが、WWDC25でこのメタデータの仕様や運用方針がアップデートされ、いよいよ情報のパーツが揃ってきました。

本トークでは Apple Projected Media Profile を詳しく読み解きつつ、Vision Pro がどのような描画を行っているのかを探っていきます。第一のゴールは撮影した映像にどんな値を設定すれば良い感じになるのか?が分かることですが、visionOS の振る舞いを知ることは空間メディアを視聴できるデバイスを考える上でもヒントになるはずです。

皆さんは空間メディアについてこう思ったことはありませんか?

Vision Pro は持っていないけれど iPhone で撮った空間写真を楽しみたい
180°や360°の動画をライブ配信し、そのままの体験を大勢に届けたい
イマーシブな体験ができるハイクオリティな映像コンテンツを多くの人に見て欲しい

Vision Pro のクオリティは素晴らしいですが、もし手軽に空間メディアを視聴できるデバイスがあって、それが普及していたら、と思わずにはいられません。この探究はこうしたデバイスの作成を考える上での足がかりになれるのではと考えています。

途中でiPhone / iPad の超広角カメラでWide FOVのAPMPが撮影可能であることに言及していますが、そのPoCのために作成したアプリを https://github.com/Ridwy/APMPCam に公開しています。撮影可能な視野角は105°程度で120°には及ばないはものの、Video Toolboxでvexuを書き込む例として、また手軽にAPMPを体験する手段としてご利用ください。

Avatar for Chiharu Nameki

Chiharu Nameki

September 19, 2025
Tweet

More Decks by Chiharu Nameki

Other Decks in Technology

Transcript

  1. גࣜձࣾϐΫηϥ Mac, iOS޲͚TVνϡʔφʔ, ಈըฤूΞϓϦ nana music ΦʔσΟΦΤϯδϯ, ΤϑΣΫλ։ൃ גࣜձࣾ AbemaTV

    Streaming Client Team ABEMA͕ରԠ͢ΔશͯͷσόΠεͷ ϓϨΠϠʔͷ࣮૷ͱ࠶ੜ඼࣭ͷ୲อ ܦྺ ஍σδͳͲͷ࢓༷Λݟͳ͕Β࣮૷͢Δ೔ʑ 3DΧϝϥ΍3DςϨϏͱग़ձ͏ ৽͍͠ಈըٕज़ʹੵۃతʹऔΓ૊ΜͰ͍͘ VR, XRͷ෼໺΋ͦͷҰͭ
  2. ۭؒϏσΦ Examples - HTTP Live Streaming, Apple • ࢹࠩʹΑΔԞߦ͖ײ •

    ࣮෺େ ͦͷ৔ʹ͍Δ͔ͷΑ͏ʹ ۭ͕ؒ࠶ݱ͞ΕΔ Ϣʔβʔ͕Vision Pro, iPhoneͰࡱӨͰ͖Δ
  3. Apple Immersive Video • ࢹࠩʹΑΔԞߦ͖ײ • ࣮෺େ ʴ • ໨ͷ෼ղೳʹഭΔߴղ૾౓

    • ࢹ໺ΛຒΊਚ͘͢ࢹ໺֯ • HDRʹΑΔࣗવͳޫͷදݱ ຅ೖײͷ͋Δߴ඼࣭ͳϓϩίϯςϯπ Apple 2024/07/18 ϓϨεϦϦʔεΑΓ
  4. @ WWDC25 Apple Immersive Video • ϝλσʔλͷಡΈॻ͖Λαϙʔτ͢Δ ImmersiveMediaSupport.framework ొ৔ •

    ϑΝΠϧܗࣜɺAIVUϑΝΠϧ͕ൃද • HLSͰͷ഑৴ํ๏΋໌Β͔ʹ #EXT-X-SESSION-DATA:DATA-ID="com.apple.hls.aivu.metadata",URI="venue.aime" → visionOS 26+ Ͱ Safari ΍ 3rd party੡ΞϓϦͰͷ࠶ੜ͕Մೳʹʂ
  5. APMPͷυΩϡϝϯτ  Apple Movie Profiles for Spatial and Immersive Media

    Profile definitions Version 0.9 (Beta) June 9, 2025 Note: The information contained within this document is preliminary and is subject to change. CODEC: MV-HEVC • ϞϊείϐοΫͷ࣌͸HEVC • ੍࡞࣌͸ྫ֎ʢProResͳͲʣ ϑΝΠϧϑΥʔϚοτ: QTFF / ISOBMFF • Video Extended Usage Box ʹ ౤ӨͷͨΊͷ৘ใΛهड़ ߴղ૾౓޲͚ͷHEVCΛ֦ு ࠨӈͷө૾ͷྨࣅੑ΋ར༻ͯ͠ ߴޮ཰ͰಈըΛѹॖʂ
  6. QuickTime File Format / ࠃࡍඪ४ ISO Base Media File Format

    • BoxʢQTFFͰ͸Atomʣ= ৘ใΛೖΕΔശ • Box͸֊૚ߏ଄Λ࣋ͭ • ༷ʑͳλΠϓͷBox͕͋Γɺ໨తʹ߹Θͤͯར༻͞ΕΔ • BoxͷλΠϓ͸4จࣈͷΩϟϥΫλʔͰද͞ΕΔ ಈը΍Ի੠ɺଟ༷ͳϝσΟΞͷίϯςφͱͯ͠ γϯϓϧ͔ͭॊೈੑΛඋ͑ͨϑΥʔϚοτ
  7. Video Extended Usage Box vexu ө૾ϑϨʔϜͷ༻్Λهड़͢ΔBox هड़͞ΕΔ৘ใͷྫʣ • ࢹࠩಈըͷ৔߹ɺࠨ໨༻ʁӈ໨༻ʁ •

    ౤Өํ๏ͷλΠϓɾύϥϝʔλ  QuickTime and ISO Base Media File Formats and Spatial and Immersive Media Format additions Version 1.9.8 (Beta) June 9, 2025 Note: The information contained within this document is preliminary and is subject to change.  Copyright © 2023-2025 Apple Inc. All rights reserved. Apple, the Apple logo and QuickTime are trademarks of Apple Inc., registered in the U.S. and other countries. | 2022-07-08 vexuͷ࢓༷͸ͪ͜Βʂ
  8. APMPͷυΩϡϝϯτ  Apple Movie Profiles for Spatial and Immersive Media

    Profile definitions Version 0.9 (Beta) June 9, 2025 Note: The information contained within this document is preliminary and is subject to change. ϓϩϑΝΠϧຖʹ ʮvexuʹͲΜͳ৘ใΛೖΕΔͷ͔ʯ ͕ఆΊΒΕ͍ͯΔ
  9. APMP ͷ vexu ͷྫ 360°ಈը vexu ! "## proj !

    "## prji ! "## Projection: Full Equirectangular (360°) 'equi' WWDC25 Learn about the Apple Projected Media Profile ˕ ࢹ໺֯ͷ࠶ݱ ˕ ࿪Έͷͳ͍ө૾ ˚ Ԟߦ͖ײ
  10. APMP ͷ vexu ͷྫ 180°εςϨΦಈը ˕ ࢹ໺֯ͷ࠶ݱ ˕ ࿪Έͷͳ͍ө૾ ˕

    Ԟߦ͖ײ vexu ! $## eyes ! ! ! $## stri ! ! ! ! ! $## Has left eye: True ! ! ! ! ! $## Has right eye: True ! ! ! ! ! $## Has additional views: False ! ! ! ! ! "## Eyes reversed: False ! ! ! $## hero ! ! ! ! ! "## Hero eye: left ! ! ! "## cams ! ! ! "## blin ! ! ! "## Baseline: 60.000mm (60000 micrometers) ! "## proj ! "## prji ! "## Projection: Half Equirectangular (180°) 'hequ'
  11. vexu ! $## proj ! ! ! "## prji !

    ! ! "## Projection: Parametric Immersive Media 'prim' ! "## lnsc ! "## lens ! $## lnhd ! ! ! $## Lens ID: 0 ! ! ! $## Algorithm: ProIM (Parametric Immersive) ! ! ! $## Domain: Color (RGB/YCbCr) ! ! ! "## Role: Main/only camera (monoscopic) ! $## rdim ! ! ! "## Dimensions: 3840x3840 ! $## ldst ! ! ! $## Radial distortion: k1=0.249550, k2=-0.140825 ! ! ! $## Tangential distortion: p1=-0.000000, p2=0.000000 ! ! ! "## Calibration limit: 90.00° ! $## lfad ! ! ! $## X params: [0.0, 1.0, 0.0] ! ! ! "## Y params: [0.0, 1.0, 0.0] ! APMP ͷ vexu ͷྫ Wide FOVͷಈը ! $## lnin ! ! ! $## Denominator shift: 29 (denominator: 536870912) ! ! ! $## Skew denominator shift: 31 (skew_denominator: 2147483648) ! ! ! $## Focal length X: 545768192 ! ! ! $## Focal length Y: 545768192 ! ! ! $## Principal point X: 268435456 ! ! ! $## Principal point Y: 268435456 ! ! ! $## Skew factor: 0 ! ! ! "## Projection offset (xi): -1.526945 ! "## lnex ! $## corg ! ! ! "## Origin: Baseline center (stereo camera baseline midpoint) 'blin' ! "## cxfm ! "## uqua ! "## Quaternion XYZ: [0.0, 0.0, 0.0] 'prim'
  12. Step 6 ϑϨʔϜௐ੔ σδλϧζʔϜ, ॖখ, εΫΤΞͳͲʹ૬౰ x′ = a x

    + b x ⋅ x + c x ⋅ x3 y′ = a y + b y ⋅ y + c y ⋅ y3
  13. ࣮͸ɺiPhoneͷΧϝϥͷ಺෦ߦྻ K ͸औಘՄೳ // Χϝϥ಺෦ߦྻͷऔಘΛ༗ޮԽ if let connection = videoOutput.connection(with:

    .video) { if connection.isCameraIntrinsicMatrixDeliverySupported { connection.isCameraIntrinsicMatrixDeliveryEnabled = true } } do { try camera.lockForConfiguration() // زԿֶత࿪Έิਖ਼Λ༗ޮԽ camera.isGeometricDistortionCorrectionEnabled = true // ζʔϜϑΝΫλʔΛ࠷খʢ௒޿֯ʣʹઃఆ camera.videoZoomFactor = camera.minAvailableVideoZoomFactor camera.unlockForConfiguration() } catch { ... isCameraIntrinsicMatrixDeliveryEnabled Sample Buffer͔Β K ͕औΕΔΑ͏ʹ͢Δ ࿪Έύϥϝʔλ͸औΕͳ͍ ͕ɺิਖ਼ͯ͠΋Β͑Δ
  14. औಘͨ͠஋ΛVideo Toolbox & AVAssetWriterͰॻ͖ࠐΊ͹ iPhoneͰ΋Wide FOVͷAPMP͕ࡱӨͰ͖Δ // lnhd Wide FOV༻ͷϨϯζઃఆ

    var lensConfig: [CFString: Any] = [ kVTCompressionPropertyCameraCalibrationKey_LensAlgorithmKind: kVTCameraCalibrationLensAlgorithmKind_ParametricLens, kVTCompressionPropertyCameraCalibrationKey_LensDomain: kVTCameraCalibrationLensDomain_Color, kVTCompressionPropertyCameraCalibrationKey_LensIdentifier: 0, kVTCompressionPropertyCameraCalibrationKey_LensRole: kVTCameraCalibrationLensRole_Mono ] // rdim ࢀরղ૾౓ let dimensionsDict = [ "Width": Float(imageSize.width), "Height": Float(imageSize.height) ] lensConfig[kVTCompressionPropertyCameraCalibrationKey_IntrinsicMatrixReferenceDimensions] = dimensionsDict // lnin ಺෦ߦྻ K var matrixCopy = intrinsicMatrix let intrinsicMatrixData = Data(bytes: &matrixCopy, count: MemoryLayout<matrix_float3x3>.size) lensConfig[kVTCompressionPropertyCameraCalibrationKey_IntrinsicMatrix] = intrinsicMatrixData ࢹ໺֯͸গ͠෺଍Γͳ͍΋ͷͷ…
  15. Wide FOVͷಈըͷۭؒ࠶ݱྗ ˕ ࿪Έͷͳ͍ө૾ • ࿪Έิਖ਼͋Γ ˚ Ԟߦ͖ײ • ࢓༷ͱͯ͠͸εςϨΦ΋Մೳ͕ͩɺ௨ৗɺΧϝϥͷϨϯζ͸1ͭͰࢹࠩಈը͸ࡱΕͳ͍ɻ

    • ΞΫγϣϯΧϜ༻్Ͱ͸ಈ͖͕ଟ͍ͨΊɺલޙؔ܎͸ൺֱత೺Ѳ͠΍͍͢ɻ ˕ ࢹ໺֯ͷ࠶ݱ • ໰୊ͳ͠ • ΑΓ޿͍ࢹ໺֯ΛΧόʔͰ͖Δͱ຅ೖײ͕ߴ·Δ
  16. Google Spherical Video V1/V2 • ౤Өํࣜ͸ Equirectangular, Cubemap ͳͲ •

    εςϨΦείϐοΫಈը΋දݱՄೳ • Φʔϓϯιʔε ઌߦٕज़ • 360°ಈըͷσϑΝΫτελϯμʔυ • YouTube, vimeo ΍ Meta ͷ ϓϥοτϑΥʔϜͳͲͰ഑৴Մ YouTube Live, Facebook Live΋' • ΄ͱΜͲͷ360°Χϝϥ͕ରԠ Vision ProͰ։࣌͘ʹAPMPʹม׵Մ
  17. APMPͷڧΈ Wide FOVʹରԠ • ϝλσʔλΛ͚ͭΔ͚ͩͰྑ͍ Google Spherical Video͸ө૾Λ Equirectangular౤ӨͳͲʹม׵͢Δඞཁ͕͋Δ •

    ࠶ੜ͢Δͱ͖ʹద੾ͳϞσϧͰ࿪Έ͕ิਖ਼͞ΕΔͨΊɺਖ਼ۭ͕ؒ͘͠࠶ݱ͞ΕΔ • 120°Ҏ্ͷ޿֯ɾ௒޿͕֯ࡱӨͰ͖ΔΧϝϥ͸ଟ͘ɺજࡏతͳ੄໺͕޿͍ ߴ඼࣭ • MV-HEVCͷ࠾༻ • ഑৴࣌͸ 4K @ 30fpsɾ2K @ 90fps, 84Mbps (Stereoscopicͷ৔߹)Λਪ঑ HLSͱͷ਌࿨ੑ • ॳΊ͔ΒHLSͰ഑৴͢Δ͜ͱΛߟྀͨ͠ઃܭɻHLSଆ΋APMPͷͨΊʹ֦ு͞Εͨɻ
  18. ۭؒ࠶ݱͷͨΊͷ࠷ޙͷϙΠϯτ σόΠεͷࢹ໺֯ = දࣔ͞ΕΔࢹ໺֯ ͕Ұக͢ΔΑ͏ʹௐઅ Mobile phone Lens Eye εϚϗͱತϨϯζʹΑΔ؆қVRγεςϜͷ৔߹

    // RealityKit ͳΒ let cameraEntity = PerspectiveCamera() cameraEntity.camera.fieldOfViewInDegrees = {σόΠεͷࢹ໺֯}
  19. Appleެࣜ Sample Code WWDC25 Learn about the Apple Projected Media

    Profile https://developer.apple.com/videos/play/wwdc2025/297/ Reading multiview 3D video files https://developer.apple.com/documentation/avfoundation/media_reading_and_writing/ reading_multiview_3d_video_files macOS 14.0+ MV-HEVC → CVPixelBuffer Converting projected video to Apple Projected Media Profile https://developer.apple.com/documentation/AVFoundation/converting-projected-video-to-apple-projected- media-profile macOS 26.0+ Equirectangular / Half-equirectangular ͷಈը → APMP