# RTSPtoHTTP-FLV **Repository Path**: houzhanwu/RTSPtoHTTP-FLV ## Basic Information - **Project Name**: RTSPtoHTTP-FLV - **Description**: 使用JavaCV开发的rtsp流转http-flv(rtmp也支持但不建议)流并进行推流的流媒体服务 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 223 - **Created**: 2023-10-24 - **Last Updated**: 2023-10-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RTSPtoRTMP # 使用JavaCV开发的rtsp流转rtmp流并进行推流的流媒体服务 ## 觉得不错就点个**star**吧!!! >**个人博客:[banmajio's blog](https://www.banmajio.com/)** >**csdn博客:[banmajio's csdn](https://blog.csdn.net/weixin_40777510)** > 参考:[javaCV开发详解之8:转封装在rtsp转rtmp流中的应用(无须转码,更低的资源消耗)](https://blog.csdn.net/eguid_1/article/details/83025621) ## 用到的技术:FFmpeg、JavaCV、ngingx ## 项目背景:将海康摄像头的rtsp流转为rtmp流,配合video.js实现web端播放。 ## [注]: 该项目中的一些处理是为了满足公司项目需求添加完善的,如果需要改造扩展只需要在原来的基础上进行扩充或者剥离即可。最基本的核心操作在CameraPush.java这个类中,或者参考上述链接原作者的代码。 ## 该项目需要搭配使用的nginx服务器下载地址: [http://cdn.banmajio.com/nginx.rar](http://cdn.banmajio.com/nginx.rar) 下载后解压该文件,点击nginx.exe(闪退是正常的,可以通过任务管理器查看是否存在nginx进程,存在则说明启动成功了)启动nginx服务。nginx的配置文件存放在conf目录下的nginx.conf,根据需要修改。项目中的rtmp地址就是根据这个配置文件来的。 ## 待优化之处: 1.如果服务部署在Docker环境下,本机ip是动态的,并非固定为127.0.0.1,所以需要动态获取nginx域名解析为ip,rtmp推送地址才能生效,可以使用InetAddress.getByName(www.baidu.com).getHostAddress();这样的方式获取解析到的ip地址。 2.目前出现的一个bug尚未解决,如果传入的设备ip填写错误,在JavaCV的FFmpegFrameGrabber构造器在调用start()方法是会出现阻塞现象,导致构造器无法释放,后续推流工作无法继续。【已优化:[JavaCV中FFmpegFrameGrabber调用start()方法时出现阻塞的解决办法](https://www.banmajio.com/post/9bf41e2c.html#more)】 3.目前项目进行历史回放的思路是直接通过rtsp命令添加starttime 和 endtime参数 拉取海康摄像头的rtsp流完成的,存在的问题就是会出现拉到的流解析出来的内容都是空的,而同样的指令在cmd下面确没有问题。该问题目前尚未解决,如果有好的思路可以联系我。 >**项目搭建过程请参考本人博文:[FFmpeg转封装rtsp到rtmp(无需转码,低资源消耗)](https://www.banmajio.com/post/638986b0.html#more)** >如果有不错的建议或者反馈可以通过QQ:1402325991 邮箱:banmajio@163.com **主分支只作为一个简单的模板供大家使用,所以一些新加的功能就不合并到主分支了,如果有pr,请提交到pr分支内。** **感谢[nn200433](https://github.com/nn200433)小伙伴对本项目的支持,详细改动请参考rp分支内的提交内容** # 主体思路: ## 1、每分钟录屏生成一个文件,上传到华为云obs存储桶,便于后期溯源,存在文件降本地删除,本地只保留最近60天 // TODO 启动线程上报到 华为云obs ## 2、记录键盘的输入存储到日志文件,日志存储 60天 自动删除超过60天的 ## 3、打包window服务,策略中每天重启服务 下个版本:识别键盘、鼠标、usb设备 有变化自动录屏,超过10分钟输入设备无操作自动关闭录屏 ## 写一个 windows bat 设置a.exe开机自启动,每天定时重启a.exe一次 # 要实现这个任务,你可以使用Windows的计划任务功能来设置定时重启a.exe,并使用批处理文件(.bat)来设置a.exe开机自启动。 # # 首先,创建一个新的文本文件,将其命名为a.bat,并确保它位于你的计算机的启动文件夹中。在a.bat文件中,添加以下内容: # # bash # @echo off # start /wait "" "C:\path\to\a.exe" # exit # 请确保将C:\path\to\a.exe替换为实际a.exe文件的路径。 # # 接下来,按Win + R键打开“运行”对话框,输入shell:startup,然后按回车键。这将打开启动文件夹。 # # 将a.bat文件复制到该文件夹中。 # # 现在,你需要创建一个计划任务来每天定时重启a.exe。按Win + R键打开“运行”对话框,输入taskschd.msc,然后按回车键。 # # 在“任务计划程序”窗口中,点击“创建基本任务...”。 # # 在“创建基本任务向导”窗口中,输入任务名称和描述(例如,“每日重启a.exe”),然后单击“下一步”。 # # 在“触发器”选项中,选择“每天”,然后设置你想要的启动时间。单击“下一步”。 # # 在“操作”选项中,选择“启动程序”,然后单击“下一步”。 # # 在“程序/脚本”选项中,输入C:\path\to\a.exe。这是你要重启的a.exe文件的路径。单击“下一步”。 # # 最后,单击“完成”以创建任务。 # # 现在,每天到你设定的时间时,a.exe将自动重启,并且a.exe将自动启动。