我有一个 UITableView
,里面装满了 YouTube 视频的缩略图,当他们点击其中一个时,我想自动开始全屏播放 YouTube 视频,而用户不会看到正在添加的 View 或必须进行交互只需点击缩略图即可。
基本上,我根本不想看到带有红色播放图标的 YouTube 视频播放器。
我打算使用 youtube-ios-player-helper/YTPlayerView为了完成这个,我知道它只是使用了一个 UIWebView
但我似乎无法弄清楚如何让它工作。
如果我在我的类上创建一个实例变量,将我自己设置为委托(delegate)并选择一个随机视频进行观看:
let YouTubePlayer = YTPlayerView()
override func viewDidLoad() {
super.viewDidLoad()
YouTubePlayer.delegate = self
YouTubePlayer.loadWithVideoId("apKJikXWU2g")
...
}
然后当委托(delegate)方法被调用时:
func playerViewDidBecomeReady(playerView: YTPlayerView!) {
YouTubePlayer.playVideo()
}
但大多数时候它要么在我的 AppDelegate 中崩溃并显示以下消息:
Nov 5 23:34:44 rtcreporting[73827] : logging starts...
Nov 5 23:34:44 rtcreporting[73827] : setMessageLoggingBlock: called
或者如果我禁用断点它会起作用,但我在视频播放前收到吨自动布局约束投诉消息,表明某些东西在某种程度上很生气。
这是因为我使用的是 UIView
子类,但实际上没有将它添加到 View 层次结构中吗?
我如何实现在特定事件后自动播放 YouTube 视频的行为而不暴露中间 View ?
最佳答案
好了,您不必看到 youtube Logo 。
定义 youtube iFrame,稍后在提供给 UIWebView 时,您需要将
'%@'
部分替换为您的 youtube 视频 ID#define youtubeVideoPlayUrl @"<html><head><style>body{margin:0px 0px 0px 0px;}</style></head> <body> <div id=\"player\"></div> <script> var tag = document.createElement('script'); tag.src = 'http://www.youtube.com/player_api'; var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); var player; function onYouTubePlayerAPIReady() { player = new YT.Player('player', { width:'%f', height:'%f', videoId:'%@', events: { 'onReady': onPlayerReady } }); } function onPlayerReady(event) { event.target.playVideo(); } </script> </body> </html>"
定义一个名为
videoWebView
的UIWebView
对象来显示iFrame。您可以将高度和宽度设置为零,这样它就不会挡住您的屏幕。它就像一个隐藏的 iFrame。self.videoWebview = [UIWebView alloc] init];
我建议您使用自己的默认图像和图像顶部的播放按钮,以避免必须显示“Youtube”视频 Logo 。完成后,使用以下代码全屏播放 youtube 视频
- (void)onPlayYouTubeVideo:(UIButton *)sender { NSString *youtubeVideoID = YOUR_YOUTUBE_VIDEO_ID; NSString *html = [NSString stringWithFormat:youtubeVideoPlayUrl, _videoWebView.frame.size.width, _videoWebView.frame.size.height, youtubeVideoID]; _videoWebView.mediaPlaybackRequiresUserAction = NO; _videoWebView.delegate = self; [_videoWebView loadHTMLString:html baseURL:[[NSBundle mainBundle] resourceURL]]; }
我正在使用这样的酒店预订应用程序。
关于ios - 是否可以在不显示/添加 View 的情况下在 iOS 上播放 YouTube 视频,同时仍然遵守 YouTube 的服务条款?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26771331/