javaCV系列文章:java
javacv开发详解之1:调用本机摄像头视频windows
javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG、javaCV-openCV)服务器
javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件(基于javaCV-FFMPEG)网络
javaCV开发详解之4:转流器实现(也可做为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)测试
ui
javaCV开发详解之6:本地音频(话筒设备)和视频(摄像头)抓取、混合并推送(录制)到服务器(本地)编码
javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)spa
补充篇:
.net
音视频编解码问题:javaCV如何快速进行音频预处理和解复用编解码(基于javaCV-FFMPEG)线程
音视频编解码问题:16/24/32位位音频byte[]转换为小端序short[],int[],以byte[]转short[]为例
本章使用windows环境开发,基于javaCV的基础支撑包以及ffmpeg-3.1.2-1.2.jar、ffmpeg-3.1.2-1.2-windows-x86.jar、ffmpeg-3.1.2-1.2-windows-x86_64.jar;
本功能采用按帧实现收流器录制功能
/** * 按帧录制视频 * * @param inputFile-该地址能够是网络直播/录播地址,也能够是远程/本地文件路径 * @param outputFile * -该地址只能是文件地址,若是使用该方法推送流媒体服务器会报错,缘由是没有设置编码格式 * @throws FrameGrabber.Exception * @throws FrameRecorder.Exception * @throws org.bytedeco.javacv.FrameRecorder.Exception */ public static void frameRecord(String inputFile, String outputFile, int audioChannel) throws Exception, org.bytedeco.javacv.FrameRecorder.Exception { boolean start=true;//该变量建议设置为全局控制变量,用于控制录制结束 // 获取视频源 FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputFile); // 流媒体输出地址,分辨率(长,高),是否录制音频(0:不录制/1:录制) FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputFile, 1280, 720, audioChannel); // 开始取视频源 recordByFrame(grabber, recorder, isStart); }
private static void recordByFrame(FFmpegFrameGrabber grabber, FFmpegFrameRecorder recorder, Boolean status) throws Exception, org.bytedeco.javacv.FrameRecorder.Exception { try {//建议在线程中使用该方法 grabber.start(); recorder.start(); Frame frame = null; while (status&& (frame = grabber.grabFrame()) != null) { recorder.record(frame); } recorder.stop(); grabber.stop(); } finally { if (grabber != null) { grabber.stop(); } } }
public static void main(String[] args) throws FrameRecorder.Exception, FrameGrabber.Exception, InterruptedException { String inputFile = "rtsp://admin:admin@192.168.2.236:37779/cam/realmonitor?channel=1&subtype=0"; // Decodes-encodes String outputFile = "recorde.mp4"; frameRecord(inputFile, outputFile,1); }到这里咱们已经实现了直播功能的所有基本操做:推流,录制,简单的直播系统和多人视频等已经能够实现了;