2022-06-08

iOS 16, Android 13 メディア関連早見表

iOS 16とAndroid 13の変更点の中で、気になったところをピックアップ。なお、流し読みしているのでこの記事に正確性はない。挙動については各々で確かめてほしい。

iOS 16

Swift Concurrencyが実装されたことにより、MainActor関連で変更点が多いが、ここでは目新しいものをピックアップする。また、新しいiPhoneやiPadが出てきた際にもひっそり追加される場合もあるので注意。

AVRouting

Google Castなど、AirPlay以外の手段で外部出力をする際に、従来はサードパーティー側でピッカーを実装する必要があったが、AVRoutingを使うと、OS標準のルーティング選択モーダルからカスタム出力を実装することが出来る。

本来の目的は上記に書いてあることだが、それ以外にも、このAVRoutingを使って、配信機能なども実装できそうだ。

また、AVRoutingでデバイス検出を行うExtensionも実装された。

Background Assets

アプリインストール時に、ゲームのアセットデータなどをあらかじめダウンロードすることが可能となった。従来はアプリ起動時にフォアグラウンドになっている際しかダウンロードできなかったが、Background Assetsはいわばバッチのような形で、バックグラウンド時でもダウンロードを走らすことが出来るようになった。

Accelerate

BNNS(Basic neural network subroutines)とvImageの命令が追加。vImageは画像処理の専門命令が集まったもので、今回のアップデートで、フィルタ処理やデコード、エンコードなどの処理がより柔軟にできるようになった。

AudioToolbox

AudioUnit v3において、ホストとAUプラグイン側でメッセージがやり取りできる messageChannel が実装された。これにより、AUに独自のメッセージを送ることが可能に。

AVFoundation

AVURLAssetには、ダウンロード時にUserAgentが指定できるようになった。しかし、UserAgentを廃止する方向で進んでいる中で今更ではある。

また、AVAssetで送信する際に X-Playback-Session-Id を付与できるようになった。このヘッダはUUIDを付与することにより、今再生しているセッションをサーバ・クライアント側で管理できるようになる。必須項目ではない。

AVMutableMetadataItemでは、メタデータ取得の際に文字列と数値、日付とデータ型を取得できるようになった。

AVPlayerでは、再生する際にレートを指定できるようになった。

また、AVAssetPlaybackAssistantでは、Assetを再生する前にロードするアシスタントが作れるようになった。これによりプリロードが出来るはず。

AVAssetPlaybackConfigurationOptionでは、ステレオビデオ(VRヘッドセットで左右の動画)再生がサポートできるようになった。先ほどのAssistantと一緒に、ステレオビデオ再生時の別アングルプレイリストのプリロードも実現できそうだ。AppleがVRヘッドセットデバイスを出すのだろうか?

AVPlayerItemでは、現在再生中の情報を取得できるようになった。

AVPlayerInterstitialEventでは、初期化処理とイベントキューが新たに追加された。これはSCTE-35のCUE-INなどをする際に使えるイベントで、映像の間に何か挿入したいときなどに使う。

その他、AVAssetをロード完了かどうかを確認する isEntireLengthAvailableOnDemand や、CMSampleBufferをより使いやすくしたAVSampleBufferの生成がしやすくなったり、マルチタスク時にカメラが使えるようになったり、ハードウェアコストの取得により、ハードウェアの帯域幅がおおよそ分かるようになった。

面白い部分で言うと、StudioLightという仮想ライトが使えるようになったり、ContinuityCameraによりリアカメラをmacOSのカメラとして使えるようになった。

AVCompositionでは様々な情報にアクセスできるようになり、それに伴いかなりの変更点がある。

AVVideoCompositionでは、CoreImageフィルターを適用できるようになった。

AVKit

AVPlayerViewControllerでは、速度とフレーム周りで改善された。

CoreAudioKit

CAAUEQGraphViewでは、リージョンが追加、編集、削除などできるようになった。

その他、各Viewでもかなり改善されている。

CoreAudioType

Audio Channel LabelsとLayoutでは、サラウンドチャンネルがサポートされた。

VideoToolbox

エンコーダーに固定ビットレート、バッファカウント、QPを渡せるようになった。

またPixelBufferを回転させることも可能になった。

Android 13

Androidは例年通り、Developer Previewの時はあまり変更点が公開されず、Betaになった際に変更になる場合が多い。したがって、Developer Preview 2 時点の情報となる。

android.media

Spatializerでは、ヘッドトラッキングする際のListenerが追加された。

ImageReader/Writerでは新たにBuilderクラスが追加され、今後はこちらに移行すると思われる。

android.bluetooth

Bluetooth A2DPでソースデバイスのコーデック構成を取得できるようになった。サンプリングレート、ビット深度、コーデックタイプが含まれる。

また、Bluetooth LE Audioのサポートも入った。

android.graphics

AGSL(Android Graphics Shading Language)を組み込めるRuntime Shaderが追加された。

android.hardware

ハードウェアのリソース解放を検知できるSyncFenceが実装された。

また、HardwareBufferのみだと色情報がないため、DataSpaceで色情報が識別できるようになった。

android.media.session

MediaSessionManagerでは、OnMediaKeyEventSessionChangedListenerにより、メディアキーセッションが特定のメディアセッションに変更された場合に通知できるようになった。

android.media.tv

放送信号からDSM-CCやPES、TSのリクエスト、レスポンスが実装された。おそらく日本向けである。元々この辺りは各ベンダーごとに独自実装していた部分だが、Tiramisuでようやく共通化された。