🔥

複数のOS環境でのApple HEVC Stereo Videoの制作試み

2024/08/25に公開

背景

Apple HEVC Stereo Video(以下Apple Spatial Video)を制作し、ストリーミングするサービスを構築する予定です。
Apple Spatial Videoは左目用動画と右目用動画を別途撮影して合成する形で作成しようとしています。
ですから動画配信サービスを構築するためには、左目用動画と右目用動画をそれぞれ配信してもらいApple Spatial Videoを自動で制作するサービスが必要です。

Ubuntu環境でのApple Spatial Video制作の試み

最近ほとんどのサーバー及びサービスはlinux環境に構築することが大勢であるため、
まずlinuxでApple Spatial Videoを製作できる環境を構築できないか確認してみました。

githubを見るとApple Spatial Videoを製作するサンプルがあります。
https://github.com/sturmen/SpatialMediaKit
コードを見ると、プロジェクトがswiftとobjective-cで作成されています。
またApple開発者サイトでもSideBySide動画をMV-HEVC動画に変換するプロジェクト(Betaバージョン)を提示しています。
https://developer.apple.com/documentation/avfoundation/media_reading_and_writing/converting_side-by-side_3d_video_to_multiview_hevc_and_spatial_video
このプロジェクトの場合も、ソースはswiftで作成されています。

Ubuntuではobjective-cとswiftで作成されたプロジェクトのビルドが全て可能なので、上記ツールのビルドを試してみました。

進行過程

clangのインストールおよびobjective-cファイルのコンパイルテスト

sudo apt install clang libicu-dev libpython3.8 libbsd0 libedit2 libsqlite3-0 libxml2 libssl-dev tzdata zlib1g-dev libcurl4-openssl-dev
sudo apt install build-essential
sudo apt install gnustep gnustep-devel gnustep-base-common gnustep-base-runtime gnustep-base-doc

. /usr/share/GNUstep/Makefiles/GNUstep.sh
source ~/.bashrc
mkdir test
cd test
vim hello.m
clang `gnustep-config --objc-flags` -I/usr/lib/gcc/x86_64-linux-gnu/9/include -I /usr/include/GNUstep -L /usr/lib/GNUstep hello.m -o hello -lgnustep-base  -lobjc -fconstant-string-class=NSConstantString
./hello 

ここまでして、簡単なobjective-cファイル(hello.m)のビルド及び実行が成功しました。

swiftの設置

wget https://download.swift.org/swift-5.10.1-release/ubuntu2004/swift-5.10.1-RELEASE/swift-5.10.1-RELEASE-ubuntu20.04.tar.gz
tar xzf swift-5.10.1-RELEASE-ubuntu20.04.tar.gz 
sudo mv swift-5.10.1-RELEASE-ubuntu20.04 /usr/local/swift
vim ~/.bashrc 
source ~/.bashrc
swift --version

SpatialMediaKitプロジェクトのビルド時の依存性のため、libobjc2プロジェクトで一部のヘッダーファイルを追加でコピー

git clone https://github.com/gnustep/libobjc2.git
cd libobjc2
sudo cp objc/Availability.h /usr/lib/gcc/x86_64-linux-gnu/9/include/objc/
sudo cp objc/blocks_runtime.h /usr/lib/gcc/x86_64-linux-gnu/9/include/objc/
sudo cp objc/objc-visibility.h /usr/lib/gcc/x86_64-linux-gnu/9/include/objc/

SpatialMedia Kitプロジェクトのビルド

wget https://github.com/sturmen/SpatialMediaKit/archive/refs/heads/main.zip
unzip main.zip 
cd SpatialMediaKit-main/
swift package clean
swift build --verbose

結果

linuxにインストールされているobjective-cがMacOSにインストールされているobjective-cとは異なるため、実際のビルド時にはinclude path、lib pathの設定と関連して様々な問題が発生しました。
これらのイシューを解決しながら一歩ずつ前進しましたが、結局SpatialMediaKitプロジェクトのソースにAVFoundationライブラリに対する依存性があるため、ビルドに成功できませんでした。
AVFoundation ライブラリはMacOSと密接な依存性があるため、別途設置することはできません。
結局、AVFoundationへの依存性のあるプロジェクトはLinuxでビルドできませんでした。

https://developer.apple.com/documentation/avfoundation/media_reading_and_writing/converting_side-by-side_3d_video_to_multiview_hevc_and_spatial_video の場合もやはりAVFoundationライブラリへの依存性があるため、ビルドを試みませんでした。

結論

試験過程を通じて次の内容について知ることができました。

Apple Spatial Videoと関連したプロフィールはAppleで提示し、現在としてはこのようなプロフィールに合う動画を制作できるツールはMacOSのAVFoundationライブラリだけです。
したがってApple Spatial VideoはMacOS環境でのみ製作が可能です。

ちなみにFFMPegコミュニティでもApple Spatial Videoを制作するための議論がありますが、実装予定は未定です。
https://github.com/HandBrake/HandBrake/issues/5710
https://trac.ffmpeg.org/ticket/10579
もしFFMpegでもApple Spatial Video変換が可能になればLinux環境でのSpatial Video変換も可能になると思います。

VMWare Workstationに設置されたMacOSでのApple Spatial Video制作の試み

LinuxでのApple Spatial Video作成が失敗した後、MacOSでは正常に制作できるか確認しようとしました。

進行過程

私にはMacOS を専用に実行するApple 系の装置がないので、WindowsにVMWare Workstation をインストールしてMacOS VM Image 作成する形でMacOS 環境を構築しました。
MacOS最新バージョン(14.6)とXCodeをインストールしました。
https://github.com/sturmen/SpatialMediaKit プロジェクトをダウンロードしました。
Terminalでプロジェクトをビルドしました。

swift build

結果

ビルドされたバイナリを実行しようとすると、HEVC変換関数はARM CPUでのみ実行されるというメッセージが表示され、実行が失敗しました。
私のコンピュータはIntel i5なので、VMWare Workstationの画像の場合もIntel CPUで動作している状況です。
結局、私のコンピューターではApple Spatial Videoを製作することができませんでした。

結論

試験過程を通じて次の内容を知ることができました。

Apple Spatial Videoは専用のApple装置でのみ製作が可能です。

そこでApple専用の装置を購入することにしました。

VideogLabo

Discussion