aks*_*ane 5 encryption video-streaming exoplayer
我有使用存储在服务器上的AES加密的视频文件.如何在exoplayer中在线流式传输?我不想下载文件并解密它:等待下载完成然后播放解密文件.
我建议看一下UriDataSource或DataSource界面。您可以派生DataSource并提供与 ExoPlayer 非常相似的实现UriDataSource,并将其传递给 ExoPlayer。该类可以访问read()所有字节都经过的方法。该方法允许您一次解密一个缓冲区中的文件。
DataSource在 ExoPlayer 2.0 中,您可以从自己的自定义中提供自己的自定义DataSource.Factory,该自定义可以传递给ExtractorMediaSource(或任何其他MediaSource)。
如果您没有使用 ExoPlayer 2.0,则可以将 传递给DataSource,ExtractorSampleSource然后传递给您实现的自定义的和VideoRenderer。(您也可以谷歌“自定义数据源 exoplayer”,如果我提供的内容不够,这应该会提供更多信息 - 或者如果您找不到任何内容,我可以澄清)。AudioRenderbuildRenderers()RendererBuilder
这是该方法的代码片段read():
@Override
public int read(byte[] buffer, int offset, int readLength) throws IOException {
if (bytesRemaining == 0) {
return -1;
} else {
int bytesRead = 0;
try {
long filePointer = randomAccessFile.getFilePointer();
bytesRead =
randomAccessFile.read(buffer, offset, (int) Math.min(bytesRemaining, readLength));
// Supply your decrypting logic here
AesEncrypter.decrypt(buffer, offset, bytesRead, filePointer);
} catch (EOFException eof) {
Log.v("Woo", "End of randomAccessFile reached.");
}
if (bytesRead > 0) {
bytesRemaining -= bytesRead;
if (listener != null) {
listener.onBytesTransferred(bytesRead);
}
}
return bytesRead;
}
}
Run Code Online (Sandbox Code Playgroud)
[编辑] 还刚刚发现这个 SO 帖子有类似的建议。