YouTube videolarını UIWebView yerine MPMoviePlayerController ile oynatın


89

MPMoviePlayerController'ı kullanarak bazı youTube videolarını izlemeye çalışıyorum ama bazı sorunlar yaşıyorum. Kullandığım kod oldukça basit ve initWithContentURL'ye bir URL ileterek .m4v videoları oynatabilirim. Film oynatıcıyı çalıştırdığımda oyuncu ortaya çıkıyor ancak yaklaşık 20 saniye sonra kayboluyor. Simülatörde denediğimde, sunucunun doğru yapılandırılmadığını belirten bir uyarı görünümü alıyorum. Google'dan belirli türde bir video yayını almak için URL ile iletmem gereken bir argüman var mı?

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

[moviePlayer play];

Ayrıca aşağıdaki URL'nin http://www.youtube.com/watch?v=HGd9qAfpZio adresini de denedim

Ayrıca & format = 1 bağımsız değişkenini de gördüm ve bunu her iki dizenin sonuna eklemeye çalıştım, ancak şans yok.


Biraz daha bilgi buldum ama yine de çalışmıyor. Biri bunu bir URL için kullanmayı önerdi: youtube.com/get_video?video_id=ID&t=SIGNATURE&fmt=18 Video kimliğimi ekledim ama imzanın ne olduğunu bilmiyorum? Ve video oynatıcı hala aynı şekilde davranıyor. Oynatıcıyı açar ve 10 ila 20 saniye sonra kapanır.
jmurphy

Yanıtlar:


78

Bir youtube videosunu kendi uygulamanızın içinde oynatmanın tek yolu UIWebView, UIWebView'siçerik olarak oynatmak istediğiniz film için Youtube'dan yerleştirme etiketi ile bir oluşturmaktır . UIWebViewgömülü nesnenin bir Youtube bağlantısı olduğunu algılar ve web görünümünün içeriği, videonun youtube önizlemesi olur. Kullanıcınız önizlemeyi tıkladığında, video bir MPMoviePlayerController'da gösterilecektir. Bu, Muxecoid'in sağladığı bağlantıda açıklanan tekniktir ( bir uygulama içinde youtube videolarının nasıl oynatılacağı ) ve bu (bildiğim kadarıyla) bir uygulama içinde bir youtube videosunun oynatılmasının tek yoludur. Youtube URL'sini adresine ileterek yine de Youtube uygulamasının başlatılmasını sağlayabilirsiniz -[UIApplication openURL:], ancak elbette bu, genellikle istenmeyen olan kendi uygulamanızı kapatır.

Maalesef, bir youtube videosunu doğrudan oynatmanın bir yolu yoktur MPMoviePlayerControllerçünkü youtube, video dosyalarına doğrudan bağlantılar sunmaz.


1
Evet, uygulamanızda YouTube videolarını oynatmanın tek yolu bu. Alternatifler aramak için 2 harcadım. Kalite de biraz kötü.
samvermette

2 yıldan sonra hala başka bir yol yok mu?
fabb

Bir youtube videosunu gömülü olarak oynatma durumunda PlaybackFinishReason ve PlaybackState bildirimlerini alma imkanı var mı?
Roshit

7
Bu tek yol değil. Mp4 dosyasını Youtube'dan alabilirsiniz. Bunu, AppleTV'nizde youtube videolarını oynatmanızı sağlayan AirPlayer Python Projemde yapıyorum . Bunu taşıyacağım ve mevcut iOS projemde kullanacağım ve hazır olduğunda kodu buraya göndereceğim.
hellozimi

7
Maalesef doğrudan bağlantı kullanmak yasaktır. Bölüm II / 10. içinde developers.google.com/youtube/terms : "API Client olmaz [...] erişim YouTube oynatıcısında veya açıkça YouTube tarafından yetkilendirilmiş diğer video oynatıcı kullanımı dışında başka herhangi bir yöntemle herhangi bir YouTube görsel-işitsel içerik herhangi bir kısmı;"
Lvsti

26

Kodu kullanıyorsanız:

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

Kaynak:

Sadece bu bağlantıya bakın

Simülatörde değil cihazda test ettiğinizden emin olun. Simülatör her zaman mavi kutu ile soru işareti göstereceğinden (hızlı zaman oynatıcısı yoktur).


23

Yukarıdaki yorumumda yazdığım gibi, bunu üzerinde çalıştığım bir projede yapmak zorundaydım. Bu sorunu çözdüm ve kodu github'a gönderdim.

Kaynağı kontrol edebilir ve buradan çatallayabilirsiniz .

Temelde bir youtube url'sini alır ve tüm iOS uyumlu video url'lerini alır.

Umarım bu herhangi bir yardım içindir!
Şerefe


1
Teşekkürler! BTW, güncellemeler son YouTube değişiklikleriyle ilgili sorunu çözdü.
Peter DeWeese

1
Buna YouTube'un Hizmet Şartları kapsamında izin verilmez. Kendi sorumluluğunuzdadır kullanın çünkü YouTube, Hizmet Şartları'na uymadığınızı fark ederse VEYA YouTube'un ürettiği yerleştirme kodunu değiştirirse uygulamanız herhangi bir noktada çalışmayı durdurabilir.
Mathew

12

Ben sadece bir YouTubevideo yerleştirebilen biriyle karşılaştım MPMoviePlayerController. Şimdi mümkün görünüyor.

LBYouTubeView


@Thanx çalışıyor ama [mpplayer durdur] kullandığımda; bu videoyu durdurmak için video çalışıyor. ama videoyu durdurmak istiyorum
Jaspreet Singh

github bağlantısı da sesi arka planda çalıyor mu?
Khalid Usman

2

Tüp videolarınızı oynatmak için, url'yi içine iletmeden önce url'yi çıkarmanız gerekir MPMoviePlayer. Doğrudan oynayamazsınız.

Github depomda bunun bir demo uygulaması var.

Görmek:

https://github.com/DpzAtMicRO/IOSYoutubePlayer

Deneyin, bu, youtube videosunu doğrudan MPMoviePlayerdiğer videolar gibi yüklemeyi ve oynatmayı mümkün kılar ve oldukça iyi bir yaklaşımdır.

DÜZENLEME: Projenizde bunu kullanmadan önce Readme.md'yi iyice incelediğinizden emin olun


2
Maalesef YouTube'un Hizmet Şartları'na karşı. Bunu yaparsanız, uygulamanızın yalnızca YouTube ne yaptığınızdan haberi olmadığı sürece çalışmasını bekleyebilirsiniz.
Mathew

Video URL'sini kendim ayrıştırmamın uygun olup olmadığını sormak için bir süre önce YouTube API çalışanlarına e-posta gönderdim; bu, aldığım yanıttan bir alıntı: "Desteklenen tek mekanizma iframe yerleştirmedir. Ham akış erişimi, özellikli telefonlar için sağladığımız düşük çözünürlüklü RTSP akışları dışında Hizmet Koşullarımız tarafından desteklenmez"
Mathew,

1
Olumsuz oylama konusunda beni ikna ettiniz; Bunun yanlışlığı işaretlemek için bir araç olması gerektiğini kabul ediyorum ve bu yanıtlardan hangisinin YouTube yerleştirme sorununu çözmeye çalışan kişiler için en alakalı olduğunu düşündüğüm için yeterli olduğunu kabul ediyorum. Kahretsin, Görünüşe göre StackOverflow olumsuz oyumu kilitliyor ve cevabınız düzenlenmedikçe artık kaldıramıyorum.
Mathew

harika! Bir düzenleme yapabilir ve sizden olumsuz oyunuzu kaldırmanızı isteyebilirim o zaman! ... Ama ... gerek yok.. orada olsun!
DD_

@Mathew Pek çok yasal iOS uygulaması bu tür şeyler yapıyor (YouTube'un API'sini atlayarak) ve sizin belirttiğiniz gibi Hizmet Şartları'nı ihlal etse de, Google, ürünlerinin erişmesine izin verdiği için çoğu durumda umursamıyor gibi görünüyor daha fazla izleyici.
rmp251

1

Yeni yerleştirme kodu için iframe'in src öğesini alıp çağırmak kadar basit

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


0

Google tarafından sağlanan iOS uygulamasına YouTube videosunu yerleştirmenin resmi bir yolu var.

Kitaplığı cocoapods aracılığıyla yükleyin: pod "youtube-ios-player-helper"

tarafından ithal: #import “YTPlayerView.h” Kullanım UIViewve set sınıf için YTPlayerViewveya nesne oluşturmak YTPlayerViewprogramlama yoluyla.

Video yükle: [self.playerView loadWithVideoId:@"M7lc1UVf-VE"];

Orada da playVideove stopVideomevcut yöntemler. Daha fazla bilgi için bu bağlantıyı ziyaret edin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.