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的开 ...
最新文章
- python代码执行过程记录_详解python程序中记录日志的方法
- 网络营销专员浅析在网络营销推广中有不少渠道可适当“利用”一下
- 分组合计且排序和显示名称
- jquery remove()不兼容问题解决方案
- 代码中的时间格式问题究竟该如何处理?
- linux命令grep和find怎么用,Linux下find和grep常用命令及区别介绍
- eclipse lombok插件安装_Eclipse安装virgo插件
- Q91:真实地模拟透明材质(Realistic Transparency)(2)——Triangle Meshes
- 了解华为HCIP认证
- 会声会影滤镜特效教程之气泡滤镜
- Java - Object wait() 方法之虚假唤醒spurious wakeup
- 网络棋牌游戏创造快乐心情
- html视频自动播放播放器,支持弹字幕HTML5视频播放器DPlayer
- 初中升高中计算机考试题,初中信息技术中学考试excel操作题.doc
- 有免费而且好用的视频会议吗
- html绘制水管,CAD平面水管如何画?
- 轻量化SISR实验结果汇总
- 【ASP.Net】上传图片+水印
- 解决每次运行终端,自动激活conda环境问题
- STC15单片机驱动WS2812
热门文章
- Android音乐播放器的获取数据的三种途径
- 2017 Multi-University Training Contest - Team 6:1003hdu6098、Inversion
- python字体类型arial_Arial Narrow字体是Arial的()
- Java控制台各种打印三角形
- C语言输入输出字符串(一般方式,数组,指针)
- 斜挎包长度到哪里合适_女士斜挎包怎么背好看 女斜挎包3个搭配技巧
- photon server服务器搭建
- 第二章 TCP/IP 基础知识
- maven依赖optional可选依赖
- Win10内存使用率高解决方案