У меня есть URL, содержащий зашифрованный видеофайл, зашифрованный с помощью AES / CTR / NoPadding. Я использую ExtractorMediaSource вместе с CustomMediaSource DefaultHTTPMediaSource Единственное изменение, которое я сделал, это открытый метод внутри этого:
IvParameterSpec ivParameterSpec = new IvParameterSpec(ivBytes);
SecretKeySpec sks = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, sks, ivParameterSpec);
InputStream inputStream = connection.getInputStream();
this.inputStream = new StreamingCipherInputStream(inputStream, cipher);
Вот класс StreamingCipherInputStream:
class StreamingCipherInputStream extends CipherInputStream {
private int mBytesAvailable;
private InputStream mInputStream;
public StreamingCipherInputStream(InputStream is, Cipher c) {
super(is, c);
mInputStream = is;
try {
mBytesAvailable = is.available();
} catch (IOException e) {
}
}
@Override
public int available() throws IOException {
return mInputStream.available();
}
}
Все остальное осталось так же, как DefaultHTTPDataSource. Но при воспроизведении этого видео с использованием этого источника данных выдается эта ошибка:
[OMX.hisi.video.decoder.hevc] setPortMode при сбое вывода в DynamicANWBuffer с ошибкой -2147483648 java .lang.IllegalStateException: Старший бит не ноль: -2067207107
Видео имеет формат mp4 и 20 МБ, видео было прочитано около 1 МБ и затем была выдана вышеуказанная ошибка.