UIWebView 대신 MPMoviePlayerController로 YouTube 동영상 재생


89

MPMoviePlayerController를 사용하여 일부 youTube 비디오를 스트리밍하려고하는데 문제가 있습니다. 내가 사용하는 코드는 매우 간단하며 URL을 initWithContentURL에 전달하여 .m4v 동영상을 재생할 수 있습니다. 동영상 플레이어를 실행하면 플레이어가 나오지만 약 20 초 후에 사라집니다. 시뮬레이터에서 시도하면 서버가 올바르게 구성되지 않았다는 경고보기가 나타납니다. Google에서 특정 유형의 비디오 피드를 가져 오기 위해 URL과 함께 전달해야하는 인수가 있습니까?

NSURL *videoURL = [NSURL URLWithString:@"http://www.youtube.com/v/HGd9qAfpZio&hl=en_US&fs=1&"];
MPMoviePlayerController *moviePlayer;
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];

[moviePlayer play];

다음 URL의 http://www.youtube.com/watch?v=HGd9qAfpZio 도 시도했습니다 .

나는 또한 & format = 1 인수를 보았고 그것을 두 문자열의 끝에 추가하려고했지만 운이 없었습니다.


더 많은 정보를 찾았지만 여전히 작동하지 않습니다. 누군가 URL에 이것을 사용하도록 제안했습니다. youtube.com/get_video?video_id=ID&t=SIGNATURE&fmt=18 내 동영상 ID를 입력했지만 서명이 무엇인지 모르겠습니다. 그리고 비디오 플레이어는 여전히 동일하게 작동합니다. 플레이어를 연 다음 10 ~ 20 초 후에 닫힙니다.
jmurphy

답변:


78

자신의 앱에서 YouTube 동영상을 재생하는 유일한 방법 UIWebViewUIWebView's콘텐츠 로 재생하려는 영화에 대해 Youtube의 embed 태그 를 사용하여를 만드는 것 입니다 . UIWebView삽입 된 개체가 Youtube 링크임을 감지하고 웹보기의 콘텐츠가 동영상의 YouTube 미리보기가됩니다. 사용자가 미리보기를 클릭하면 비디오가 MPMoviePlayerController에 표시됩니다. 이것은 Muxecoid가 제공 한 링크 ( 애플리케이션 내에서 YouTube 비디오를 재생하는 방법)에 설명 된 기술 이며, 이것이 애플리케이션 내에서 YouTube 비디오를 재생 하는 유일한 방법입니다. Youtube URL을에 전달하여 Youtube 응용 프로그램을 시작할 수 -[UIApplication openURL:]있지만 물론 이것은 종종 바람직하지 않은 자체 응용 프로그램을 닫습니다.

불행히도 MPMoviePlayerControllerYouTube는 비디오 파일에 대한 직접 링크를 노출하지 않기 때문에 YouTube 비디오를 직접 재생할 수있는 방법 이 없습니다.


1
이것이 앱에서 YouTube 동영상을 재생하는 유일한 방법입니다. 대안을 찾기 위해 2를 보냈습니다. 품질도 다소 나쁩니다.
samvermette 2009

2 년이 지난 후에도 여전히 다른 방법이 없습니까?
fabb

YouTube 비디오를 포함 된 상태로 재생하는 경우 PlaybackFinishReason 및 PlaybackState 알림을받을 가능성이 있습니까?
Roshit

7
이것이 유일한 방법은 아닙니다. Youtube에서 mp4 파일을 얻을 수 있습니다. 내 AirPlayer Python Project에서이 작업을 수행 하여 AppleTV에서 YouTube 동영상을 재생할 수 있습니다. 이것을 이식하여 현재 iOS 프로젝트에서 사용하고 준비가되면 여기에 코드를 게시합니다.
hellozimi

7
안타깝게도 직접 ​​링크를 사용하는 것은 금지되어 있습니다. 섹션 II / 10. 에 developers.google.com/youtube/terms : "당신의 API 클라이언트하지 않습니다 [...] 액세스 유튜브 플레이어 또는 명시 YouTube에서 승인 된 다른 비디오 플레이어의 사용 이외의 다른 수단을 통해 다른 유튜브 시청각 내용의 일부;"
Lvsti

26

코드를 사용하는 경우 :

- (void)embedYouTube:(NSString*)url frame:(CGRect)frame {  
     NSString* embedHTML = @"\ 
        <html><head>\ 
     <style type=\"text/css\">\ 
     body {\ 
     background-color: transparent;\ 
     color: white;\ 
    }\ 
   </style>\ 
    </head><body style=\"margin:0\">\ 
       <embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" \ 
    width=\"%0.0f\" height=\"%0.0f\"></embed>\ 
       </body></html>";  
   NSString* html = [NSString stringWithFormat:embedHTML, url, frame.size.width, frame.size.height];  
   if(videoView == nil) {  
      videoView = [[UIWebView alloc] initWithFrame:frame];  
     [self.view addSubview:videoView];  
    }  
    [videoView loadHTMLString:html baseURL:nil];  
  }

출처:

이 링크를 참조하십시오

시뮬레이터가 아닌 장치에서 테스트해야합니다. 시뮬레이터는 항상 파란색 상자에 물음표를 표시하기 때문에 (퀵타임 플레이어가 없습니다).


23

위에서 언급 한대로 작업중인 프로젝트에서이 작업을 수행해야했습니다. 이 문제를 해결하고 github에 코드를 제출했습니다.

소스를 확인하고 여기에서 포크 할 수 있습니다 .

기본적으로 YouTube URL을 사용하고 모든 iOS 호환 비디오 URL을 가져옵니다.

이것이 도움이되기를 바랍니다!
건배


1
감사! BTW, 업데이트는 최근 YouTube 변경 사항과 관련된 문제를 해결했습니다.
Peter DeWeese 2012 년

1
YouTube의 ToS에서는 허용되지 않습니다. YouTube에서 귀하가 ToS를 따르지 않는다는 것을인지하거나 YouTube가 생성하는 소스 코드를 변경하면 앱이 언제든지 작동을 멈출 수 있으므로 위험을 감수하고 사용하십시오.
Mathew

12

.NET 파일에 YouTube동영상 을 넣을 수있는 사람을 발견 했습니다 MPMoviePlayerController. 지금은 가능해 보입니다.

LBYouTubeView


@Thanx는 잘 작동하지만 [mpplayer stop]을 사용할 때; 이 비디오를 중지하려면 비디오가 실행 중입니다.하지만 비디오를 중지하고 싶습니다
Jaspreet Singh

github 링크도 백그라운드에서 오디오를 재생합니까?
Khalid Usman 2013

2

튜브 비디오를 재생하려면 URL을에 전달하기 전에 URL을 추출해야합니다 MPMoviePlayer. 직접 재생할 수 없습니다.

내 github 저장소에는 이것의 데모 구현이 있습니다.

보다:

https://github.com/DpzAtMicRO/IOSYoutubePlayer

그것을 시도하면 MPMoviePlayer다른 비디오와 마찬가지로 YouTube 비디오를 직접로드하고 재생할 수 있으며 꽤 좋은 접근 방식입니다.

편집 : 프로젝트에서 이것을 사용하기 전에 Readme.md를 잘 살펴보십시오.


2
불행히도 YouTube의 ToS에 반합니다. 이렇게하면 YouTube가 사용자의 작업을 인식하지 못하는 동안에 만 앱이 작동 할 것으로 기대할 수 있습니다.
매튜

나는 유튜브 API 관계자들에게 이메일을 보내서 내가 직접 동영상 URL을 파싱해도되는지 물어 보았다. "지원되는 유일한 메커니즘은 iframe 임베딩입니다. 원시 스트림 액세스는 피처 폰에 제공하는 저해상도 RTSP 스트림 외에는 ToS에서 지원하지 않습니다."
Mathew

1
당신은 저에게 반대표에 대해 설득했습니다. 나는 그것이 부정확 함을 표시하는 도구가되어야한다는 데 동의하며, 유튜브 퍼가기 문제를 해결하려는 사람들과 가장 관련이 있다고 생각하는 답변을 보여주기에 찬성 투표만으로 충분하다는 데 동의합니다. 젠장, 분명히 StackOverflow는 내 반대 투표를 잠그고 답변을 편집하지 않는 한 더 이상 제거 할 수 없습니다.
Mathew

큰! 수정 후 귀하의 반대표를 제거해달라고 요청할 수 있습니다! ...하지만 ... 그럴 필요가 없습니다.
DD_

@Mathew 많은 합법적 인 iOS 앱이 이런 종류의 일을하고 있습니다 (YouTube의 API 우회). 귀하가 지적한대로 ToS를 위반하지만 Google은 제품이 더 많은 시청자.
rmp251 2014 년

1

새 소스 코드를 위해 iframe의 src 요소를 가져 와서 호출하는 것만 큼 간단합니다.

[self.webView loadRequest:[NSURLRequest requestWithURL:self.url]];


0

Google에서 제공하는 iOS 애플리케이션에 YouTube 동영상을 삽입하는 공식적인 방법이 있습니다.

cocoapods를 통해 라이브러리 설치 : "youtube-ios-player-helper"포드

import by : 클래스를 #import “YTPlayerView.h” 사용 UIView및 설정 YTPlayerView하거나 YTPlayerView프로그래밍 방식으로 개체를 만듭니다 .

비디오로드 : [self.playerView loadWithVideoId:@"M7lc1UVf-VE"];

도 있습니다 playVideostopVideo사용할 수는 방법. 자세한 정보는 이 링크를 방문하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.