FC2ブログ

頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


iPhone X系の背面デュアルカメラで「電脳コイル」ごっこがしたい

iPhoneには背面に広角と望遠のレンズを持つ機種があるが、この二つのカメラから同時に動画を得たいと思いいろいろと試してみた。
iPhone 7,8のPlusだと二つのレンズが(縦に持った場合)横だったが、iPhone X系から縦に並ぶようになった。
つまり、これをLandscapeにするとカメラは横に並ぶ。
この二つのカメラからの動画をそれぞれ並べ、VRゴーグルで見ると風景が立体に見えるはず(もちろん一般に販売されてるVRゴーグルにはiPhoneの背面カメラ用の穴なんてないから穴を開ける必要がある)。
さらにARKitで現在のカメラ位置や姿勢を得て、現実の風景にSceneKitで物体を重ねて表示させたら「電脳コイル」ごっこができるんじゃね?!

VRアプリのスクリーンショット

↑これは以前リリースしたiOSアプリでVRゴーグルで使うものなんだけど、こんな感じで左右微妙に違うCGのオブジェクトを表示されれば、景色もCGも立体で見ることができる!デンスケが俺の部屋をうろうろと歩いたりするんだ!
APPLEもそのためにカメラの位置を変更したんだよね!
などと妄想したのだった。


デンスケのぬいぐるみ

↑ちなみにデンスケというのは「電脳コイル」ってアニメに出てくるキャラで画像はそのぬいぐるみ。



そんなわけで二つの背面カメラからのビデオ情報を得たいのだが、、、

- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection;
↑AVCaptureVideoDataOutputSampleBufferDelegateのこのメソッドが双方のカメラごとにコールされたらなんとかなるはずだ。sampleBufferから画像は生成できるから。

基本的にはAVCaptureSessionオブジェクトに、AVCaptureDeviceInputオブジェクトとAVCaptureVideoDataOutputオブジェクトをaddするので、これらをカメラごとに複数用意するなどいろいろ試行錯誤したのだが、、、

実行結果スクショ

↑二つ作成したAVCaptureVideoDataOutputオブジェクトのポインタをログで確認。
上記delegateメソッド内でコールされてるのはどっちのかを確認している。なおAVCaptureVideoDataOutputはAVCaptureOutputのサブクラス。
よく見ると最初だけ片方のoutputが来てるが、後はずっともう片方のデータしか来ていない。

現在のiOS 12.1では無理っぽい。それらしいプロパティ、メソッドなさそうだし。

iPhone背面のデュアルカメラで同時に写真を得る
↑ここでも書いてるけどデュアルカメラで同時に静止画が撮影できるようになったのがiOS 11.0からだしなあ。まだ時間かかるのかもしれない。

ios - iPhone 7 Plus - AVFoundation dual camera - Stack Overflow
↑ビデオは無理だよって書いてる。公式フォーラムの”中の人”ではないので参考までに。



iOS 12.1
Xcode 10.1

<< iPhone XS Maxでマインクラフトをプレイする時にホームバーが邪魔  TopPage  iPhone 7 PlusからiPhone XS Maxへの機種変更時にやったこと >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1245-1d10d49c




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad