最近公司项目中需要上传视频,由于之前没有涉及过,初步可以上传了,但由于一般手机本地视频文件都很大,所以得在上传之前进行压缩处理,在百度,github上各种找。在此做个记录也希望能帮到一些需要的人,少走一些弯路。
关于视频压缩有以下几种方式可选:
第一种:使用FFmpeg
缺点:
1.压缩效率低,时间长,使用繁琐,增大apk体积
2.如果只是对视频进行压缩,不建议使用FFmpeg
第二种:使用七牛SDK
七牛短视频SDK链接: https://developer.qiniu.com/sdk#official-sdk
缺点:收费,只能试用,测试的结果:隔天就会提示未经授权
PLDroidShortVideo: Pili-System:unauthorized !
compressVideoResouce: transcode failed: 8
第三种:使用开源库SiliCompressor,一个强大的,灵活的,易于使用的视频和图像压缩库。也是我项目中所使用到的
开源库地址 https://github.com/Tourenathan-G5organisation/SiliCompressor
1.Gradle
implementation'com.iceteck.silicompressorr:silicompressor:2.2.1'
2.添加相关权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3.使用
使用很简单,直接调用相关方法传入文件路径就能获得压缩之后新文件的路径
<1> 视频压缩
压缩视频文件并返回新视频的文件路径
StringfilePath=SiliCompressor.with(Context).compressVideo(videoPath, destinationDirectory);
<2> 图片压缩
压缩图像并返回新图像的文件路径
StringfilePath=SiliCompressor.with(Context).compress(imagePath, destinationDirectory);
压缩图像并在删除源图像时返回新图像的文件路径
StringfilePath=SiliCompressor.with(Context).compress(imagePath, destinationDirectory,true);
压缩图像可绘制并返回新图像的文件路径
StringfilePath=SiliCompressor.with(Context).compress(R.drawable.icon);
压缩图像并返回新图像的位图数据
BitmapimageBitmap=SiliCompressor.with(Context).getCompressBitmap(imagePath);
压缩图像并在删除源图像的同时返回新图像的位图数据
BitmapimageBitmap=SiliCompressor.with(Context).getCompressBitmap(imagePath,true);
具体需要哪种压缩方式,根据具体需求调用相对应的方法就可以了