2009-11-22 11 views
85

Sto provando a trasmettere alcuni video YouTube utilizzando MPMoviePlayerController ma ho qualche problema. Il codice che sto usando è piuttosto semplice e posso riprodurre video .m4v passando un URL a initWithContentURL. Quando lancio il riproduttore di film, il lettore si avvicina ma si allontana dopo circa 20 secondi. Quando provo nel simulatore, ricevo una vista di avviso che dice che il server non è configurato correttamente. C'è un argomento che devo passare con l'URL per ottenere un tipo specifico di feed video da google?Riproduci video di YouTube con MPMoviePlayerController invece di UIWebView

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

[moviePlayer play]; 

Ho anche provato il seguente URL del http://www.youtube.com/watch?v=HGd9qAfpZio

ho visto anche l'argomento & format = 1 e ha cercato di aggiungere che alla fine entrambe le corde, ma senza fortuna.

+0

ho trovato qualche informazione in più, ma ancora non funziona. Qualcuno ha suggerito di utilizzare questo per un URL: http://www.youtube.com/get_video?video_id=ID&t=SIGNATURE&fmt=18 Ho inserito il mio ID video ma non so quale sia la firma? E il video player si comporta ancora allo stesso modo. Apre il lettore e poi si chiude dopo 10 o 20 secondi. – jmurphy

risposta

77

L'unico modo per riprodurre un video di YouTube all'interno della propria app è creare uno UIWebView con il tag embed da Youtube per il film che si desidera riprodurre come il contenuto dello UIWebView's. UIWebView rileverà che l'oggetto incorporato è un collegamento Youtube e il contenuto della vista Web sarà l'anteprima di YouTube per il video. Quando l'utente fa clic sull'anteprima, il video verrà mostrato in un MPMoviePlayerController. Questa è la tecnica descritta nel link che Muxecoid ha fornito (how to play youtube videos within an application), e questo è (per quanto ne so) l'unico modo per avere un video di youtube da riprodurre all'interno di un'applicazione. Puoi ancora avviare l'applicazione Youtube passando l'URL di YouTube a -[UIApplication openURL:], ma ovviamente questo chiude la tua applicazione che è spesso indesiderabile.

Sfortunatamente, non c'è modo di riprodurre direttamente un video di YouTube con MPMoviePlayerController perché YouTube non espone i collegamenti diretti ai file video.

+1

Sì, questo è l'unico modo per riprodurre i video di YouTube nella tua app. Ho trascorso 2 alla ricerca di alternative. Anche la qualità è pessima. – samvermette

+0

Non c'è ancora nessun altro modo - dopo più di 2 anni? – fabb

+0

Esiste la possibilità di ricevere le notifiche PlaybackFinishReason e PlaybackState in caso di riproduzione di un video di YouTube come incorporato? – Roshit

25

Se si utilizza Codice:

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

Fonte:

Just refer this link

Assicurarsi di eseguire il test sul dispositivo e non sul simulatore. Dal momento che il simulatore mostrerà sempre il punto interrogativo con la casella blu (non ha un lettore quick-time).

+3

Usa l'URL del video con il formato: http://www.youtube.com/v/XXXXXXX –

13

Mi sono imbattuto in qualcuno che è riuscito a inserire un video YouTube all'interno di uno MPMoviePlayerController. Sembra possibile ora.

LBYouTubeView

+0

@Thanx funziona bene ma quando uso [mpplayer stop]; per interrompere questo video, il video è in esecuzione. ma voglio interrompere il video –

+0

il link github riproduce anche l'audio in background? –

22

Come ho scritto in precedenza nel mio commento ho dovuto fare questo in un progetto su cui stavo lavorando. Ho risolto questo problema e ho inviato il codice su github.

È possibile controllare la fonte e forchetta here.

Prende fondamentalmente un URL youtube e ottiene tutti gli URL video compatibili iOS.

Spero che questo sia per qualsiasi aiuto!
Acclamazioni

+2

è consentito? – Tatvamasi

+1

Grazie! A proposito, gli aggiornamenti hanno risolto il problema con le recenti modifiche di YouTube. –

+1

Questo non è consentito in ToS di YouTube. Usalo a tuo rischio, perché la tua app potrebbe smettere di funzionare in qualsiasi momento se YouTube rileva che non stai seguendo il ToS O se YouTube cambia il codice di incorporazione che genera. – Mathew

1

E 'semplice come prendere l'elemento src del iframe per il nuovo codice sovrastante e chiamando

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

Per giocare è video tube è necessario estrarre l'url prima di passare l'URL in MPMoviePlayer. Non puoi giocare direttamente.

Il mio repository github ha una implementazione demo di questo.

See:

https://github.com/DpzAtMicRO/IOSYoutubePlayer

provare, questo permette di caricare e riprodurre video di YouTube direttamente in MPMoviePlayer come qualsiasi altro video ed è abbastanza buon approccio troppo.

EDIT: assicurarsi che si passa attraverso il Readme.md bene prima di utilizzare questo nel vostro progetto

+2

Contro il ToS di YouTube, sfortunatamente. Se lo fai, puoi aspettarti che la tua app funzioni fino a quando YouTube non è a conoscenza di ciò che stai facendo. – Mathew

+0

Ho inviato via email all'API di YouTube alcuni ragazzi per chiedere se sarebbe stato corretto per me analizzare l'URL del video da me stesso; questa è una citazione dalla risposta che ho ricevuto: "L'unico meccanismo supportato è l'incorporamento di iframe. L'accesso allo stream raw non è supportato dal nostro ToS diverso dai flussi RTSP a bassa risoluzione che forniamo per i feature phone" – Mathew

+1

Mi hai convinto punto di downvoting; Sono d'accordo sul fatto che dovrebbe essere uno strumento per contrassegnare l'inesattezza e che l'upvoting è sufficiente per mostrare quali di queste risposte sono più pertinenti per le persone che tentano di risolvere il problema dell'embedded di YouTube. Dannazione, Apparentemente StackOverflow blocca il mio downvote e non riesco più a rimuoverlo a meno che la tua risposta non sia stata modificata. – Mathew

Problemi correlati