android exo解码问题,android – 使用ExoPlayer再现加密视频
我在
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.length;
} else {
bytesRemaining = clearInputStream.available();
if (bytesRemaining == 0) {
bytesRemaining = C.LENGTH_UNBOUNDED;
}
}
} catch (EOFException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
opened = true;
if (listener != null) {
listener.onTransferStart();
}
return bytesRemaining;
}
这是read()方法:
@Override
public int read(byte[] buffer, int offset, int readLength) throws FileDataSourceException {
if (bytesRemaining == 0) {
return -1;
} else {
int bytesRead = 0;
int bytesToRead = bytesRemaining == C.LENGTH_UNBOUNDED ? readLength
: (int) Math.min(bytesRemaining, readLength);
try {
bytesRead = clearInputStream.read(buffer, offset, bytesToRead);
} catch (IOException e) {
e.printStackTrace();
}
if (bytesRead > 0) {
if (bytesRemaining != C.LENGTH_UNBOUNDED) {
bytesRemaining -= bytesRead;
}
if (listener != null) {
listener.onBytesTransferred(bytesRead);
}
}
return bytesRead;
}
}
如果不是编码文件,我传递一个清除文件,只是删除CipherInputStream部分,那么它工作正常,而是加密文件我得到这个错误:
Unexpected exception loading stream
java.lang.IllegalStateException: Top bit not zero: -1195853062
at com.google.android.exoplayer.util.ParsableByteArray.readUnsignedIntToInt(ParsableByteArray.java:240)
at com.google.android.exoplayer.extractor.mp4.Mp4Extractor.readSample(Mp4Extractor.java:331)
at com.google.android.exoplayer.extractor.mp4.Mp4Extractor.read(Mp4Extractor.java:122)
at com.google.android.exoplayer.extractor.ExtractorSampleSource$ExtractingLoadable.load(ExtractorSampleSource.java:745)
at com.google.android.exoplayer.upstream.Loader$LoadTask.run(Loader.java:209)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
编辑:
以这种方式生成加密视频:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec("0123456789012345".getBytes(), "AES");
IvParameterSpec ivSpec = new IvParameterSpec("0123459876543210".getBytes());
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
outputStream = new CipherOutputStream(output_stream, cipher);
然后将outputStream保存到文件中.
android exo解码问题,android – 使用ExoPlayer再现加密视频相关推荐
- android exo解码问题,Android Exoplayer音频播放异常
我使用ExoPlayer播放声音时遇到问题.即快速切换"停止 - 启动"异常发生Android Exoplayer音频播放异常 java.lang.NullPointerExcep ...
- android exo解码问题,android – exoplayer-自动更改质量不起作用(hls)
我对exoplayer没什么问题.当我尝试从hls流播放视频时几乎一切正常. hls流包含3组不同的组块列表,每组用于不同的带宽. 但是自适应流媒体不起作用,播放器只能使用一个块表,并且网络连接速度慢 ...
- android图片解码显示,android 图片解码显示流程
问题来源 android 可以在 gallery 里面显示内部存储的图片,支持 jpeg,png,gif,bmp 等,甚至文件类型和图片后缀名不一致,只要是图片文件就能显示,然后 git 只会显示第一 ...
- android+rtp解码,在Android上解码RTP流(MPEG4)
问题: 我有一个RTP流,我在我的专用网络(WiFi)上进行组播.我想使用一些Android平板电脑来显示流.平板电脑的数量不能受到限制,质量不应随着客户数量的增加而降低.这解释了为什么我需要多播而不 ...
- android硬解码x265,Android 设置硬解码 h265 失败
在demo中开启硬件解码,同时设置h265开关 ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacode ...
- android m4a播放器,如何在android上解码m4a音频
我试图在android上解码音频并获取原始数据以应用过滤器. 所以我首先用 extractor.getTrackFormat(0); MediaExtractor extractor = new Me ...
- android vr播放器 开发,Android应用开发之Android VR Player(全景视频播放器)- ExoPlayer播放器MPEG-DASH视频播放...
本文将带你了解Android应用开发之Android VR Player(全景视频播放器)- ExoPlayer播放器MPEG-DASH视频播放,希望本文对大家学Android有所帮助. Androi ...
- 身份证阅读器Android相片解码库报错libwlt2bmp.so:has text relocations解决方案
身份证阅读器Android相片解码库报错libwlt2bmp.so:has text relocations,如下图的几种情况. libwlt2bmp.so是部里的相片解码库,身份证芯片里面存储的相片 ...
- Android Mediacodec解码视频(通过Surface播放、得到Image数据)
MediaCodec解码得到Image 对于仅仅需要将视频切分为一帧一帧并保存为图片的用户来说,使用这种方法比bigflake的方法会快10倍左右,因为没有OpenGL渲染,以及转换为Bitmap的开 ...
最新文章
- linux ptrace反调试之抢占ptrace
- C#Windows 服务制作安装删除. 用户注销后,程序继续运行 (转载)
- [网络安全自学篇] 二十六.Shodan搜索引擎详解及Python命令行调用
- 使用verilog实现基于FPGA的TDC设计
- java随机产生十个坐标_java中随机坐标
- 论文浅尝 - CVPR2020 | 基于网格特征的可视问答系统
- 2017.9.17 选数 失败总结
- jQuery Validate focusCleanup: true
- 用c语言编写成绩单由高到低,C语言程序设计实验.doc
- keepalive高可用
- SDL2 + OPENGL GLSL 实践
- epsonl360打印机连接电脑_爱普生l360驱动下载
- Java求100000以内素数_100000以内的质数表
- 如何搭建一个公司网站?
- 数学原理-高等数学复习笔记 ——1.2 泰勒公式 罗尔中值定理与拉格朗日中值定理(附加多个实战题目)
- mysql中的广播是什么意思_Android中的广播、服务、数据库、通知、包等术语的原理和介绍(图解)...
- 获取新浪开放平台的Access token
- _ETHREAD断链 —— 实现线程隐藏
- 写给我的如风老男人(终结版)
- SDNU 1309.啤酒和饮料
热门文章
- 吃鸡出现错误服务器维护中,吃鸡今天维护到什么时候?吃鸡更新运行错误怎么办?...
- 转……不相爱的爱,是一片废墟???
- 5 月 28 日 - 29 日阿里云峰会视频云专场直播预告
- 三星pad系统android4.0,堪称安卓系统最强悍平板的三星Galaxy Tab S4正式发布,售价有点...
- 【个人项目】电商价格监控——项目介绍和架构演变
- Android加固后版本更新解析包时出现问题
- MyBatis中模糊查询LIKE的三种方式
- QT读取文件路径用C语言File打开
- day04-tomcat-20210925
- 北京第一年-OpenGL-3第一个任务-animation动画