我已根据建议使用UIWebView将视频(从YouTube API v3中提取)嵌入到我的iPhone应用中。问题是某些视频(例如来自VEVO的视频)在尝试在设备上播放时会产生以下错误。
此视频包含来自VEVO的内容。它限制在某些网站上播放。
这不应该发生,因为像Flipboard和Rockpack这样的应用程序似乎也在使用UIWebView,并且能够播放来自VEVO和其他来源的视频。
我可能做错了什么?
PS:我知道还有其他帖子以某种方式触及这个问题,但是他们无法解决这个具体问题。
答案 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];
origin
:
没有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)
}
}