我正在尝试在我的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>";
如果无法做到这一点,是否有人知道是否有理由或文件支持这一决定。
答案 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在使页面自动播放视频时会起到重大作用。
在视频呈现之前有一点延迟。不幸的是,我还没有找到消除这对夫妻第二次延迟的方法。