2017-09-07 12 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에 저장된 키 요청을 가로 채고 있습니다.

내 장치의 Wi-Fi 또는 데이터 연결이 꺼져있을 때 맞춤 키가있는이 AES 암호화 HLS 비디오가 잘 재생됩니다.

내 장치의 와이파이 또는 데이터 연결이 활성화 된 상태에서이 비디오를 재생을 시작하거나 만약 내가 재생중인 비디오 동안 내 장치의 와이파이 또는 데이터 연결을 사용하는 경우; 비디오는 오류없이 즉시 재생을 멈추고 다시 재생되지 않습니다.

playerLog의 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 : 기반) 및 .frag 파일을 로컬로 다운로드합니다.

    오프라인 모드에서 HLS 비디오가 완벽하게 재생되었습니다. 그러나 네트워크 연결이 가능 해지면 로컬 .frag 파일 대신 https : URL을 참조합니다.

    이 파일의 https : scheme 대신 사용자 지정 구성표 (fakehttps :)를 사용하여 온라인으로 AVPlayer가 리소스를 제한하도록했습니다.

    이 문제는 내 문제를 해결했지만 그 뒤에 정확한 이유와 HLS가 AVPlayer에 의해 재생되는 방법을 알지 못합니다.

    나는 this을 언급했으며 어떤 아이디어를 시도했다.