2016-12-19 1 views
1

Ich habe kürzlich Probleme mit dem Ursprung Parameter in Youtube v3 API. Wenn ich es nicht einschließe, kann ich alles abspielen, außer Vevo-Videos mit eingeschränkter Wiedergabe. Wenn ich versuche, ein Vevo-Video abzuspielen, sagt das Video nur, dass die Wiedergabe eingeschränkt ist.Youtube v3 API-Ursprungsparameter funktioniert nicht

Andere Online-Antworten haben gesagt, dass das Hinzufügen eines Ursprungsparameters auf https://www.example.com Vevo-Videos ermöglichen sollte. Wenn ich dies jedoch tue und versuche, ein Vevo-Video abzuspielen, wird das Video schwarz und es gibt nicht einmal eine Nachricht, dass die Wiedergabe eingeschränkt ist. Wenn ich versuche, normale Videos zu spielen, indem ich einen Javascript-Befehl auswerte, passiert nichts, und ich bin gezwungen, aus irgendeinem Grund auf die Videos zu klicken, um sie abzuspielen. Wenn jemand weiß, wie man Vevo-Videos über die Youtube-API spielt, sei es mit dem Ursprungsparameter oder durch eine andere Methode, würde ich es begrüßen.

Hier ist mein HTML-Code für Spieler:

<!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> 

und hier ist der Code, den ich mit dem Player zu initialisieren und es ist Parameter hinzuzufügen.

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 
     ] 
    } 

Gibt es eine andere Domain als example.com, die ich ausprobieren sollte? Gibt es hier ein anderes Problem? Der Github, wo ich den Code für den Youtube Player bekommen habe ist https://github.com/gilesvangruisen/Swift-YouTube-Player und der Swift 3 Code kann in den Issues gefunden werden.

Antwort

1

Verwenden https://www.youtube.com/ als baseURL Parameter in loadHTMLString:

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

Dann versuchen Sie den Ursprung param aus Ihrem playerParameters func zu löschen - diese Zeile:

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

Es funktioniert wie folgt für mich.