- 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/
这个问题之前已经被问过here ,但我想提供更多信息。YouTubePlayerView 在滚动时通常会出现黑色轮廓,这可能会在暂停和更改旋转后发生。当我滚动并且它被覆盖时,似乎会发生这种情况,因此它
我想将 YouTube 视频与在 YouTube 应用上观看视频时显示的广告一起集成到我的应用中。 所以我想知道使用 YouTubePlayerView 是否可以解决我的问题,或者我是否必须使用 Yo
我正在使用 YouTubePlayerView 加载视频。视频播放成功,但是当屏幕旋转时,它停止播放。我该如何解决这个问题?这可能是一件简单的事情。我用谷歌搜索但没有得到帮助,但需要你的帮助.....
我在我的项目中使用了 YouTubePlayerView。但是播放视频时出现问题。 我在一些设备上测试过它, Moto lollipop (api 22) --> 显示“不幸的是 Youtube 已停
我使用以下 Activity 从我的应用程序启动了一个 YouTube 视频。启动 Activity 时,将播放 youtube 视频。但是当我改变屏幕的方向时,视频没有恢复而是从头开始。这里有什么问
我想在我的应用程序上实现 YouTube 播放器 View ,但由于我的应用程序是一个闹钟,我不希望用户能够暂停/停止视频或更改音量。我试图在 YouTube 播放器 View 上放置一个 View
是否可以在滚动 RecyclerView 时使用 Youtube API 自动播放视频? 最佳答案 是的,这是可能的。看这个例子:https://androidtutorialmagic.wordpr
我没有运气让 youtube-api 在 android 上工作。我正在努力获得最低限度的工作 - 只需通过公共(public)访问(无 oauth)播放视频。我有一个来自谷歌的 key ,我在我的模
I'm making an application that implements the picture in picture functionality in android. When you
我试图将 YouTubePlayerView 放入我的适配器中,但没有成功。 我不想调用新的 Intent。我想在我的应用程序中显示视频。 我将 YouTubeAndroidPlayerApi.jar
我想在 YouTubePlayerView 中添加一个按钮但不知道这样做的最佳方法。我希望只有当用户单击屏幕以调出 youtube 控件(播放/暂停、时间轴、共享等)时,该按钮才会出现,这些控件会在几
首先,我想指出,在 Android 中似乎存在一个限制,即在 ScrollView 上使用 SurfaceView 无法正常工作预计。这是解释here(VideoView 在内部使用了 Surface
我有一个 fragment ,它有一堆安卓 View 来播放各种媒体项目——图像、mp4 视频、pdf。 我想支持 YouTubePlayerView 以支持播放 youtube 视频。我知道使用 Y
我有一个可以以编程方式创建多个 YouTubePlayerView 的 Activity ,这是包含每个 YouTubePlayerView 的类。 public class MyYouTubeVie
我的 Activity 有一个 YouTubePlayerView,它必须显示在 SurfaceView(相机预览)上。 但是,由于 YouTubePlayerView 的视频 View 也使用了 S
我正在开发 ARKit 应用程序,我正在检测平面图并使用 YoutubePlayerView 添加 YouTube 视频 pod 浮出水面。我设法检测到表面并添加了 YouTubePlayerView
我正在使用 YouTube API,我想在全屏模式下对 YouTubePlayerView 应用 Swipe 左右手势。 当 YouTubePlayerView 处于全屏模式时,滑动 手势在 Andr
我正在尝试使用 Youtube API 将 youtube 视频嵌入到 android 应用程序中。我导入了 jar,将它添加到我的构建路径,并在我的主视图中添加了一个 YouTubePlayerVi
我正在创建一个应用程序,它将从 youtube 加载视频。我遇到的问题是我无法弄清楚如何在 android fragment 中实例化 YoutubePlayerView,因为我的应用程序只有一个 A
我正在 YouTubePlayerView(在 android 设备中)加载视频。最初它播放 2 秒,然后通过在其上显示播放按钮停止。如果我再次按下播放按钮,视频会播放 2 秒然后暂停。 最佳答案 我
我是一名优秀的程序员,十分优秀!