【问题标题】:Play youtube videos in fullscreen auto以全屏自动播放 youtube 视频
【发布时间】:2010-12-03 11:23:12
【问题描述】:

我正在尝试在我的 ipad 应用程序中使用 youtube 嵌入式播放器播放 youtube 视频。我希望一旦用户单击视频缩略图,在 ipad 中切换到横向模式时,视频应该自动全屏加载。目前,用户必须单击全屏按钮才能以全屏模式播放视频。 我想要使​​用 ipad 附带的默认 youtube 应用播放视频时看到的相同效果。

这是我用来在 ipad 上播放电子管视频的代码。

embedHTML = @"<object width=\"640\" height=\"390\">
<param name=\"movie\"value=\"http://www.youtube.com/v/IYX_Ql-3U10&fs=1\">
<param name=\"allowFullScreen\" value=\"true\"></param>
<param name=\"allowScriptAccess\" value=\"always\"></param>
<embed id=\"yt\" src=\"http://www.youtube.com/v/youtube_video_id&fs=1\" 
type=\"application/x-shockwave-flash\" position=\"fixed\" 
allowfullscreen=\"true\" allowScriptAccess=\"always\"
 width=\"640\" height=\"390\"></embed></object>";

如果这不可能,是否有人知道是否有理由或文件支持这一决定。

【问题讨论】:

  • 你找到问题的答案了吗,如果有,请分享一下。我也在尝试从我的应用中自动播放 youtube 视频。

标签: objective-c ipad youtube


【解决方案1】:

你不能,这是不允许的:)

【讨论】:

  • 您的意思是说,我们在 ipad 应用中无法获得与在 ipad 上播放 youtube 视频时看到的相同的效果。请发布一些确认您的答案的文档网址。
  • 如果这不可能,那么 ipad 自带的 youtube 应用如何启用这个功能。
  • 所以他们也一定是采用了某种方法吧。
  • 是的,“方法”是一个私有 API,没有在任何地方记录,因此无法确定他们是如何做到的。
  • @shruti youtube 应用程序与您正在构建的应用程序不同。尝试将您的简历提交给苹果和/或谷歌。
【解决方案2】:

我可以使用 iOS youtube 助手 iOS-youtube-player-helper 从 youtube 播放器的 web 视图中标题为 FigPluginView 的子视图访问此功能。 FigPluginView class dump reference

创建一个公开以下方法的自定义 UIView 类头:

#import <Foundation/Foundation.h> 
@interface WMFigPluginView : NSObject

-(void)scriptEnterFullScreen;

@end

将自定义的 FigPluginView 和 YouTube 播放器导入到 ViewController 接口()

    #import <youtube-ios-player-helper/YTPlayerView.h>
    #import "WMFigPluginView.h"

    @property(nonatomic, strong) YTPlayerView *playerView;

使用以下方法来初始化youtube播放器,监控状态变化,在FigPluginView中找到并调用全屏脚本。

- (void)presentYoutubeVideo {
    if ([self.view.subviews containsObject:_playerView]){
        [_playerView removeFromSuperview];
    }
    CGRect playerFrame = CGRectMake(0, 0, 0, 0);
    _playerView = [[YTPlayerView alloc]initWithFrame:playerFrame];
    _playerView.delegate = self;
    [_playerView.webView setAllowsInlineMediaPlayback: NO];
    [self.view addSubview:_playerView];
    [self.playerView loadWithVideoId:@"YouTubeVideoID" playerVars:@{@"showinfo":@0,@"modestbranding":@1,@"autoplay":@1,@"playsinline":@0}];
}

-(void)playerViewDidBecomeReady:(YTPlayerView *)playerView {
    [_playerView playVideo];
}

-(void)playerView:(YTPlayerView *)playerView didChangeToState:(YTPlayerState)state {
    //stop activity indicator
    if (state == kYTPlayerStateBuffering) {
        //start activity indicator
    }
    if (state == kYTPlayerStatePlaying) {
        WMFigPluginView *figPluginView = (WMFigPluginView*)[self findFigPluginView:_playerView.webView];
        [figPluginView scriptEnterFullScreen];
    }
}

- (UIView *)findFigPluginView:(UIView *)view {
    for (__unsafe_unretained UIView *subview in view.subviews) {
        if ([NSStringFromClass(subview.class) hasSuffix:@"FigPluginView"]) {
            return subview;
        } else if (subview.subviews.count > 0) {
            return [self findFigPluginView:subview];
        }
    }
    return nil;
}

希望这会有所帮助!

【讨论】:

  • FigPluginView 类转储引用的链接已损坏,没有看到与之相关的存储库
【解决方案3】:

似乎没有直接的解决方案。如果我的客户想要它(我会在几天内知道:-))我可能会尝试使用覆盖整个屏幕的 webview 打开新控制器,然后像这篇文章中那样自动播放它: How to make YouTube video starts to play automatically inside UIWebView

【讨论】:

    【解决方案4】:

    关于其他答案的作者,完全有可能在 iOS 中使用 UIWebViews 并且不利用私有 API 来做到这一点。这是一个非常简单的方法。

    - (void)playYoutubeVideo:(NSString *)videoId {
        UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];
        webView.center = self.view.center; //Technically not needed, I've found it looks better with this added (when the video is done playing it looks better while being minimized)
        webView.mediaPlaybackRequiresUserAction = NO;
        [self.view addSubview:webView];
    
        NSString *youTubeVideoHTML = [NSString stringWithFormat:@"<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:'768', height:'1024', videoId:'%@', events: { 'onReady': onPlayerReady } }); } function onPlayerReady(event) { event.target.playVideo(); } </script> </body> </html>", videoId];
    
       [webView loadHTMLString:youTubeVideoHTML baseURL: [NSBundle mainBundle].bundleURL];
    }
    

    此实现的关键是使用带有 CGRectZero 框架的 UIWebView 以及处理自动播放视频的自定义 HTML/Javascript。使用带有 CGRectZero 框架的 UIWebView,在自动播放视频之前,用户不会看到任何烦人的中间页面,而 HTML/Javascript 则负责让页面自动播放视频。

    在播放视频之前会有一点延迟。不幸的是,我还没有找到消除这几秒钟延迟的方法。

    【讨论】:

      猜你喜欢
      • 2012-12-26
      • 2020-04-11
      • 1970-01-01
      • 1970-01-01
      • 2014-04-21
      • 2014-08-10
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多