Putar video YouTube dengan MPMoviePlayerController, bukan UIWebView

89

Saya mencoba untuk melakukan streaming beberapa video YouTube menggunakan MPMoviePlayerController tetapi saya mengalami beberapa masalah. Kode yang saya gunakan cukup sederhana dan saya dapat memutar video .m4v dengan meneruskan URL ke initWithContentURL. Ketika saya meluncurkan pemutar film, pemutar muncul tetapi hilang begitu saja setelah sekitar 20 detik. Ketika saya mencobanya di simulator, saya mendapatkan tampilan peringatan yang mengatakan server tidak dikonfigurasi dengan benar. Apakah ada argumen yang harus saya sampaikan dengan URL untuk mendapatkan jenis umpan video tertentu dari 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];

Saya juga mencoba URL berikut http://www.youtube.com/watch?v=HGd9qAfpZio

Saya juga telah melihat argumen & format = 1 dan mencoba menambahkannya ke akhir kedua string tetapi tidak berhasil.

jmurphy
sumber
Saya menemukan beberapa informasi lagi tetapi masih tidak berfungsi. Seseorang menyarankan menggunakan ini untuk URL: youtube.com/get_video?video_id=ID&t=SIGNATURE&fmt=18 Saya memasukkan ID video saya, tetapi saya tidak tahu apa itu tanda tangan? Dan pemutar videonya masih berperilaku sama. Ini membuka pemain lalu menutup setelah 10 hingga 20 detik.
jmurphy

Jawaban:

78

Satu-satunya cara untuk memutar video youtube di dalam aplikasi Anda sendiri adalah dengan membuat UIWebViewdengan tag embed dari Youtube untuk film yang ingin Anda putar sebagai UIWebView'skonten. UIWebViewakan mendeteksi bahwa objek yang disematkan adalah tautan Youtube, dan konten tampilan web akan menjadi pratinjau youtube untuk video tersebut. Saat pengguna Anda mengklik pratinjau, video akan ditampilkan dalam MPMoviePlayerController. Ini adalah teknik yang dijelaskan di tautan yang disediakan Muxecoid ( cara memutar video youtube dalam aplikasi ), dan ini (sejauh yang saya tahu) satu-satunya cara agar video youtube diputar dalam aplikasi. Anda masih dapat menjalankan aplikasi Youtube dengan meneruskan URL youtube ke -[UIApplication openURL:], tetapi tentu saja ini menutup aplikasi Anda sendiri yang seringkali tidak diinginkan.

Sayangnya, tidak ada cara untuk memutar video youtube secara langsung MPMoviePlayerControllerkarena youtube tidak menampilkan tautan langsung ke file video tersebut.

Bryan Henry
sumber
1
Ya, itulah satu-satunya cara untuk memutar video YouTube di aplikasi Anda. Menghabiskan 2 mencari alternatif. Kualitas juga agak buruk.
samvermette
Apakah masih tidak ada cara lain - setelah lebih dari 2 tahun?
fabb
Apakah ada kemungkinan untuk mendapatkan pemberitahuan PlaybackFinishReason dan PlaybackState jika memutar video youtube sebagai embed?
Roshit
7
Ini bukan satu-satunya cara. Anda bisa mendapatkan file mp4 dari Youtube. Saya melakukannya di Proyek Python AirPlayer saya , yang memungkinkan Anda memutar video youtube di AppleTV Anda. Saya akan mem-porting ini dan menggunakannya dalam proyek iOS saya saat ini dan memposting kodenya di sini ketika sudah siap.
hellozimi
7
Sayangnya menggunakan tautan langsung dilarang. Bagian II / 10. di developers.google.com/youtube/terms : "Klien API Anda tidak akan [...] mengakses bagian mana pun dari konten audiovisual YouTube dengan cara apa pun selain penggunaan pemutar YouTube atau pemutar video lain yang secara tegas diizinkan oleh YouTube;"
Lvsti
26

Jika Anda menggunakan Kode:

- (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];  
  }

Sumber:

Lihat saja tautan ini

Pastikan Anda mengujinya di perangkat dan bukan di simulator. Karena simulator akan selalu menampilkan tanda tanya dengan kotak biru (tidak memiliki pemutar waktu cepat).

Jimit
sumber
23

Seperti yang saya tulis di atas dalam komentar saya, saya harus melakukan ini dalam sebuah proyek yang sedang saya kerjakan. Saya telah memecahkan masalah ini dan mengirimkan kode di github.

Anda dapat memeriksa sumber dan mem-forknya di sini .

Ini pada dasarnya mengambil url youtube dan mendapatkan semua url video yang kompatibel dengan iOS.

Semoga ini bisa membantu!
Bersulang

halozimi
sumber
1
Terima kasih! BTW, pembaruan memperbaiki masalah dengan perubahan YouTube terkini.
Peter DeWeese
1
Ini tidak diperbolehkan menurut Persyaratan Layanan YouTube. Gunakan dengan risiko Anda sendiri, karena aplikasi Anda dapat berhenti berfungsi kapan saja jika YouTube memperhatikan Anda tidak mengikuti ToS ATAU jika YouTube mengubah kode sematan yang dibuatnya.
Mathew
12

Saya baru saja menemukan seseorang yang dapat menempatkan YouTubevideo di dalam file MPMoviePlayerController. Tampaknya itu mungkin sekarang.

LBYouTubeView

TPoschel
sumber
@Thanx berfungsi dengan baik tetapi ketika saya menggunakan [mpplayer stop]; untuk menghentikan video ini maka video sedang berjalan. tetapi saya ingin menghentikan video
Jaspreet Singh
apakah tautan github juga memutar audio di latar belakang?
Khalid Usman
2

Untuk memutar video tube Anda, Anda perlu mengekstrak url sebelum meneruskan url ke dalamnya MPMoviePlayer. Anda tidak bisa memainkannya secara langsung.

Repo github saya memiliki implementasi demo ini.

Lihat:

https://github.com/DpzAtMicRO/IOSYoutubePlayer

Cobalah, ini memungkinkan untuk memuat dan memutar video youtube secara langsung MPMoviePlayerseperti video lainnya dan juga merupakan pendekatan yang cukup bagus.

EDIT: Pastikan Anda membaca Readme.md dengan baik sebelum menggunakan ini dalam proyek Anda

DD_
sumber
2
Sayangnya, bertentangan dengan Persyaratan Layanan YouTube. Jika Anda melakukan ini, Anda hanya dapat mengharapkan aplikasi Anda bekerja selama YouTube tidak mengetahui apa yang Anda lakukan.
Mathew
Beberapa waktu yang lalu, saya mengirim email ke API YouTube untuk menanyakan apakah saya boleh mengurai URL video sendiri; ini adalah kutipan dari balasan yang saya dapatkan: "Satu-satunya mekanisme yang didukung adalah penyematan iframe. Akses streaming mentah tidak didukung oleh ToS kami selain streaming RTSP resolusi rendah yang kami sediakan untuk ponsel
menengah
1
Anda telah meyakinkan saya pada titik downvoting; Saya setuju bahwa ini seharusnya menjadi alat untuk menandai ketidaktepatan, dan upvoting itu cukup untuk menunjukkan jawaban mana yang menurut saya paling relevan bagi orang yang mencoba menyelesaikan masalah penyematan YouTube. Sial, Ternyata StackOverflow mengunci downvote saya dan saya tidak dapat menghapusnya lagi kecuali jawaban Anda diedit.
Mathew
Bagus! Saya dapat mengedit dan meminta Anda untuk menghapus suara negatif Anda! ... Tapi ... tidak perlu .. biarkan saja!
DD_
@Mathew Banyak aplikasi iOS yang sah melakukan hal semacam ini (melewati API YouTube) dan meskipun itu melanggar ToS seperti yang Anda tunjukkan, Google tampaknya tidak keberatan dalam banyak kasus karena memungkinkan produk mereka menjangkau lebih banyak pemirsa.
rmp251
1

Ini semudah mengambil elemen src dari iframe untuk pemanggilan dan kode embed baru

[self.webView loadRequest:[NSURLRequest requestWithURL:self.url]];
jjxtra.dll
sumber
0

Ada cara resmi untuk menyematkan video YouTube di aplikasi iOS yang disediakan oleh Google.

Instal perpustakaan melalui cocoapods: pod "youtube-ios-player-helper"

impor oleh: #import “YTPlayerView.h” Gunakan UIViewdan setel kelas ke YTPlayerViewatau buat objek secara YTPlayerViewterprogram.

Muat video: [self.playerView loadWithVideoId:@"M7lc1UVf-VE"];

Ada juga playVideodan stopVideometode yang tersedia. Untuk info lebih lanjut kunjungi Tautan ini

Ganpat
sumber