OGeek|极客世界-中国程序员成长平台

标题: ios - MPMoviePlayerController 如何使用不受信任的证书的 url 播放音频(视频)? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 11:53
标题: ios - MPMoviePlayerController 如何使用不受信任的证书的 url 播放音频(视频)?

MPMoviePlayerController 如何使用 不可信证书 的 url 播放音频(视频)?

有这样的错误日志===>

NSURLConnection/CFURLConnection HTTP 加载失败 (kCFStreamErrorDomainSSL, -9813)

如果只使用 NSURLConnection/NSURLSession 请求请求,我知道使用它的委托(delegate)来接受不受信任的证书。(如加载图像)

但是如果只播放带有不受信任证书的url,如何处理这部分? 我试图添加一个 NSURLConnection 并且已经运行了委托(delegate) (connection:canAuthenticateAgainstProtectionSpace: connection:canAuthenticateAgainstProtectionSpace 在播放音频之前,我发现了错误消息:

NSURLConnection/CFURLConnection HTTP 加载失败 (kCFStreamErrorDomainSSL, -9813)

消失了,但还是无法成功播放音频。

有人知道吗?



Best Answer-推荐答案


我也在 Apple 上发布了这个问题,我得到了答案。 MPMoviePlayerController 无法播放不受信任的证书。

相反,我们可以使用 AVPlayer 来播放带有不受信任证书的音频、视频。

这是我的代码,工作正常

- (IBAction)clickPlayBtnid)sender
{

    NSURL *sourceMovieURL = [[NSURL alloc]initWithString"https//:xxxxxxx"];

    AVURLAsset *movieAsset = [AVURLAsset URLAssetWithURL:sourceMovieURL options:nil];
    [movieAsset.resourceLoader setDelegate:self queue:dispatch_get_main_queue()];

    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:movieAsset];
    AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem];
    AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
    playerLayer.frame = self.view.layer.bounds;
    playerLayer.videoGravity = AVLayerVideoGravityResizeAspect;

    [self.view.layer addSublayer:playerLayer];
    [player play];
}

// AVAssetResourceLoaderDelegate
- (BOOL)resourceLoaderAVAssetResourceLoader *)resourceLoader
shouldWaitForResponseToAuthenticationChallengeNSURLAuthenticationChallenge *)authenticationChallenge
{
    //server trust
    NSURLProtectionSpace *protectionSpace = authenticationChallenge.protectionSpace;
    if ([protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust])
    {
        [authenticationChallenge.sender useCredential:[NSURLCredential credentialForTrust:authenticationChallenge.protectionSpace.serverTrust] forAuthenticationChallenge:authenticationChallenge];
        [authenticationChallenge.sender continueWithoutCredentialForAuthenticationChallenge:authenticationChallenge];

    }
    else{ // other type: username password, client trust..
    }
    return YES;
}

关于ios - MPMoviePlayerController 如何使用不受信任的证书的 url 播放音频(视频)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26012752/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4