ios - 是否可以在不显示/添加 View 的情况下在 iOS 上播放 YouTube 视频,同时仍然遵守 YouTube 的服务条款?

标签 ios objective-c cocoa-touch youtube youtube-api

我有一个 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 。

  1. 定义 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>"
    
  2. 定义一个名为videoWebViewUIWebView 对象来显示iFrame。您可以将高度和宽度设置为零,这样它就不会挡住您的屏幕。它就像一个隐藏的 iFrame。

    self.videoWebview = [UIWebView alloc] init];
    
  3. 我建议您使用自己的默认图像和图像顶部的播放按钮,以避免必须显示“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/

相关文章:

ios - 在 swift 中正确地子类化 UITextField

ios - 将栏按钮项目添加到 View Storyboard 中的导航栏

ios - iPhone X - 面容 ID - 不需要的 "Enter your Password"文本

ios - 无法发出 POST 请求 - AFNetworking

ios - 如果先连接其他应用程序,CoreBluetooth 不会发现心率监视器

iphone - 在 Xcode 4.2 中启用崩溃日志符号化

ios - 卸载应用程序时删除钥匙串(keychain)项目

ios - UICollectionView 滚动更改导航和选项卡的颜色如何

ios - 为已发布的 iPhone 应用程序迁移 Realm 数据库的步骤

objective-c - 哪个方法名称最符合 Objective-C/Cocoa 约定?