2

現在、YouTube ビデオを 内にロードして-UIwebViewいます。これは完全に機能しており、ビデオは自動的に再生を開始します。しかし、問題は、ビデオが内部で終了-UIwebViewすると、停止して再生ボタンが表示されることです。ただし、ユーザーが毎回「完了」ボタンを手動で押す必要がないように、ビデオプレーヤーを閉じたいと思います。

動画が閉じない時の画面イメージ。

これは、私が内部でビデオを起動するリンクです-UIwebview

NSString *youTubeVideoHTML = [NSString stringWithFormat:@"<!DOCTYPE html><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:'320',
            height:'200',
            videoId:'%@',
            events: {
                'onReady': onPlayerReady,
            }
        });
    }

    function onPlayerReady(event) { 
        event.target.playVideo();
    }

</script> </body> </html>", [[NSUserDefaults standardUserDefaults]
objectForKey:@"detailVideoURL"]];

編集:

最初の答えをコードに実装しようとしましたが、これが最終的な方法です。コールバックに何を追加すればよいかまだわかりません。

NSString *youTubeVideoHTML = [NSString stringWithFormat:@"<!DOCTYPE html><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:'320',
     height:'200',
     videoId:'%@',
     events: { 
    'onReady': onPlayerReady, 
    } 
    }); 
} 
function onPlayerReady(event) { 
event.target.playVideo(); 
} 

function onPlayerStateChange(event) {
  if (event.data == YT.PlayerState.PLAYING && !done) {
      setTimeout(stopVideo, 6000);  done = true; 
   } 

 if (event.data == YT.PlayerState.ENDED) {
 window.location = "callback:nil"; }; }

   function stopVideo() { 
 player.stopVideo();  

} 

</script> </body> </html>", [[NSUserDefaults standardUserDefaults] objectForKey:@"detailVideoURL"];

エラーの画像: http://gyazo.com/31da955d8af98f40b82789a7f60c1edb

4

2 に答える 2

3

これは、Puneeth のソリューションを Google の YTPlayerView に適用して、ビデオの終了後にプレーヤーが非表示になるようにする方法です。

- (void)playerView:(YTPlayerView *)playerView didChangeToState:(YTPlayerState)state
{
    if(state == kYTPlayerStateEnded) {
        [self.youTubePlayer.webView stringByEvaluatingJavaScriptFromString:@"player.destroy();"];
        // you'll have to recreate the player again since it's now destroyed
        [self.youTubePlayer removeFromSuperview];
        self.youTubePlayer = nil;

    }
}
于 2014-11-06T18:39:09.833 に答える