我在
Android中使用
ExoPlayer,我正在尝试重现本地存储的加密视频.
ExoPlayer的模块化允许创建可以注入到ExoPlayer中的自定义组件,这种情况似乎如此.事实上,经过一些研究,我意识到,为了完成任务,我可以创建一个自定义的DataSource并覆盖open(),read()和close().
我也发现了this solution,但实际上这里整个文件是一步解密并存储在一个清晰的输入流中.这在很多情况下可以很好.但是如果我需要重现大文件怎么办?
所以问题是:如何在ExoPlayer中复制加密的视频,“即时”解密内容(不解密整个文件)?这可能吗
我尝试创建一个具有open()方法的自定义DataSource:
@Override
public long open(DataSpec dataSpec) throws FileDataSourceException {
try {
File file = new File(dataSpec.uri.getPath());
clearInputStream = new CipherInputStream(new FileInputStream(file), mCipher);
long skipped = clearInputStream.skip(dataSpec.position);
if (skipped < dataSpec.position) {
throw new EOFException();
}
if (dataSpec.length != C.LENGTH_UNBOUNDED) {
bytesRemaining = dataSpec.lengt