我正在尝试在我的应用程序中播放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
它无法播放时。 有什么解决办法吗?
您不能只使用get_video_info
数据,您还需要下载主视频页面以查看加载了哪个html5player-XXXXX.js
javascript文件。这将决定需要哪些排列。以 http://www.jwz.org/hacks/youtubedown(用Perl编写)为例 - 跳到"这不是加密或哈希,只是字符重排密码"的部分。通过默默无闻实现全面安全。完全的鸡巴移动",这是我衷心同意的情绪。
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的作者。
有点无耻的自我推销,我花了最后几周的时间弄清楚替代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 时需要注意使用正确的时间戳值)。