2

プラットフォーム:iOS6.1。Xcode4.6。

YouTubeJavascriptAPIと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はビデオのサムネイルを表示します。次に、それをタップして再生を開始する必要があります。自動再生が機能していません。私が間違っているかもしれない何か考えはありますか?

4

2 に答える 2

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ビデオをインラインで再生したい場合は、数日前に投稿したこの回答に従うことができます。(ああ、私は最近Youtube iFrame APIに非常に多くの時間を費やしました...)

于 2013-03-21T03:30:17.997 に答える
2

UIWebViewは、モバイル帯域幅の使用期間に関するAppleの懸念のため、自動再生を尊重しません(つまり、ページが読み込まれるとビデオの再生が開始され、ユーザーがセルラーネットワークに接続し、データを飲み込んでしまいます)。DOMにアクセスして(iOSで可能かどうかはわかりませんが)、手動でトリガーするか、回避する必要があります。

于 2013-03-11T23:02:42.113 に答える