【问题标题】:How to get YouTube autoplay to work in UIWebView?如何让 YouTube 自动播放在 UIWebView 中工作?
【发布时间】:2013-03-11 22:56:58
【问题描述】:

平台: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 显示视频缩略图。然后我必须点击它才能开始播放。自动播放不起作用。知道我可能做错了什么吗?

【问题讨论】:

    标签: ios6 youtube-javascript-api


    【解决方案1】:

    是的,您可以通过将 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 上花了这么多时间......)

    【讨论】:

    • 非常感谢您发布完整的工作代码。如果您使用 loadRequest 加载内容,自动播放似乎有效。如果您使用 loadHTMLString,它将不起作用。您能否验证这一点并修改您的答案。然后我会接受它。
    • 前几天可以正常使用,今天突然不行了!知道为什么吗?
    • 这个解决方案的问题是它读取了一个带有硬编码 youtube 视频 ID 的静态文件。
    【解决方案2】:

    UIWebView 不尊重自动播放,因为 Apple 担心移动带宽使用年龄(即,当页面加载时开始播放视频,并且用户在蜂窝网络上,它会吞噬他们的数据)。您要么必须访问 DOM(如果可能在 iOS 上,不确定)并手动触发它或解决它。

    【讨论】:

    猜你喜欢
    • 2012-03-19
    • 2013-03-21
    • 2017-10-17
    • 1970-01-01
    • 2012-05-10
    • 2014-04-12
    • 2013-12-19
    • 2015-08-27
    • 1970-01-01
    相关资源
    最近更新 更多