这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
《JavaCV的摄像头实战之一:基础》一文创建的simple-grab-push工程中已写好父类AbstractCameraApplication,本篇继续使用该工程,创建子类实现那些抽象方法即可
编码前先回顾父类的基础结构,如下图,粗体是父类定义的各个方法,红色块都是需要子类来实现抽象方法,所以接下来,咱们以本地窗口预览为目标实现这三个红色方法即可:
新建文件RecordCameraSaveMp4.java,这是AbstractCameraApplication的子类,其代码很简单,接下来按上图顺序依次说明
定义一个成员变量,用于指定视频文件存放路径,这里文件名用的是当前时间字符串,请您根据自己电脑的情况调整路径:
// 存放视频文件的完整位置,请改为自己电脑的可用目录 private static final String RECORD_FILE_PATH = "E:\\temp\\202111\\28\\camera-" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".mp4";
// 帧录制器 protected FrameRecorder recorder;
@Override protected void initOutput() throws Exception { // 实例化FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(RECORD_FILE_PATH, // 存放文件的位置 getCameraImageWidth(), // 分辨率的宽,与视频源一致 getCameraImageHeight(), // 分辨率的高,与视频源一致 0); // 音频通道,0表示无 // 文件格式 recorder.setFormat("mp4"); // 帧率与抓取器一致 recorder.setFrameRate(getFrameRate()); // 编码格式 recorder.setPixelFormat(AV_PIX_FMT_YUV420P); // 编码器类型 recorder.setVideoCodec(avcodec.AV_CODEC_ID_MPEG4); // 视频质量,0表示无损 recorder.setVideoQuality(0); // 初始化 recorder.start(); }
@Override protected void output(Frame frame) throws Exception { // 存盘 recorder.record(frame); }
@Override protected void releaseOutputResource() throws Exception { recorder.close(); }
public static void main(String[] args) { // 录制30秒视频 new RecordCameraSaveMp4().action(30); }
名称 | 链接 | 备注 |
---|---|---|
项目主页 | https://github.com/zq2599/blog_demos | 该项目在GitHub上的主页 |
git仓库地址(https) | https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https协议 |
git仓库地址(ssh) | git@github.com:zq2599/blog_demos.git | 该项目源码的仓库地址,ssh协议 |
https://github.com/zq2599/blog_demos