Відтворюйте відео на 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];

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

Я також бачив аргумент & format = 1 і намагався додати його до кінця обох рядків, але не пощастило.


Я знайшов трохи більше інформації, але вона все ще не працює. Хтось запропонував використовувати це для URL-адреси: youtube.com/get_video?video_id=ID&t=SIGNATURE&fmt=18 Я вставив свій ідентифікатор відео, але не знаю, що таке підпис? І відеоплеєр все ще поводиться незмінно. Він відкриває програвач, а потім закривається через 10 - 20 секунд.
jmurphy

Відповіді:


78

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

На жаль, немає можливості безпосередньо відтворити відео з MPMoviePlayerControllerYouTube, оскільки YouTube не містить прямих посилань на відеофайли.


1
Так, це єдиний спосіб відтворення відео YouTube у вашому додатку. Провів 2 в пошуках альтернатив. Якість теж погана.
samvermette

Чи все ще немає іншого шляху - через більше 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.
Peter DeWeese,

1
Це заборонено згідно з умовами використання YouTube. Використовуйте його на свій страх і ризик, оскільки ваш додаток може перестати працювати в будь-який момент, якщо YouTube помітить, що ви не дотримуєтеся Умов використання, або якщо YouTube змінює вбудований код, який він створює.
Метью

13

Я просто наткнувся на когось, хто зміг помістити YouTubeвідео всередину MPMoviePlayerController. Здається, це можливо зараз.

LBYouTubeView


@ Дякую, що працює нормально, але коли я використовую [mpplayer stop]; щоб зупинити це відео, тоді відео працює. але я хочу зупинити відео
Jaspreet Singh

посилання github також відтворює звук у фоновому режимі?
Халід Усман,

2

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

У моєму репозиторії github є демо-версія цього.

Побачити:

https://github.com/DpzAtMicRO/IOSYoutubePlayer

Спробуйте, це дає змогу завантажувати та відтворювати відео YouTube безпосередньо у MPMoviePlayerбудь-якому іншому відео, і це теж непоганий підхід.

EDIT: Переконайтеся, що ви добре пройшли Readme.md, перш ніж використовувати це у своєму проекті


2
На жаль, проти Умов YouTube, на жаль. Якщо ви зробите це, ви можете очікувати, що ваш додаток буде працювати лише до тих пір, поки YouTube не знає, що ви робите.
Метью

Я також надіслав електронною поштою хлопцям API YouTube, щоб також запитати, чи не можна, щоб я сам проаналізував 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 “YTPlayerView.h” Використовуйте UIViewта встановлюйте клас YTPlayerViewабо створюйте об'єкт YTPlayerViewпрограмно.

Завантажити відео: [self.playerView loadWithVideoId:@"M7lc1UVf-VE"];

Є також playVideoі stopVideoдоступні методи. Для отримання додаткової інформації відвідайте це посилання

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.