Как расшифровать подпись и добавить к извлеченному URL-адресу YouTube в objective c?

Я пытаюсь воспроизвести видео youtube в своем приложении. все работает нормально. но когда я пытаюсь смотреть видео, содержащее контент с youtube. он терпит неудачу.

Я исследовал нашел один думаю, что вы должны зашифровать и расшифровать подпись и добавить это в URL?

Я не знаю, как decrypt signature in На iOS?

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 его не играет. есть ли решение?

3 ответов


вы не можете просто использовать 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.


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).