平台:iOS 6.1。 Xcode 4.6。
我正在使用YouTube Javascript API和UIWebView。我可以手动点击视频缩略图,开始播放就好了。但是,自动播放不起作用。我正在为许多人建议的Web视图设置mediaPlaybackRequiresUserAction = NO。没有运气。
以下是代码:
@interface VideoPlayerController : UIViewController <UIWebViewDelegate>
@property(strong, nonatomic) IBOutlet UIWebView* webView;
@end
- (void) viewDidLoad
{
[super viewDidLoad];
self.webView.delegate = self;
NSString *template = [NSString stringWithContentsOfFile:
[[NSBundle mainBundle]
pathForResource:@"YouTubeTemplate" ofType:@"txt"]];
NSString *htmlStr = [NSString stringWithFormat: template,
200, 200,
@"3G4exdlsRkY"];
self.webView.mediaPlaybackRequiresUserAction = NO;
[self.webView loadHTMLString:htmlStr baseURL:nil];
}
- (void) webViewDidFinishLoad:(UIWebView *)wv {
self.webView.mediaPlaybackRequiresUserAction = NO;
}
YouTubeTemplate.txt文件为:
<html>
<head>
<script src="https://www.youtube.com/player_api"></script>
<style>
body, div {
margin: 0px;
padding: 0px;
}
</style>
</head>
<body>
<div id="media_area"></div>
</body>
<script>
var ytPlayer = null;
function onYouTubePlayerAPIReady() {
ytPlayer = new YT.Player('media_area', {height: '%d', width: '%d', videoId: '%@',
events: {'onReady': onPlayerReady}
});
}
function onPlayerReady(e) {
e.target.playVideo();
}
</script>
</html>
因此,基本上,UIWebView显示视频缩略图。然后我必须点击它开始播放。自动播放无效。知道我可能做错了吗?
答案 0 :(得分:14)
是的,您可以通过将mediaPlaybackRequiresUserAction设置为NO来使其自动播放。这是一个基于HTML文件的项目,它会在应用启动后自动播放。
https://dl.dropbox.com/u/17350105/YoutubeAutoPlay.zip
修改强>
正如评论中提到的@RajV一样,您应该使用loadRequest:
而不是loadHTMLString:
出于某种原因我无法解释。这是一个有效的例子:
- (void)viewDidLoad
{
[super viewDidLoad];
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 150)];
[webView setMediaPlaybackRequiresUserAction:NO];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"YT_Player" ofType:@"html"] isDirectory:NO]]];
[self.view addSubview:webView];
}
顺便说一下,如果你想在线播放YouTube视频,你可以关注几天前发布的this answer。 (哦,我这些天在Youtube iFrame API上花了这么多时间......)
答案 1 :(得分:2)
UIWebView不尊重自动播放,因为Apple对移动带宽使用年限的关注(即,当页面加载时,视频开始播放,用户在蜂窝网络上,并且吞噬了他们的数据)。你要么必须访问DOM(如果可能的话,在iOS上,不确定)并手动触发它或解决它。