【问题标题】:Load YouTube GData feed for a single video by id按 ID 加载单个视频的 YouTube GData 提要
【发布时间】:2011-05-05 23:21:59
【问题描述】:

我正在尝试在 UIWebView 中播放 youtube 视频,而不是离开我的应用程序。

Google 认为很容易-http://apiblog.youtube.com/2009/02/youtube-apis-iphone-cool-mobile-apps.html

所以我的 GData 框架和标头运行良好,而且我在查询、加载用户的视频源等方面没有问题。

但我似乎无法加载特定视频的供稿。 我提前知道我想要订阅源的视频的 ID。如何加载特定视频的供稿?

然后我将按照 google 的说明进行操作:

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

然后像这样嵌入它:

// 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"]];

任何帮助将不胜感激!

【问题讨论】:

    标签: iphone objective-c youtube youtube-api


    【解决方案1】:

    刚刚在完全相同的情况下找到了答案。通常在许多大型 API 中,常见的使用说明在解释更高级别的内容时会丢失 - 可能会令人沮丧。谢天谢地,信息在那里......

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

    因此,我们应该能够将返回的 ATOM 提要插入 GData 库,并让它解析出正确的内容 URL,以便在“UIWebView”样式播放器代码中使用。

    ...Grobbins,下次请正确阅读问题!

    【讨论】:

      【解决方案2】:

      鉴于 YouTube 视频条目的提要,您可以通过以下方式从每个条目中获取 ID 和 Flash URL:

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

      【讨论】:

      • 这是有道理的,但我如何首先获得该提要?我不是在查找所有用户的视频、播放列表的视频、上传的视频或其他任何内容……我正在寻找一个特定视频的提要。
      • @grobbins 不确定我错过了什么,但我得到了 -[GDataEntryBase mediaGroup]: unrecognized selector sent to instance。使用您提供的确切代码,并且 videoEntry 在调试器中显示为仍然是 GDataEntryBase 类型(即使使用上面的 GDataEntryYouTubeVideo)。尝试调用 mediaGroup 的第二行发生崩溃。有什么想法吗?
      猜你喜欢
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 2013-06-05
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      相关资源
      最近更新 更多