问题
Platform: iOS 6.1. Xcode 4.6.
I am using YouTube Javascript API and a UIWebView. I am able to manually tap on the video thumbnail to begin playback just fine. But, autoplay is not working. I am setting mediaPlaybackRequiresUserAction = NO for the web view as many have suggested. No luck.
Here is the code:
@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;
}
The YouTubeTemplate.txt file is:
<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>
So, basically, the UIWebView shows the video thumbnail. Then I have to tap on it to begin playback. Autoplay is not working. Any idea what I might be doing wrong?
回答1:
Yes, you can make it autoplay by setting mediaPlaybackRequiresUserAction to NO. This is a project based on your HTML file, and it does autoplay after the app launch.
https://dl.dropbox.com/u/17350105/YoutubeAutoPlay.zip
Edit
As @RajV mentioned in the comment, you should use loadRequest:
instead of loadHTMLString:
for some reason I can't explain. Here is a working example:
- (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];
}
By the way, if you want to play youtube video inline, you can follow this answer I posted few days ago. (Oh, I just spent so many hours on Youtube iFrame API these days...)
回答2:
UIWebView does not respect autoplay because of Apple's concerns over mobile bandwidth use age (I.e a video begins playing when the page is loaded, and the user is on a cellular network, and it gobbles up their data). You'll either have to access the DOM (if possible on iOS, not sure) and trigger it manually or work around it.
来源:https://stackoverflow.com/questions/15350247/how-to-get-youtube-autoplay-to-work-in-uiwebview