2010-11-06 15 views
3

J'essaie de lire une vidéo YouTube sur un UIWebView au lieu de quitter mon application.Chargement du flux YouTube GData pour une seule vidéo par identifiant

Google pense est peasy- facile http://apiblog.youtube.com/2009/02/youtube-apis-iphone-cool-mobile-apps.html

J'ai donc le cadre GData et en-têtes de travail bien, et je n'ai pas de problème à faire des requêtes, alimente le chargement de la vidéo de l'utilisateur, etc.

Mais ce que je ne peux pas semble faire est de charger le flux d'une vidéo spécifique. Je connais les identifiants des vidéos pour lesquelles je veux recevoir les flux à l'avance. Comment charger le flux d'une vidéo spécifique?

Je suis alors allez suivre les instructions de Google:

Grab the video url from the media tag in the API response with the application/x-shockwave-flash type. 

puis l'incorporer comme ceci:

// webView is a UIWebView, either initialized programmatically or loaded as part of a xib. 

NSString *htmlString = @"<html><head> 
<meta name = \"viewport\" content = \"initial-scale = 1.0, user-scalable = no, width = 212\"/></head> 
<body style=\"background:#F00;margin-top:0px;margin-left:0px\"> 
<div><object width=\"212\" height=\"172\"> 
<param name=\"movie\" value=\"http://www.youtube.com/v/oHg5SJYRHA0&f=gdata_videos&c=ytapi-my-clientID&d=nGF83uyVrg8eD4rfEkk22mDOl3qUImVMV6ramM\"></param> 
<param name=\"wmode\" value=\"transparent\"></param> 
<embed src=\"http://www.youtube.com/v/oHg5SJYRHA0&f=gdata_videos&c=ytapi-my-clientID&d=nGF83uyVrg8eD4rfEkk22mDOl3qUImVMV6ramM\" 
type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"212\" height=\"172\"></embed> 
</object></div></body></html>"; 

[webView loadHTMLString:htmlString baseURL:[NSURL URLWithString:@"http://www.your-url.com"]]; 

Toute aide serait très apprécié!

Répondre

6

Étant donné un flux d'entrées vidéo YouTube, vous pouvez obtenir les identifiants et les URL Flash à partir de chaque entrée de cette façon:

for (GDataEntryYouTubeVideo *videoEntry in [feed entries]) { 
    GDataYouTubeMediaGroup *mediaGroup = [videoEntry mediaGroup]; 
    NSString *videoID = [mediaGroup videoID]; 

    NSArray *mediaContents = [mediaGroup mediaContents]; 
    GDataMediaContent *flashContent = 
    [GDataUtilities firstObjectFromArray:mediaContents 
           withValue:@"application/x-shockwave-flash" 
           forKeyPath:@"type"]; 

    NSLog(@"video ID = %@, flash content URL = %@", 
     videoID, [flashContent URLString]); 
} 
+0

Cela a du sens, mais comment puis-je obtenir ce flux en premier lieu? Je ne recherche pas toutes les vidéos d'un utilisateur, ou les vidéos d'une playlist, ou les téléchargements ou quoi que ce soit ... Je cherche le flux pour une vidéo en particulier. – averydev

+0

@grobbins Je ne suis pas sûr de ce qui me manque mais je reçois - [GDataEntryBase mediaGroup]: sélecteur non reconnu envoyé à l'instance. Utilisé le code exact que vous avez fourni et videoEntry montre dans le débogueur comme étant toujours du type GDataEntryBase (même avec le GDataEntryYouTubeVideo ci-dessus). Un incident survient en deuxième ligne en essayant d'appeler mediaGroup. Des idées? – kdbdallas

2

Dans exactement la même situation que trouve la réponse. En règle générale, de nombreuses grandes API, les instructions d'utilisation courantes se perdent dans l'explication des choses de niveau supérieur - peut être frustrant. Heureusement, l'info est là ...

http://code.google.com/apis/youtube/2.0/developers_guide_protocol_video_entries.html

Ainsi, nous devrions être en mesure de brancher l'alimentation ATOM retourné dans la bibliothèque GData et avoir parser le bon URL de contenu pour une utilisation dans le « UIWebView » code du lecteur de style.

... Grobbins, lisez la question correctement la prochaine fois!