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 동영상을 재생하는 유일한 방법 UIWebView은 UIWebView'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"];

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

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