最近在andorid端写一个拍视频上传服务器,及播放网络视频的功能。
开始的思路是调用系统的录像功能,返回视频,上传,但是在应用的过程中发现,系统的录像功能在调节视频质量上参数非常尴尬,只有0低画质、1高清两个参数。低画质这个简直低到离谱,什么都看不清,高清这个视频倒是没问题,但是太大了,一个6秒的视频20M。这个上传下载太慢了。关键是他没有其他参数。
后来想到,可以把视频压缩,再上传,
package util;import it.sauronsoftware.jave.AudioAttributes;
import it.sauronsoftware.jave.Encoder;
import it.sauronsoftware.jave.EncodingAttributes;
import it.sauronsoftware.jave.VideoAttributes;import java.io.File;public class VideoUtil {/*** Mp4视频压缩* @param args*/public static void main(String[] args) {//原File source = new File("D:\\工艺卡片目录\\拍照上传图片\\gpid55gxid9t0.mp4");//新File target = new File("D:\\工艺卡片目录\\拍照上传图片\\gpid55gxid9t1.mp4");try {System.out.println("begin");
// AudioAttributes audio = new AudioAttributes();
// audio.setCodec("libmp3lame");
// audio.setBitRate(new Integer(56000));//设置比特率
// audio.setChannels(new Integer(1));//设置音频通道数
// audio.setSamplingRate(new Integer(22050));//设置采样率VideoAttributes video = new VideoAttributes();video.setCodec("mpeg4");video.setBitRate(new Integer(800000));//设置比特率,越高文件越大video.setFrameRate(new Integer(15));//设置帧率,越大越流畅EncodingAttributes attr = new EncodingAttributes();attr.setFormat("mp4");//设置格式
// attr.setAudioAttributes(audio);attr.setAudioAttributes(null);attr.setVideoAttributes(video);Encoder encoder = new Encoder();encoder.encode(source, target, attr);System.out.println("end");} catch (Exception e) {e.printStackTrace();}}}
本地测试,成功,用到了这个包, jave-1.0.2.jar-Java文档类资源-CSDN下载,
但是到android的时候有遇到问题了,
encoder.encode(source, target, attr);
这一行报错,查了一下,说是android10以后,这个就不行了,不能执行二进制。。。。。反正就是不好使了。
最后一招就是自定义录像机,这回可以设置文件的大小了,就是麻烦,没有用系统自带的方便。