2015-02-05 4 views
6

ExoPlayer를 사용하여 장치의 SD 카드에서 미디어 파일 (mp4s .h264 인코딩)을 재생하고 있습니다. 일부 파일은 DES 암호화됩니다. 파일을 해독하여 inputStream을 얻을 수는 있지만 ExoPlayer를 사용하여이 inputStream을 재생하는 방법을 알 수 없습니다. 어떤 도움을 주시면 감사하겠습니다.ExoPlayer를 사용하여 DES 암호화 된 파일을 재생하는 방법

protected void playVideo(File file) { 
     InputStream is; 
     if (file.getName().endsWith(".DES")) { 
      is = FileManager.decryptFile(file); 
      //what to do with this input stream? 
     } 

     Uri uri = Uri.parse(file.getAbsolutePath()); 

     if (mPlayer != null) { 
      mPlayer.release(); 
     } 

     mPlayer = new VideoPlayer(getRendererBuilder(uri)); 
     mPlayer.addListener(this); 
     if (mLastPosition > 0) { 
      mPlayer.seekTo(mLastPosition); 
     } 

     mPlayer.prepare(); 
     mPlayer.setSurface(mSurface); 
     mPlayer.setPlayWhenReady(true); 
    } 
+0

InputStream은 ExoPlayer에서 실제로 재생할 임시 파일에 기록해야합니다. 나는 똑같은 것을 시도하고 있지만, 문제는 파일을 decrypt하는데 많은 시간이 걸린다는 것이다. InputStream 자체를 Exo로 전달하는 솔루션을 찾았습니까? –

+0

나는 이것에 대한 해결책을 찾지 못했다. 우리는 encfs를 사용하여 마운트/마운트 해제 할 때 전체 SD 카드에 암호화를 구현했습니다. 나는 이것이 더 나은 해결책의 일부라고 믿기 때문에 여전히 이것을 파악하고 싶지만 더 깊이 파고 들어야 할 시간이 없다. –

답변

1

당신은 InputStream를 받아들이는 사용자 정의 데이터 소스를 작성할 수 있습니다) (가까운 데이터 소스에 대한, 당신은 단지 (DataSpec)를 열고 구현, 읽기 (바이트 [] 버퍼를 오프셋 INT, INT readLength). 저를 놀라게 한 것은 ExoPlayer에서 이미 구현이 가능한 것 같지 않다는 것입니다. 스위스 군용 칼에 대한 명백한 칼처럼 보일 것입니다.

+0

구현이 있었지만 https://github.com/google/ExoPlayer/blob/master/library/src/main/java/com/google/android/exoplayer/hls/Aes128DataSource.java –

+0

@RogerAlien 링크를 숨겼습니다. 깨진 –

+1

@AdamW https://gist.github.com/AlienAsRoger/a0011d246d83c3823d73fcc5bb6a44d6 http://www.programcreek.com/java-api-examples/index.php?source_dir=ExoPlayer-master/library/src/main /java/com/google/android/exoplayer/hls/Aes128DataSource.java –