質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
ARKit

ARKitは、iPhone/iPad向けのARアプリ用フレームワーク。iOS11以降に標準搭載されています。これを用いたARアプリは、特殊なデバイスがなくてもiPhone/iPadの単眼カメラを使用して動作することが可能です。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

811閲覧

swiftのARで認識した画像の上に動画を配置し自動再生したい

k373

総合スコア17

ARKit

ARKitは、iPhone/iPad向けのARアプリ用フレームワーク。iOS11以降に標準搭載されています。これを用いたARアプリは、特殊なデバイスがなくてもiPhone/iPadの単眼カメラを使用して動作することが可能です。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2019/03/20 18:43

編集2019/03/20 18:46

実現したいこと
ARで画像認識を行い、その上に動画(mp4)を自動再生したい。

困りごと
画像認識はでき、その上に動画であろう平面オブジェクトがグレー色で配置される。(何も配置されない場合は真っ白の四角が配置される)
しかし、その動画らしき平面オブジェクトは再生されない。

現状のコード

import UIKit import SceneKit import ARKit import SafariServices class ViewController: UIViewController, ARSCNViewDelegate { @IBOutlet var sceneView: ARSCNView! let referenceImages = ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", bundle: Bundle.main) override func viewDidLoad() { super.viewDidLoad() sceneView.delegate = self let scene = SCNScene() sceneView.scene = scene } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) let configuration = ARImageTrackingConfiguration() configuration.trackingImages = referenceImages! sceneView.session.run(configuration) } func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) { guard let imageAnchor = anchor as? ARImageAnchor else { return } let referenceImage = imageAnchor.referenceImage let width = CGFloat(referenceImage.physicalSize.width) let height = CGFloat(referenceImage.physicalSize.height) let videoHolder = SCNNode() let videoHolderGeometry = SCNPlane(width: width, height: height) videoHolder.transform = SCNMatrix4MakeRotation(-Float.pi / 2, 1, 0, 0) videoHolder.geometry = videoHolderGeometry      //この辺りが原因? if let videoURL = Bundle.main.url(forResource: "img.scnassets/route", withExtension: "mp4"){ setupVideoOnNode(videoHolder, fromURL: videoURL) } node.addChildNode(videoHolder) videoHolder.name = "route" } func setupVideoOnNode(_ node: SCNNode, fromURL url: URL){ var videoPlayerNode: SKVideoNode! let videoPlayer = AVPlayer(url: url) videoPlayerNode = SKVideoNode(avPlayer: videoPlayer) videoPlayerNode.yScale = -1 let spriteKitScene = SKScene(size: CGSize(width: 1000, height: 1000)) spriteKitScene.scaleMode = .aspectFit videoPlayerNode.position = CGPoint(x: spriteKitScene.size.width/2, y: spriteKitScene.size.height/2) videoPlayerNode.size = spriteKitScene.size spriteKitScene.addChild(videoPlayerNode) node.geometry?.firstMaterial?.diffuse.contents = spriteKitScene videoPlayerNode.play() videoPlayer.volume = 5 } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { guard let location = touches.first?.location(in: sceneView), let result = sceneView.hitTest(location, options: nil).first else { return } let node = result.node if node.name == "route" { let safariVC = SFSafariViewController(url: URL(string: "https://images.google.com/?gws_rd=ssl")!) self.present(safariVC, animated: true, completion: nil) } } }

どのようにすれば動画が再生されるか、ご教授ください。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

動画の形式をmp4ではなく、MOVで撮影したらすんなり再生されました。

投稿2019/03/21 07:25

k373

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問