저는 지금 저만의 로직으로 완성된 암호화된 동영상을 재생하려합니다. 복호화된 파일 생성하고 재생하기에는 동영상의 용량이 너무나 크기 때문에 재생될 때 까지 시간이 너무 많이 걸립니다. 그래서 찾아낸 것이 ExoPlayer를 사용해서 InputStream으로 복호화하면서 재생하는 방법이죠.
그리고 제가 생각한 기능을 완성할 흐름은 다음과 같습니다.
1. ExoPlayer의 UI를 완성한다.
2. 나의 암호화 로직을 사용해 다운로드된 파일을 암호화한다.
3. InputStream으로 파일을 받아오면서 동시에 복호화하며 재생한다. (스트리밍)
1번과 2번까지는 어떻게든 해보겠지만 3번은 저에게 매우 어렵습니다. 혹시 구체적인 코드와 설명을 알려주실수 있으신분이 계신가요. 혹시 아시는 분은 혜안을 부탁드립니다. 감사합니다.
try {
ios = new FileInputStream(params[0]);
fos = context.openFileOutput(params[1] + ".mp4", MODE_PRIVATE);
ScatteringByteChannel sbc = ios.getChannel();
GatheringByteChannel gbc = fos.getChannel();
File file = new File(params[0]);
fileLength = file.length();
startTime = System.currentTimeMillis();
int read = 0;
readb = 0;
ByteBuffer bb = ByteBuffer.allocate(4096);
while ((read = sbc.read(bb)) != -1) {
bb.flip();
gbc.write(ByteBuffer.wrap(enDecryptVideo.combineByteArray(bb.array())));
bb.clear();
readb += read;
if (readb % (4096 * 1024 * 3) == 0){
publishProgress(((int) ( readb * 100 / fileLength)));
} else if (readb == fileLength) {
publishProgress(101);
}
}
ios.close();
fos.close();
} catch (Exception e) {
e.getMessage();
} finally {
Log.d(TAG, "doInBackground: " + (System.currentTimeMillis() - startTime));
}
위의 코드는 복호화 된 파일을 만들 때 사용한 코드입니다. 이제 복호화와 동시에 재생해야합니다. 파일을 만들지는 않습니다.