2017-09-07 2 views
0

HLSビデオをダウンロードしてオフラインモードで再生するコードを記述しました。 このコードは、エンコードされたビデオで正常に動作します。今私はAES暗号化されたビデオを持っており、それにカスタム暗号化キーを持っています。 AESで暗号化されたHLSビデオをダウンロードした後、以下のコードを使用して、ビデオの復号化のための鍵を提供しています。AVPlayer AESで暗号化されたオフラインHLSビデオのオンラインモードでの再生を停止します

- (BOOL)resourceLoader:(AVAssetResourceLoader *)resourceLoader shouldWaitForLoadingOfRequestedResource:(AVAssetResourceLoadingRequest *)loadingRequest { 

NSString *scheme = loadingRequest.request.URL.scheme; 

if ([scheme isEqualToString:@"ckey"]) { 

    NSString *request = loadingRequest.request.URL.host; 
    NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:request]; 

    if (data) { 
     [loadingRequest.dataRequest respondWithData:data]; 
     [loadingRequest finishLoading]; 
    } else { 
     // Data loading fail 
    } 
} 
return NO; }  

私は、復号化のためにUserDefaultsに格納されている鍵の要求を傍受し、その鍵を渡しています。

このAESで暗号化されたカスタムキー付きHLSビデオは、デバイスの無線またはデータ接続がオフのときに再生されます。

私は自分のデバイスのWiFiまたはデータ接続が有効か 場合、ビデオを再生しながら、私は私のデバイスのWiFiまたはデータ接続を有効にしたとき、この動画の再生を開始すると、ビデオはエラーなしですぐに再生を停止し、再び再生されません。

私はplayerItemのaccessLogとerrorLogをチェックしましたが、役に立たないものは見つかりませんでした。私は

URI =を置き換えることによって、.m3u8ファイルの内容を更新していますHLSコンテンツのダウンロードした後に、カスタムURLのキーを提供するために、 "..."

文字列を

URI = "CKEY:// ..."

は番目ですAES暗号化ビデオの鍵を提供する正しい方法ですか?

この現象の原因とその原因は何か?

ありがとうございます。

答えて

0

最後に私はこの問題を解決することができました。ダウンロードされたHLSビデオのラフパッケージ構造を以下のように与えられる:ある:(ベースHTTPSれる)

  • StreamBootInfo.xmlはHLS URL間のマッピングが含まれています(

    HLS.movpkg 
    |_ 0-12345 
        |_ 123.m3u8 
        |_ StreamInfoBoot.xml 
        |_ StreamInfoRoot.xml 
        |_ <>.frag 
    |_ boot.xml 
    
    1. boot.xmlは、HLSのネットワークURLが含まれていますhttps:based)と.fragファイルをローカルにダウンロードします。

    オフラインモードでは、HLSビデオは完全に再生されていました。しかし、ネットワーク接続が有効になっているときは、ローカルの.fragファイルではなくhttps:URLを参照していました。

    これらのファイルのhttps:schemeをカスタムスキーム(fakehttps :)に置き換えて、リソースのオンラインになるAVPlayerを制限しました。

    この問題は私の問題を解決しましたが、その背後にある正確な理由、およびHLSがAVPlayerによってどのように再生されるかはわかりません。

    私はthisと言い、何か試してみました。

  • 関連する問題