gpt4 book ai didi

ios - Youtube v3 API origin 参数不起作用

转载 作者:可可西里 更新时间:2023-11-01 02:10:08 24 4
gpt4 key购买 nike

最近我在使用 Youtube 的 v3 API 中的 origin 参数时遇到了问题。只要我不包括它,我就可以播放所有内容,但播放受限的 Vevo 类视频除外。当我尝试播放 Vevo 视频时,视频只是说播放受限。

网上的其他回答都说添加一个origin参数设置为https://www.example.com应该允许播放 Vevo 视频。然而,当我这样做并尝试播放 Vevo 视频时,视频就变黑了,甚至没有一条消息说播放受到限制。此外,当我尝试通过评估 Javascript 命令来播放常规视频时,没有任何反应,并且出于某种原因我被迫实际单击视频来播放它们。如果有人知道如何通过 Youtube 的 API 播放 Vevo 视频,无论是使用 origin 参数还是通过其他方法,我将不胜感激。

这是我的播放器 HTML 代码:

<!DOCTYPE html>
<html>
<head>
<style>
* { margin: 0; padding: 0; }
html, body { width: 100%; height: 100%; }
</style>
</head>
<body>
<div id="player" webkit-playsinline></div>
<script src="https://www.youtube.com/iframe_api"></script>
<script>
var player;
YT.ready(function() {
player = new YT.Player('player', %@);
window.location.href = 'ytplayer://onYouTubeIframeAPIReady';
});
function onReady(event) {
window.location.href = 'ytplayer://onReady?data=' + event.data;
}
function onStateChange(event) {
window.location.href = 'ytplayer://onStateChange?data=' + event.data;
}
function onPlaybackQualityChange(event) {
window.location.href = 'ytplayer://onPlaybackQualityChange?data=' + event.data;
}
function onPlayerError(event) {
window.location.href = 'ytplayer://onError?data=' + event.data;
}
</script>
</body>
</html>

这是我用来初始化播放器并添加它的参数的代码。

fileprivate func loadWebViewWithParameters(_ parameters: YouTubePlayerParameters) {

// Get HTML from player file in bundle
let rawHTMLString = htmlStringWithFilePath(playerHTMLPath())!

// Get JSON serialized parameters string
let jsonParameters = serializedJSON(parameters as AnyObject)!

// Replace %@ in rawHTMLString with jsonParameters string
let htmlString = rawHTMLString.replacingOccurrences(of: "%@", with: jsonParameters)

// Load HTML in web view
webView.loadHTMLString(htmlString, baseURL: URL(string: "about:blank"))
}

fileprivate func playerHTMLPath() -> String {
return Bundle(for: self.classForCoder).path(forResource: "YTPlayer", ofType: "html")!
}

fileprivate func htmlStringWithFilePath(_ path: String) -> String? {

do {

// Get HTML string from path
let htmlString = try NSString(contentsOfFile: path, encoding: String.Encoding.utf8.rawValue)

return htmlString as String

} catch _ {

// Error fetching HTML
printLog("Lookup error: no HTML file found for path")

return nil
}
}


// MARK: Player parameters and defaults

fileprivate func playerParameters() -> YouTubePlayerParameters {
playerVars["origin"] = ("https://www.example.com") as AnyObject?
playerVars["playsinline"] = 1 as AnyObject?
playerVars["controls"] = 0 as AnyObject?
playerVars["showinfo"] = 0 as AnyObject?
return [
"modestbranding": 1 as AnyObject,
"height": "100%" as AnyObject,
"width": "100%" as AnyObject,
"events": playerCallbacks() as AnyObject,
"playerVars": playerVars as AnyObject
]
}

fileprivate func playerCallbacks() -> YouTubePlayerParameters {
return [
"onReady": "onReady" as AnyObject,
"onStateChange": "onStateChange" as AnyObject,
"onPlaybackQualityChange": "onPlaybackQualityChange" as AnyObject,
"onError": "onPlayerError" as AnyObject
]
}

除 example.com 之外,是否还有我应该尝试的域?这里还有其他问题吗?我获得 Youtube 播放器代码的 Github 是 https://github.com/gilesvangruisen/Swift-YouTube-Player可以在问题中找到 Swift 3 代码。

最佳答案

使用https://www.youtube.com/作为 loadHTMLString 中的 baseURL 参数:

webView.loadHTMLString(htmlString, baseURL: URL(string: "https://www.youtube.com/"))

然后尝试从您的 playerParameters 函数中删除原始参数 - 这一行:

playerVars["origin"] = ("https://www.example.com") as AnyObject?

它对我来说是这样的。

关于ios - Youtube v3 API origin 参数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41214344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com