2016-12-19 2 views
1

У меня возникла проблема с использованием параметра 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 можно найти в разделе «Проблемы».

ответ

1

Использование https://www.youtube.com/ в качестве параметра BaseUrl в loadHTMLString:

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

Затем попробуйте удалить происхождение параметров из ваших playerParameters FUNC - это строка:

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

как это работает для меня.

Смежные вопросы