- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发 ARKit 应用程序,我正在检测平面图并使用 YoutubePlayerView 添加 YouTube 视频 pod 浮出水面。我设法检测到表面并添加了 YouTubePlayerView。
播放 YourTube 视频中的音频但不显示视频。
有没有人以前遇到过同样的问题。
以下是我的代码。
import UIKit
import SceneKit
import ARKit
import YoutubePlayerView
class ViewController: UIViewController, ARSCNViewDelegate {
@IBOutlet var sceneView: ARSCNView!
let videoPlayerNode = SCNNode()
override func viewDidLoad() {
super.viewDidLoad()
// Set the view's delegate
sceneView.delegate = self
// Show statistics such as fps and timing information
sceneView.showsStatistics = true
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Create a session configuration
let configuration = ARWorldTrackingConfiguration()
// Enable horizontal plane detection
configuration.planeDetection = .horizontal
// show Feature Points
sceneView.debugOptions = [ARSCNDebugOptions.showFeaturePoints]
// Run the view's session
sceneView.session.run(configuration)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Pause the view's session
sceneView.session.pause()
}
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
if let planeAnchor = anchor as? ARPlaneAnchor {
let videoPlayerGeometry = SCNPlane(width: CGFloat(planeAnchor.extent.x), height: CGFloat(planeAnchor.extent.z))
DispatchQueue.main.async {
let playerView = YoutubePlayerView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
let playerVars: [String: Any] = [
"controls": 1,
"modestbranding": 1,
"playsinline": 1,
"autoplay": 1,
"origin": "https://youtube.com"
]
playerView.delegate = self
playerView.loadWithVideoId("w277oTvoKAM", with: playerVars) // CdXesX6mYUE
videoPlayerGeometry.firstMaterial?.diffuse.contents = playerView
self.videoPlayerNode.geometry = videoPlayerGeometry
self.videoPlayerNode.eulerAngles.x = -.pi / 2
node.addChildNode(self.videoPlayerNode)
}
}
}
}
extension ViewController: YoutubePlayerViewDelegate {
func playerViewDidBecomeReady(_ playerView: YoutubePlayerView) {
print("Ready")
playerView.fetchPlayerState { (state) in
print("Fetch Player State: \(state)")
}
func playerView(_ playerView: YoutubePlayerView, didChangedToState state: YoutubePlayerState) {
print("Changed to state: \(state)")
}
func playerView(_ playerView: YoutubePlayerView, didChangeToQuality quality: YoutubePlaybackQuality) {
print("Changed to quality: \(quality)")
}
func playerView(_ playerView: YoutubePlayerView, receivedError error: Error) {
print("Error: \(error)")
}
func playerView(_ playerView: YoutubePlayerView, didPlayTime time: Float) {
print("Play time: \(time)")
}
func playerViewPreferredInitialLoadingView(_ playerView: YoutubePlayerView) -> UIView? {
let view = UIView()
view.backgroundColor = .red
return view
}
}
谢谢!
最佳答案
主要问题是使用 UIView
而不是使用 SpriteKit 的场景或 AVPlayer:
videoPlayerGeometry.firstMaterial?.diffuse.contents = skScene
或:
videoPlayerGeometry.firstMaterial?.diffuse.contents = avPlayer
以下是 .contents
实例属性的可能候选者:
您还错过了网址中的 /watch?v=
:
let playerVars: [String: Any] = [ "controls" : 1,
"modestbranding" : 1,
"playsinline" : 1,
"autoplay" : 1,
"origin" : "https://www.youtube.com/embed/"
]
playerView.loadWithVideoId("w277oTvoKAM", with: playerVars)
如果它不起作用,请尝试 https://www.youtube.com/embed/w277oTvoKAM
。
此外,全局声明您的 playerView
属性。并将 playerView.delegate
放入 viewDidLoad()
方法中:
override func viewDidLoad() {
super.viewDidLoad()
sceneView.delegate = self
playerView.delegate = self // a delegate for using playerView() methods
}
附言
在 ARKit 应用中播放视频作为纹理
的常规方法不适用于 YouTube 视频。但是,如果您对这种方法感兴趣,我将在此处编写它(以了解如何提供纹理):
func renderer(_ renderer: SCNSceneRenderer,
didAdd node: SCNNode,
for anchor: ARAnchor) {
if let planeAnchor = anchor as? ARPlaneAnchor {
let playerGeo = SCNPlane(width: CGFloat(planeAnchor.extent.x),
height: CGFloat(planeAnchor.extent.z))
DispatchQueue.main.async {
// here's how your video would be in a full screen mode
// let videoURL = URL(string: "https://www.youtube.com/embed/w277oTvoKAM")
let videoURL = URL(fileURLWithPath: "Assets/video.mp4")
let videoNode = SKVideoNode(url: videoURL!)
let skScene = SKScene(size:
CGSize(width: playerGeo.width * 1280,
height: playerGeo.height * 720))
videoNode.position = CGPoint(
x: skScene.size.width / 2,
y: skScene.size.height / 2)
videoNode.size = skScene.size
skScene.addChild(videoNode)
playerGeo.firstMaterial?.diffuse.contents = skScene
videoNode.play()
let playerNode = SCNNode()
playerNode.geometry = playerGeo
playerNode.eulerAngles.x = -.pi / 2
node.addChildNode(playerNode)
}
}
}
YouTube 视频在 WKWebView
中播放,但它是 2D 的。使其适用于 3D 几何是一项挑战。
关于ios - 在 ARKit 上使用 YoutubePlayerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58138652/
我正在尝试绘制一个可以帮助某人了解元素尺寸的盒子,但我一直遇到一个问题,因为当我将物理元素放在飞机顶部时,我首先需要识别飞机,所以我的盒子被画了进去项目的前面。 是否有可能以某种方式克服这一点? 最佳
我正在用 swift 4 制作一个简单的标尺 ARKit 应用。 但我遇到的问题是,有时我的措施有一点偏差或完全偏差。我认为,这可能是因为 ARkit 校准不当,没有正确检测到我的表面。 我目前在 3
我一直在用 ARKit 构建一个门户,虽然构建一个虚拟环境很容易创建和移动,但我想让我进入一个重复播放 360 度视频的环境。我认为可以通过将 360 度视频作为纹理包装到球体来完成,但 ARKit
我正在尝试向场景中的每个节点添加动画。我的一个问题是,在层次结构中 - 我应该将动画添加到哪个节点。我认为它是由您实际看到的内容所代表的节点,这将是网格对象...但我有一个持有两个灯和网格对象的节点.
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 2 年前。 Improve t
我正在使用 ARKit 进行 AR 项目。 我想添加一个 UIView 到 ARKit 场景。当我点击一个对象时,我想获取该对象旁边的“弹出窗口”信息。此信息位于 UIView 中。 是否可以将此 U
我想使用 Vuforia 检测标记并在其上放置一个 3d 对象。从那时起,我想在我的应用程序中使用 ARKit。我如何知道检测到的标记或 3d 对象的 ARKit 世界变换? 我正在使用相同的 Vie
我上下阅读了所有 ARKit 类的完整文档。我没有看到任何描述实际获取用户面部纹理的能力的地方。 ARFaceAnchor 包含 ARFaceGeometry(由顶点组成的拓扑和几何)和 BlendS
我正在使用 ARKit 2 和 ARWorldMapData 我创建了一个 AR 世界,它可以使用来自 link here 的 map 数据等识别您的周围环境.现在我正在尝试弄清楚如何获取所有特征点并
我正在使用 ARKit 将虚拟对象放置在真实环境中。它在 Xcode 9 和 iOS 11 中运行良好。但是当我更新 Xcode 和 iOS 时,如果我将虚拟对象放在检测到的平面上,它就会卡住,如果我
我收到关于 init() 的错误消息不适用于 ARLightEstimate . 代码: class LightSensorManager { let lightEstimate = ARLi
我需要使用 ARKit 检测虚拟对象何时与现实世界对象接触。 有什么办法可以查出来吗? 最佳答案 首先您需要创建一个符合OptionSet 协议(protocol)并具有bitset 类型属性的碰撞类
我想实现类似的东西 ARCore's raycast method它采用世界空间坐标中的任意光线而不是屏幕空间点: List hitTest (float[] origin3, int originO
嗨,我正在尝试在节点周围产生发光效果。我使用了 SCNNode 过滤器属性并设置为 CIFilter 数组。 仅当节点后面没有我不理解的节点时,它才起作用并呈现。我尝试设置渲染顺序和 readDept
我正在尝试重现 ARCamera 的项目点函数,但由于某种原因,这些值没有正确匹配。我正在使用 ARCamera 的投影矩阵和 View 矩阵并应用基本的 CG 透视变换数学,(PV) * p,但 N
我想获得所有三个轴的旋转度数。我正在尝试用横向模式来实现。当从左向右旋转设备(Y 旋转)时,我希望一旦用户设置左端并向右旋转即可覆盖度数。所以当它到达起点时我们需要 360 度。所以对于y轴旋转,使用
我正在使用新的 ARKit,并且能够创建一个名为 SphereNode 的新文件,该文件能够在 View 上创建可放置的 Sphere。 重点是我真的想添加一个自定义对象而不是标准球体。一些建议?这是
我一直在使用 ARkit 并且很喜欢它,但我注意到在负载跟踪期间可能会有点跳动(突然物体从它们的位置跳出一点点,比如 1-3 厘米)。我一直在想是否有一种方法可以平滑这些跳跃,这样就不会那么分散注意力
我正在尝试从以下内容中检索 string=Gate。 | geometryIndex=0 node= | no child> bone=(null)> MyCode 访问几何并且工作正常,如下 l
我正在尝试使用 ARKit 构建家具放置 AR 应用程序,我的项目中有 .scn 椅子及其 PNG 纹理,我的应用程序应该检测水平面,然后当用户点击时,将对象放置在点击的位置。 但是当我点击时,该对象
我是一名优秀的程序员,十分优秀!