iOS 13 から使えるようになった AVCaptureMultiCamSession
を使って、複数カメラデバイスで同時にビデオ録画するアプリです。
- 検証端末 : iPhone 11 Pro Max
- 検証 OS : iOS 13.0・iOS 13.1
- 撮影される動画ファイルの仕様 : 1920x1080px・29.58fps (バックカメラ・フロントカメラともに同じ)
- iPhone 11 Pro Max には合計4つのレンズが付いているが、4つを同時に使用することができなかった
AVCaptureDevice.DiscoverySession#supportedMultiCamDeviceSets
で利用可能なデバイスの組合せを見ると、最大で3カメラ分までの定義しか見つからない- 無理やり4つ目のカメラを追加しようとすると、4つ目の
addInputWithNoConnections()
実行時にエラーになる。self.avCaptureMultiCamSession.addInputWithNoConnections(avCaptureDeviceInput)
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[AVCaptureMultiCamSession addInputWithNoConnections:] These devices may not be used simultaneously. Use -[AVCaptureDeviceDiscoverySession supportedMultiCamDeviceSets]'
- 参考 : https://gist.github.com/Neos21/1ef84b2114a9946663e130ffd210b742
- 現時点では、最大3つのレンズでの同時撮影が可能
- バックグラウンドに移ると、デバッグコンソールに以下のエラーが出力されている
Can't end BackgroundTask: no background task exists with identifier 1 (0x1), or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug.
- Apple 公式のサンプルコード AVMultiCamPiP: Capturing from Multiple Cameras でも同じエラーが表示されていた
- 解決方法不明
- 作者の Swift ちから不足によるバギーな挙動
- アプリがバックグラウンドに移動した時の処理やエラーハンドリング、iPhone 11 Pro Max 以外の端末で動かした場合の処理が不十分
- うまくカメラが起動しなかったり、フォトライブラリへの保存に失敗する場合があったり…
- プルリクで助けてください