以全屏自动播放YouTube视频

时间:2010-12-03 11:23:12

标签: objective-c ipad youtube

我正在尝试在我的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>";

如果无法做到这一点,是否有人知道是否有理由或文件支持这一决定。

4 个答案:

答案 0 :(得分:4)

你不能,不允许:)

答案 1 :(得分:4)

我可以使用iOS youtube帮助器iOS-youtube-player-helper从youtube播放器的webview中的标题为 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;
}

希望这有帮助!

答案 2 :(得分:0)

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

答案 3 :(得分:0)

对于其他答案的作者,完全有可能在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在使页面自动播放视频时会起到重大作用。

在视频呈现之前有一点延迟。不幸的是,我还没有找到消除这对夫妻第二次延迟的方法。