【问题标题】:How can i decrypt signature and add to the YouTube Extracted URL in objective c?如何解密签名并添加到目标 c 中的 YouTube 提取 URL?
【发布时间】:2014-04-06 23:15:20
【问题描述】:

我正在尝试在我的应用程序中播放 youtube 视频。一切正常。但是当我尝试观看包含来自 youtube 的内容的视频时。它失败。

我研究发现有人认为您应该加密和解密签名并将其添加到 URL 中?

我不知道如何在IOS中decrypt signature

http://www.youtube.com/get_video_info?video_id=uuZE_IRwLNI&el=vevo&ps=default&eurl=&gl=US&hl=en

stream

 {
    "fallback_host" = "tc.v12.cache7.googlevideo.com";
    itag = 22;
    quality = hd720;
    s = "8E6E5D13EB65FB653B173B94CB0BCC3A20853F5EDE8.5E2E87DF33EEDE165FEA90109D3C7D5DADA06B6BB60";
    type = "video/mp4; codecs=\"avc1.64001F, mp4a.40.2\"";
    url = "http://r7---sn-cvh7zn7r.googlevideo.com/videoplayback?pcm2fr=yes&sver=3&expire=1393773646&itag=22&id=bae644fc84702cd2&upn=SjZd81MudQs&sparams=gcr%2Cid%2Cip%2Cipbits%2Citag%2Cpcm2fr%2Cratebypass%2Csource%2Cupn%2Cexpire&ms=au&gcr=in&mt=1393747698&source=youtube&ratebypass=yes&ipbits=0&fexp=935620%2C919120%2C912523%2C932288%2C914084%2C916626%2C937417%2C937416%2C913434%2C932289%2C936910%2C936913%2C902907&mv=m&key=yt5&ip=103.250.162.79";
}

当我使用url 时,它不会播放。有什么解决办法吗?

【问题讨论】:

  • 您为什么要使用 YouTube API 的未记录部分并期望任何形式的一致性? s 可以是任何东西,甚至毫无价值。
  • 因为我想在我的应用程序中播放 youtube 的所有类型的视频。我没有找到任何方法。所以我在做谷歌,我来了。我知道苹果不会接受。但我想向我的客户展示。
  • 您确定不能使用真正的 YouTube API 做到这一点吗?
  • 我不知道我得到了这种类型的(r7---sn-cvh7zn7r)url 使用第三方库,当我使用这个 url 时,它有时可以工作,有时不能(错误 YouTube:此视频包含来自 vevo 的内容?)。
  • @CodaFi 不,你不能用官方的 YouTube API 获取视频的 URL。

标签: ios iphone objective-c ios7 youtube-api


【解决方案1】:

您不能只使用get_video_info 数据,您还需要下载主视频页面才能查看加载了哪个html5player-XXXXX.js javascript 文件。这将决定需要哪些排列。请参阅http://www.jwz.org/hacks/youtubedown(用 Perl 编写)作为示例——跳到“这不是加密或散列,只是字符重排密码。通过默默无闻的完全安全性。完全 dick move。”部分,这是一个我非常同意这种观点。

【讨论】:

    【解决方案2】:

    有点无耻的自我推销,过去几周我花了几个星期来弄清楚替代的 JavaScript 和 perl 版本的软件是如何做到的,最初使用 JavaScriptCore 来完成它,但决定我想要一个纯 obj-C 示例,所以我做了一个我自己。在主文件中对它的工作方式进行了详尽的评论。

    https://github.com/lechium/yourTube/blob/master/yourTube/KBYourTube.m

    KBYourTube *tube = [[KBYourTube alloc] init];
    NSArray *streamArray = [tube getVideoStreamsForID:@"_7nYuyfkjCk"];
    

    会回来

     {
    "fallback_host" = "tc.v20.cache6.googlevideo.com";
    format = "720p MP4";
    itag = 22;
    quality = hd720;
    s = "771171A2777DE13D6CE5320C210DCCA29F018FC6DBA.A7630D3C26F2F70EEFEB25889E1A1B8805EC0616616";
    title = "Lil+Wayne+-+She+Will+ft.+Drake";
    type = "video%2Fmp4%3B+codecs%3D%22avc1.64001F%2C+mp4a.40.2%22";
    url = "https://r15---sn-bvvbax-2iml.googlevideo.com/videoplayback?nh=EAI&fexp=9416126%2C9420452%2C9422596%2C9423662%2C9424859&ipbits=0&mime=video%2Fmp4&ratebypass=yes&itag=22&upn=8XDeh70fkMI&expire=1450776595&mt=1450754946&sparams=dur%2Cid%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cnh%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&key=yt6&id=o-AF5K6y8liVQ1S9iLjUHOcIBdnb4a8g-rgcFwGc0wuidq&mn=sn-bvvbax-2iml&mm=31&ms=au&mv=m&source=youtube&pl=16&dur=323.895&lmt=1417236324599143&ip=xx&requiressl=yes&sver=3&signature=671A2777DE73D6CE5320C210DCCA29F018FC1DBA.A7630D3C26F2F70EEFEB25889E1A1B8805EC0616&title=Lil+Wayne+-+She+Will+ft.+Drake";
    },
    

    这应该能够完全取代您当前获取有关视频的详细信息以用于下载/播放目的的任何方式,并为您处理签名解密。您也可以很容易地修改代码以仅将其用于签名解密(但在使用 get_video_info 时您需要注意使用正确的时间戳值)。

    【讨论】:

      【解决方案3】:

      XCDYouTubeKit 库通过一个非常简单的 API 供您使用。

      NSString *videoIdentifier = @"uuZE_IRwLNI";
      [[XCDYouTubeClient defaultClient] getVideoWithIdentifier:videoIdentifier completionHandler:^(XCDYouTubeVideo *video, NSError *error) {
          if (video)
          {
              // All URLs, with decrypted signature, are available in the `video.streamURLs` dictionary
          }
          else
          {
              // Handle error
          }
      }];
      

      免责声明:我是 XCDYouTubeKit 的作者。

      【讨论】:

      • Hii @0xced 你能帮忙吗,我怎么能在 php 服务器端实现这个
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 2019-09-24
      相关资源
      最近更新 更多