2014-10-09 1 views
3

UIWebview에 embed youtube를 재생하는 데 어려움이 있습니다.UIWebview는 iOS 8에 잘 포함 된 youtube를 표시하지 않습니다.

YouTube의 기본 포함 형식을 사용하면 UIWebview에 아무 것도 표시되지 않습니다. 그냥 비어 있습니다.

NSString *htmlString = @"<html><body><iframe width=\"420\" height=\"315\" src=\"//www.youtube.com/embed/XNnaxGFO18o?rel=0\" frameborder=\"0\" allowfullscreen></iframe></body></html>"; 
[self.webView loadHTMLString:htmlString baseURL:nil]; 

나는 다음과 같은 코드를 발견했다.

NSString* embedHTML = @"\ 
<html><body style=\"margin:0;\">\ 
<<div class=\"emvideo emvideo-video emvideo-youtube\"><embed id=\"yt\" src=\"http://www.youtube.com/embed/bPM8LKYMcXs?hd=1\" width=\"320\" height=\"250\"></embed></div>\ 
</body></html>"; 
[self.webView loadHTMLString:embedHTML baseURL:nil]; 

그러나 문제가 있습니다. 재생 버튼을 클릭하면 아무런 반응이 없습니다. 몇 번 재생 버튼을 클릭하고 잠시 기다려야합니다. 그런 다음 회전하여 재생합니다.

그래서 두 가지 질문이 있습니다.

1) UIWebView에서 더 나은 YouTube 동영상을 재생할 수있는 방법이 있습니까? 2) 재생 버튼을 클릭 한 후 즉시 비디오를 재생하는 방법은 무엇입니까?

감사합니다.

답변

1

단지 .html 파일

<!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); 
     firstScriptTag.requestFullScreen(); 
     var ytplayer = null; 

     function onYouTubePlayerAPIReady() 
     { 
      ytplayer = new YT.Player(
            'player', 
            { 
            videoId:'%@', 
            width:'%0.0f', 
            height:'%0.0f', %@ 
            playerVars: 
            { 
            'controls': %d, 
            'playsinline' : 0, 
            'rel':0, 
            'showinfo':0 
            }, 
            }); 
     } 


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

    function stopVideo() 
    { 
     if (ytplayer) 
     { 
      ytplayer.stopVideo(); 
      ytplayer.clearVideo(); 
     } 
     return 'STOPPED'; 
    } 

    function playVideo() 
    { 
     if (ytplayer) 
     { 
      ytplayer.playVideo(); 
     } 
     return 'PLAY'; 
    } 

    function pauseVideo() 
    { 
     if (ytplayer) 
     { 
      ytplayer.pauseVideo(); 
      ytplayer.clearVideo(); 
     } 
     return 'PAUSED'; 
    } 

    function getPlayerState() 
    { 
     return ytplayer.getPlayerState(); 
    } 

    function isPlaying() 
    { 
     return (myPlayerState == YT.PlayerState.PLAYING); 
    } 
    function isPaused() 
    { 
     return (myPlayerState == YT.PlayerState.PAUSED); 
    } 
    function onPlayerError(event) 
    { 
     alert("Error"); 
    } 
    </script> 
</body> 

및 컨트롤러에 아래 코드를 추가하여 일반 html 파일을 생성하고 youtubeEmbedding.html로 이름을 지정하고 youtubeEmbedding.html에서 프로젝트에 추가 할 경우 유 웹보기를 사용하고 있습니다. 아래처럼하십시오.

- (void)viewDidLoad 
{ 
    BOOL autoPlay = NO; 
    // Do any additional setup after loading the view, typically from a nib. 
    NSString *youTubeVideoHTML = [[NSString alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"youtubeEmbedding" ofType:@"html"] encoding:NSUTF8StringEncoding error:nil]; 
    NSString *autoPlayString = autoPlay ? @"events: {'onReady' : onPlayerReady }," : @""; //customise it weather u want to autoplay or not 
    NSURL *url = [NSURL URLWithString:@"https://www.youtube.com/watch?v=AYo72E7ZMHM"]; 
    NSString *lastComponent = [url query]; 
    NSString *videoId = [lastComponent stringByReplacingOccurrencesOfString:@"v=" withString:@""]; //get the video id from url 
    NSInteger controls = 1; //i want to show controles for play,pause,fullscreen ... etc 
    NSString *html  = [NSString stringWithFormat:youTubeVideoHTML, videoId, CGRectGetWidth(_webView.frame), CGRectGetHeight(_webView.frame), autoPlayString, controls]; //setting the youtube video width and height to fill entire the web view 
    _webView.mediaPlaybackRequiresUserAction = NO; 
    _webView.delegate = self; //not needed 
    [_webView loadHTMLString:html baseURL:[[NSBundle mainBundle] resourceURL]]; //load it to webview 

} 


//for playing action 
- (IBAction)playAction:(id)sender 
{ 
    [_webView stringByEvaluatingJavaScriptFromString:@"ytplayer.playVideo()"]; 
} 

의견이 있다면 문제가 있습니다. 도움이 되시길 바랍니다. :)

+0

이상한 경우 uiwebview는 비어 있습니다. 나는 html로 인쇄했는데, 정확한 내용을 가지고있다. – user890207

+0

@ user890207 iOS8에서 작동하는지 테스트했습니다. –

+0

@ user890207 새 프로젝트에서 테스트하십시오. –

관련 문제