iOS上的播放受限于来自YouTube API的VEVO视频

时间:2013-11-06 18:35:52

标签: ios iphone youtube youtube-api ytplayerview

我已根据建议使用UIWebView将视频(从YouTube API v3中提取)嵌入到我的iPhone应用中。问题是某些视频(例如来自VEVO的视频)在尝试在设备上播放时会产生以下错误。

  

此视频包含来自VEVO的内容。它限制在某些网站上播放。

这不应该发生,因为像Flipboard和Rockpack这样的应用程序似乎也在使用UIWebView,并且能够播放来自VEVO和其他来源的视频。

我可能做错了什么?

PS:我知道还有其他帖子以某种方式触及这个问题,但是他们无法解决这个具体问题。

3 个答案:

答案 0 :(得分:14)

在iOS上使用YouTube YTPlayerView并将origin属性设置为有效网址,可以正常播放许多VEVO视频。

在视图控制器中:

@property (weak, nonatomic) IBOutlet YTPlayerView *playerView;

// ..

NSDictionary *playerVars = @{
                             @"playsinline" : @1,
                             @"showinfo" : @0,
                             @"rel" : @0,
                             @"controls" : @1,
                             @"origin" : @"https://www.example.com", // this is critical
                             @"modestbranding" : @1
                             };

[self.playerView loadWithVideoId:@"Ri7-vnrJD3k" playerVars:playerVars];

originorigin

没有originno origin

答案 1 :(得分:4)

您是否收到来自VEVO的所有视频的错误? 您确定要播放的视频是否可嵌入? 添加带有“true”值的“videoEmbeddable”参数,这样您就只能处理可以嵌入的视频。

  

videoEmbeddable参数允许您仅限搜索   可嵌入网页的视频。如果为其指定值   此参数,您还必须将type参数的值设置为video。

     

可接受的值为:any - 返回所有视频,可嵌入或不可嵌入。   true - 仅检索可嵌入的视频。

来源:https://developers.google.com/youtube/v3/docs/search/list#videoEmbeddable

答案 2 :(得分:0)

对于@JAL答案的Swift 4.2,您只需执行以下操作,它将对vevo视频产生吸引力:

import UIKit
import youtube_ios_player_helper

class MyYoutubePlayerViewController: UIViewController {

  @IBOutlet weak var playerView: YTPlayerView!

   private var playerVars: [String : Any] =  [ 
                                                "playsinline" : 1,
                                                "showinfo" : 1,
                                                "rel" : 1,
                                                "modestbranding" : 1,
                                                "controls" : 1,
                                                "origin" : "https://www.youtube.com" ]

  override func viewDidLoad() {
     super.viewDidLoad()

     self.playerView.load(withVideoId: "YQHsXMglC9A", playerVars: playerVars)
  }

}