在 Swift 中在 ARImageAnchor 上播放 Youtube 视频
Play Youtube video on ARImageAnchor in Swift
我想在我的图像跟踪模块上播放 YouTube 视频
比如跟踪图像然后在上面播放 youtube 视频。
谁能帮帮我?
private func makeVideo(with url: URL, size: CGSize) -> SCNNode? {
DispatchQueue.main.async {
self.player.frame = CGRect(x: 0, y: 0, width: 650, height: 400)
self.player.autoplay = true
self.player.loadPlayer()
}
// 4
let avMaterial = SCNMaterial()
avMaterial.diffuse.contents = player
// 5
let videoPlane = SCNPlane(width: size.width, height: size.height)
videoPlane.materials = [avMaterial]
// 6
let videoNode = SCNNode(geometry: videoPlane)
videoNode.eulerAngles.x = -.pi / 2
return videoNode
}
import YoutubeKit
let player = YTSwiftyPlayer(playerVars: [.videoID("GJQsT-h0FTU")])
我试过了,但它在图像上显示黑屏,但正在播放音频
这可能不能完全解决您的问题,但我希望它能在某些方面对您有所帮助
所以,除了图像检测之外,您还可以做的是显示 UIWebView
'UIWebView' was deprecated in iOS 12.0: No longer supported; please adopt WKWebView.
尽管 Xcode 会警告您类似上面的消息,但 WKWebView 不显示任何内容,因此您需要坚持使用 WebView 直到他们解决问题
因此,假设您已经了解了图像检测部分并且能够定位节点并将节点放置在检测到的图像上,您可以实现以下功能:
func displayWebSite(on rootNode: SCNNode, horizontalOffset: CGFloat) {
DispatchQueue.main.async {
// Open YouTube
let request = URLRequest(url: URL(string: "https://youtu.be/7ehEPsrw1X8")!)
// Define the size
let webView = UIWebView(frame: CGRect(x: 0, y: 0, width: 650, height: 900))
webView.loadRequest(request)
// Set size
let webViewPlane = SCNPlane(width: horizontalOffset, height: horizontalOffset * 1.45)
webViewPlane.cornerRadius = 0.025
// Define geometry
let webViewNode = SCNNode(geometry: webViewPlane)
// Set the WebView as a material to the plane
webViewNode.geometry?.firstMaterial?.diffuse.contents = webView
webViewNode.opacity = 0
// Put a little in front to avoid merger with detected image
webViewNode.position.z += 0.04
// Add the node
rootNode.addChildNode(webViewNode)
}
}
为了您的参考,您可以检查我的一个 projects 以了解该功能在项目中的工作方式
我想在我的图像跟踪模块上播放 YouTube 视频 比如跟踪图像然后在上面播放 youtube 视频。
谁能帮帮我?
private func makeVideo(with url: URL, size: CGSize) -> SCNNode? {
DispatchQueue.main.async {
self.player.frame = CGRect(x: 0, y: 0, width: 650, height: 400)
self.player.autoplay = true
self.player.loadPlayer()
}
// 4
let avMaterial = SCNMaterial()
avMaterial.diffuse.contents = player
// 5
let videoPlane = SCNPlane(width: size.width, height: size.height)
videoPlane.materials = [avMaterial]
// 6
let videoNode = SCNNode(geometry: videoPlane)
videoNode.eulerAngles.x = -.pi / 2
return videoNode
}
import YoutubeKit
let player = YTSwiftyPlayer(playerVars: [.videoID("GJQsT-h0FTU")])
我试过了,但它在图像上显示黑屏,但正在播放音频
这可能不能完全解决您的问题,但我希望它能在某些方面对您有所帮助
所以,除了图像检测之外,您还可以做的是显示 UIWebView
'UIWebView' was deprecated in iOS 12.0: No longer supported; please adopt WKWebView.
尽管 Xcode 会警告您类似上面的消息,但 WKWebView 不显示任何内容,因此您需要坚持使用 WebView 直到他们解决问题
因此,假设您已经了解了图像检测部分并且能够定位节点并将节点放置在检测到的图像上,您可以实现以下功能:
func displayWebSite(on rootNode: SCNNode, horizontalOffset: CGFloat) {
DispatchQueue.main.async {
// Open YouTube
let request = URLRequest(url: URL(string: "https://youtu.be/7ehEPsrw1X8")!)
// Define the size
let webView = UIWebView(frame: CGRect(x: 0, y: 0, width: 650, height: 900))
webView.loadRequest(request)
// Set size
let webViewPlane = SCNPlane(width: horizontalOffset, height: horizontalOffset * 1.45)
webViewPlane.cornerRadius = 0.025
// Define geometry
let webViewNode = SCNNode(geometry: webViewPlane)
// Set the WebView as a material to the plane
webViewNode.geometry?.firstMaterial?.diffuse.contents = webView
webViewNode.opacity = 0
// Put a little in front to avoid merger with detected image
webViewNode.position.z += 0.04
// Add the node
rootNode.addChildNode(webViewNode)
}
}
为了您的参考,您可以检查我的一个 projects 以了解该功能在项目中的工作方式