Воспроизведение видео с YouTube с помощью MPMoviePlayerController вместо UIWebView


89

Я пытаюсь транслировать некоторые видео на YouTube с помощью MPMoviePlayerController, но у меня возникают проблемы. Код, который я использую, довольно прост, и я могу воспроизводить видео .m4v, передав URL-адрес в initWithContentURL. Когда я запускаю проигрыватель фильмов, проигрыватель появляется, но исчезает примерно через 20 секунд. Когда я пробую это в симуляторе, я получаю предупреждение, в котором говорится, что сервер настроен неправильно. Есть ли аргумент, который мне нужно передать с URL-адресом, чтобы получить определенный тип видеопотока из Google?

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

[moviePlayer play];

Я также пробовал http://www.youtube.com/watch?v=HGd9qAfpZio по следующему URL- адресу.

Я также видел аргумент & format = 1 и пытался добавить его в конец обеих строк, но безуспешно.


Я нашел дополнительную информацию, но она все еще не работает. Кто-то предложил использовать это для URL: youtube.com/get_video?video_id=ID&t=SIGNATURE&fmt=18 Я ввел свой идентификатор видео, но не знаю, что это за подпись? И видеоплеер по-прежнему ведет себя так же. Он открывает проигрыватель, затем закрывается через 10-20 секунд.
jmurphy

Ответы:


78

Единственный способ воспроизвести видео с YouTube внутри вашего собственного приложения - создать UIWebViewс помощью тега embed из Youtube фильм, который вы хотите воспроизвести в качестве UIWebView'sконтента. UIWebViewобнаружит, что внедренный объект является ссылкой на Youtube, а содержимое веб-представления будет предварительным просмотром YouTube для видео. Когда пользователь щелкает предварительный просмотр, видео будет отображаться в MPMoviePlayerController. Это метод, описанный по ссылке, предоставленной Muxecoid ( как воспроизводить видео с YouTube в приложении ), и это (насколько мне известно) единственный способ воспроизвести видео с YouTube в приложении. Вы по-прежнему можете запустить приложение Youtube, передав URL-адрес YouTube -[UIApplication openURL:], но, конечно, это закрывает ваше собственное приложение, что часто нежелательно.

К сожалению, нет возможности напрямую воспроизводить видео на YouTube, MPMoviePlayerControllerпотому что YouTube не предоставляет прямые ссылки на видеофайлы.


1
Ага, это единственный способ воспроизводить видео с YouTube в вашем приложении. Потратил 2 на поиск альтернативы. Качество тоже неплохое.
samvermette 01

Неужели все еще нет другого пути - спустя более 2 лет?
fabb

Есть ли возможность получать уведомления PlaybackFinishReason и PlaybackState в случае воспроизведения встроенного видео на YouTube?
Рошит,

7
Это не единственный способ. Вы можете получить файл mp4 с Youtube. Я делаю это в моем проекте AirPlayer Python , который позволяет вам воспроизводить видео с YouTube на вашем AppleTV. Я портирую это и использую в своем текущем проекте iOS и опубликую здесь код, когда он будет готов.
hellozimi

7
К сожалению, использование прямой ссылки запрещено. Раздел II / 10. в developers.google.com/youtube/terms : «Ваш клиент API не будет [...] получать доступ к какой-либо части любого аудиовизуального контента YouTube никакими средствами, кроме использования проигрывателя YouTube или другого видеопроигрывателя, явно разрешенного 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.

Вы можете проверить исходный код и создать вилку здесь .

Он в основном берет URL-адрес YouTube и получает все URL-адреса видео, совместимые с iOS.

Надеюсь, это поможет!
Ура


1
Благодарность! Кстати, обновления устранили проблему с последними изменениями YouTube.
Питер ДеВиз,

1
Это запрещено Условиями использования YouTube. Используйте его на свой страх и риск, потому что ваше приложение может перестать работать в любой момент, если YouTube заметит, что вы не соблюдаете Условия использования, ИЛИ, если YouTube изменит код встраивания, который он генерирует.
Мэтью

12

Я только что наткнулся на человека, который смог поместить YouTubeвидео в файл MPMoviePlayerController. Теперь это кажется возможным.

LBYouTubeView


@ Спасибо, все работает нормально, но когда я использую [mpplayer stop]; чтобы остановить это видео, тогда видео будет запущено. но я хочу остановить видео
Джасприт Сингх

ссылка на github также воспроизводит звук в фоновом режиме?
Халид Усман

2

Чтобы воспроизвести видео из трубки, вам необходимо извлечь URL-адрес перед передачей URL-адреса MPMoviePlayer. Вы не можете играть напрямую.

В моем репозитории на github есть демонстрационная реализация этого.

Увидеть:

https://github.com/DpzAtMicRO/IOSYoutubePlayer

Попробуйте, это позволяет загружать и воспроизводить видео с YouTube напрямую, MPMoviePlayerкак и любое другое видео, и это тоже довольно хороший подход.

РЕДАКТИРОВАТЬ: Убедитесь, что вы хорошо просмотрели Readme.md, прежде чем использовать его в своем проекте.


2
К сожалению, против ToS YouTube. Если вы сделаете это, вы можете ожидать, что ваше приложение будет работать только до тех пор, пока YouTube не знает, что вы делаете.
Мэтью

Некоторое время назад я также отправил по электронной почте ребятам из YouTube API, чтобы спросить, можно ли мне самому проанализировать URL-адрес видео; это цитата из полученного мной ответа: «Единственный поддерживаемый механизм - это встраивание iframe. Доступ к необработанному потоку не поддерживается нашими ToS, кроме потоков RTSP с низким разрешением, которые мы предоставляем для обычных телефонов»
Мэтью

1
Вы убедили меня в том, что я голосую против; Я согласен с тем, что это должен быть инструмент для отметки неправильности, и этого достаточно, чтобы показать, какие из этих ответов, на мой взгляд, наиболее актуальны для людей, пытающихся решить проблему встраивания YouTube. Черт побери, очевидно, StackOverflow блокирует мой голос против, и я больше не могу его удалить, пока ваш ответ не будет отредактирован.
Мэтью

большой! Я могу внести правку и попросить вас удалить ваш голос против! ... Но ... не надо ... пусть будет!
DD_

@Mathew Многие законные приложения для iOS делают такие вещи (в обход API YouTube), и, хотя это нарушает Условия использования, как вы указывали, Google, похоже, во многих случаях не возражает, поскольку позволяет их продукту достичь больше зрителей.
rmp251

1

Это так же просто, как взять элемент src iframe для нового кода внедрения и вызвать

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


0

Существует официальный способ встраивания видео с YouTube в приложение для iOS, предоставляемый Google.

Установите библиотеку через cocoapods: pod "youtube-ios-player-helper"

import by: #import “YTPlayerView.h” Используйте UIViewи установите класс YTPlayerViewили создайте объект YTPlayerViewпрограммно.

Загрузить видео: [self.playerView loadWithVideoId:@"M7lc1UVf-VE"];

Также существуют playVideoи stopVideoдоступные методы. Для получения дополнительной информации посетите эту ссылку

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.