我的应用程序在使用libmedia播放20分钟加密视频时出现问题。一开始一切都很好:图书馆工作并播放加密视频...但是在6分钟后再现暂停20秒,之后视频继续播放4分钟并再次暂停,重新启动20秒后再次暂停......等等上。
视频正在Android 4.1上运行,大小为80MB,并使用AES加密。这是我们在“onCreate”方法结束时使用的代码:
private void startVideo() {
mVideoView.requestFocus();
mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
finish();
}
});
try{
SecretKeySpec skey = new SecretKeySpec("XXXXXxxxxxXXXXXX".getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skey,new IvParameterSpec(new byte[16]));
Licensing.allow(this);
mServer = new LocalSingleHttpServer();
mServer.setCipher(cipher);
mServer.start();
String serverPath = mServer.getURL("myvideopath");
mVideoView.setVideoPath(serverPath);
mVideoView.setMediaController(mMediaController);
mVideoView.start();
}catch(Exception e){
e.printStackTrace();
}
mVideoView.setMediaController(null);
}
似乎视频在此暂停时再次被解密...但我不知道为什么。
答案 0 :(得分:2)
问题是Cipher.getInstance("AES/CBC/PKCS5Padding")
它不是流密码,是块密码。
使用Cipher.getInstance("AES/CFB/NoPadding")
解决问题。