1.部署rtsp视频流服务器
下载EasyDarwin软件EasyDarwin · GitHub解压后编辑imi文件,然后点击EXE文件启动
2.使用代码生成rtsp视频流,并且推送到服务器中
/**
* @Author bjiang
* @Description //TODO 获取源 视频流
* @Date 10:29 2022/1/28
* @Version 1.0
* @Param [url] 可以为MP4视频路径,也可以为rtsp视频流地址
* @return org.bytedeco.javacv.FFmpegFrameGrabber
*/
public static FFmpegFrameGrabber getRtspByUrl(String url) {
log.info("获取视频流开始");
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(url);
/* grabber.setFormat("rtsp");
String byte2Base64= null;
try {
byte2Base64 = RSAUtil.getMsgByRsa("****");
} catch (Exception e) {
e.printStackTrace();
}
grabber.setOption("rtsp_transport", "tcp");//tcp传输协议
grabber.setOption("appkey", "****");//海康视频 appkey
grabber.setOption("secret", byte2Base64);//海康视频 secret
grabber.setOption("port", "446");//默认443
grabber.setOption("enableHTTPS", "1"); //是否启用HTTPS协议,这里总是填1
grabber.setOption("rtsp_flags", "prefer_tcp");
grabber.setOption("stimeout", "3000000");
try {
grabber.start();
} catch (FFmpegFrameGrabber.Exception e) {
e.printStackTrace();
}*/
return grabber;
}
/**
* @Author bjiang
* @Description //TODO 视频流生成
* @Date 16:00 2022/1/14
* @Version 1.0
* @Param [grabber]
* @return void
*/
public static void createRtsp(FFmpegFrameGrabber grabber) throws Exception {
OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();
log.info("开始写入视频流");
Random random = new Random();
int url=random.nextInt(1000) + 1;
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder("rtsp://192.168.1.228:554/"+url,grabber.getImageWidth(),grabber.getImageHeight(),1);
recorder.start();
recorder.setVideoCodec(grabber.getVideoCodec());
recorder.setFormat("rtsp");//rtmp的格式为flv
recorder.setSampleRate(4410);
recorder.setFrameRate(grabber.getFrameRate());
recorder.setVideoBitrate(grabber.getVideoBitrate());
recorder.setAudioCodec(grabber.getVideoCodec());
Frame frame = null;
for (;(frame = grabber.grabImage()) != null; ) {
recorder.record(frame);
}
grabber.stop();
grabber.release();
recorder.stop();
recorder.release();
}
3.使用PotPlayer打开生成的视频流地址