2015-02-05 184 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会实际播放该文件。我正在尝试同样的事情,但问题是解密文件需要很多时间。您是否找到了将InputStream本身传递给Exo的解决方案? – 2015-09-18 09:51:35

+0

我从来没有找到解决方案。当使用encfs挂载/卸载时,我们在整个SD卡上实施了加密。我仍然想弄清楚这一点,因为我认为这是更好的解决方案的一部分,但还没有时间深入研究。 – 2015-09-18 16:21:23

回答

1

你可以写一个接受InputStream的自定义数据源:为数据源,你只需要实现的open(DataSpec),关闭(),读(字节[]缓冲区,诠释抵消,诠释读数长度)。令我吃惊的是,ExoPlayer似乎没有任何已经可用的实现。它看起来像是瑞士军刀的一把明显刀刃。

+0

有执行,但他们隐藏它https://github.com/google/ExoPlayer/blob/master/library/src/main/java/com/google/android/exoplayer/hls/Aes128DataSource.java – 2016-06-02 23:53:43

+0

@RogerAlien链接破损 – 2016-08-01 15:45:20

+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 – 2016-08-01 22:48:55