java实现rstp格式转换使用ffmpeg实现linux命令
第一步安装node.js和ffmpeg
安装可以参考网上的这里不一一介绍了
第二步搭建node.js启动websocket接收服务
部分代码:(要完整代码请关注我并私信给我)
var fs = require('fs');
var http = require('http');
var WebSocket = require('ws');
if (process.argv.length < 3) {
console.log('输入正确参数');
process.exit();
}
var stream_secret = process.argv[2];//密码
var stream_port = process.argv[3] || 8081;//ffpeng推送端口
var websocket_port = process.argv[4] || 8082;//前端websocket端口 ,比如:8082
var record_stream = false;
var totalSize = 0;
第三步java实现(启动并挂起转换rtsp流)
首先我们新建一个java项目,可以是普通的java,我这里新建的是springboot看起来比较高大上。
- 新建springboot项目
next下一步到这里项目新建好了; - 上代码
public class FfmpegTest {
//自带map缓存,防止同一个设备机器多次转换导致视频丢帧
public static Map<String , Integer> map = new HashMap<>();
//线程池,因为开启转换是持续的多线程开启保证主线程不被阻塞
ExecutorService es3 = Executors.newCachedThreadPool();
@RequestMapping(value = "/hello/{code}",method = RequestMethod.GET)
public String test(@PathVariable String code, HttpServletRequest request){
//获取IP地址
String ipAddress = IpUtil.getIpAddr(request);
System.out.println("客户端ip:"+ipAddress);
//转换rtsp流
String ffmpeg = ffmpeg(code);
//获取pid
String pid = getPid(code);
System.out.println(ffmpeg+"进程号是:"+pid);
return ffmpeg+"进程号是:"+pid;
}
@RequestMapping(value = "/kill/{code}",method = RequestMethod.GET)
public String kill(@PathVariable String code){
String pid = getPid(code);
System.out.println(code+"视频设备进程号是:"+pid);
String s = killPid(pid , code);
return code+"视频设备进程号是:"+pid+" "+s;
}
public String ffmpeg(String code) {
String returnstr="";
String s="";
List<String> commend = new ArrayList<String>();
commend.add("ffmpeg");
commend.add("-i");
commend.add(