У меня возникла проблема с использованием параметра origin в API v3 от Youtube. Всякий раз, когда я его не включаю, я могу играть все, кроме видеороликов типа Vevo, которые имеют ограниченное воспроизведение. Когда я пытаюсь воспроизвести видео Vevo, видео просто говорит, что воспроизведение ограничено.Исходный параметр Youtube v3 API не работает
Другие ответы онлайн сказали, что добавление параметра источника, установленного в https://www.example.com, должно позволять воспроизводить видео Vevo. Однако, когда я делаю это и пытаюсь воспроизвести видео Vevo, видео просто становится черным, и нет даже сообщения о том, что воспроизведение ограничено. Кроме того, когда я пытаюсь воспроизводить обычные видео, оценивая Javascript-команду, ничего не происходит, и я вынужден фактически нажимать на видео, чтобы сыграть их по какой-то причине. Если кто-то знает, как играть видео Vevo через API Youtube, будь то с параметром 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, который я должен попробовать? Существует ли другая проблема? Github, где я получил код для Youtube Player, - https://github.com/gilesvangruisen/Swift-YouTube-Player, а код Swift 3 можно найти в разделе «Проблемы».