iOS FairPlay видео не воспроизводится после получения CKC с сервера - PullRequest
0 голосов
/ 03 июня 2018

Я пытаюсь реализовать FairPlay в своем приложении.

Я могу воспроизвести зашифрованное видео с помощью SDK, предоставленного Apple, но проблема в том, что SDK находится в Swift, но мой проект в Objective C.

Итак, я переписал код в своем проекте, но не могу воспроизвести видео.

enter image description here

Вот ссылки, которые я использую:

  1. Плейлист: https://willzhanmswest.streaming.mediaservices.windows.net/92fc0471-0878-4eeb-80a3-e5b6fc497806/NoAudio.ism/manifest(format=m3u8-aapl)

  2. Сертификат: https://openidconnectweb.azurewebsites.net/Content/FPSAC.cer

Вот шаги, которые я выполнил:

  1. Добавлен делегат в AVURLAsset для вызова этой функции shouldWaitForLoadingOfRequestedResource.
  2. В этой функции я впервые получаюсодержимое сертификата в NSData
  3. Затем я получаю строку ресурса и преобразую ее в NSData.
  4. Затем я вызываю эту функцию для создания значения SPC.
NSData *spc = [loadingRequest streamingContentKeyRequestDataForApp:certificate contentIdentifier:assetId options:nil error:nil];
Полученный SPC и идентификатор актива затем передаются на сервер Azure с типом содержимого application / x-www-form-urlencoded. Полученный CKC ​​затем обрезается для удаления и тегов, а затем преобразуется вBase64String, а затем вызвал эти функции
[dataRequest respondWithData:base64CkcData];
[loadingRequest finishLoading];

Может кто-нибудь помочь мне выяснить, что я здесь не так делаю?

Спасибо.

1 Ответ

0 голосов
/ 11 сентября 2018

У меня были похожие проблемы с этим.Я предполагаю, что вы начали с версии obj-c https://gist.github.com/fousa/5709fb7c84e5b53dbdae508c9cb4fadc, да?Эта часть кода, кажется, работает для меня, и мне просто интересно, если это то, что вы уже сделали.

// licenseRequestURL is https://keydeliveryURL.azure.net/FairPlay/?kid=whatever-your-key-id-is
// contentId is keydeliveryURL.azure.net

// Create HTTP request
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:licenseRequestURL];
[request setHTTPMethod:@"POST"];
[request setValue:[NSString stringWithFormat:@"Bearer %@",authenticationToken] forHTTPHeaderField:@"Authorization"];

// Create Request HTTP body:
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
NSString *spcString = [spcData base64EncodedStringWithOptions:0];
NSString *httpBodyString = [NSString stringWithFormat:@"spc=%@&assetId=%@",
                            [spcString stringByAddingPercentEncodingWithAllowedCharacters:
                             [[NSCharacterSet characterSetWithCharactersInString:@"="] invertedSet]], contentId];
[request setHTTPBody:[httpBodyString dataUsingEncoding:NSUTF8StringEncoding]];

// Create session to run request asynchronously
NSURLSession *session = [NSURLSession sessionWithConfiguration:NSURLSessionConfiguration.defaultSessionConfiguration
                                                      delegate:self
                                                 delegateQueue:nil];
NSURLSessionTask *task = [session dataTaskWithRequest:request
completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;

    NSString *dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSString *stringStrippedOfCkcTags = [[dataString stringByReplacingOccurrencesOfString:@"<ckc>"
                                                                               withString:@""]
                                stringByReplacingOccurrencesOfString:@"</ckc>"
                                                          withString:@""];
    NSData *base64CkcData = [[NSData alloc] initWithBase64EncodedString:stringStrippedOfCkcTags
                                                                options:0];

    [dataRequest respondWithData:base64CkcData];
    [loadingRequest finishLoading];
}];
[task resume];

Если это то, что у вас есть, возможно, проблема в видео.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...