开源软件名称:easystream
开源软件地址:https://gitee.com/null_166_0518/easystream
开源软件介绍:
EASYSTREAM FOR SPRINGBOOT easystream - 简单的rtsp转rtmp,hlv,hls播放流框架项目介绍:easystream是一个对海康大华rtsp二次封装转换为web直播流的框架。 利用nginx实现rtmp、hlv、hls格式播放视频。windows下编译过的nginx请项目中下载,Linux下需动态编译需要欢迎索取。 easystream配置加到application.ymleasystream: #对应推送的nginx服务地址 push_host: 192.168.200.2 #直播流保活时间(分钟) keepalive: 1 #额外推送地址 host_extra: 127.0.0.1 #nginx推送端口 push_port: 1935 #主码流最大码率 main_code: 5120 #子码流最大码率 sub_code: 1024 #1nvr,2,合成服务 rtsptype: 1 #nginx视频流访问端口 access_port: 8085 极速开始以下例子基于Spring Boot 第一步:添加Maven依赖直接添加以下maven依赖即可 <dependency> <groupId>com.github.xianyujava</groupId> <artifactId>easystream-spring-boot-starter</artifactId> <version>1.1.1</version></dependency> 第二步:扫描接口在Spring Boot的配置类或者启动类上加上@EasystreamScan 注解 @SpringBootApplication@Configuration@EasystreamScanpublic class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); }} 第三步:调用接口OK,我们可以愉快地调用接口了 // 注入接口实例@Autowiredprivate EasysteamService easysteamService;... 开启视频流/** * CameraPojo 实体属性 * private String username = "";// 摄像头账号 private String password = "";// 摄像头密码 private String ip = "";// 摄像头ip private String port = "8000"; private String channel = "";// 摄像头通道 private String stream = "1";// 摄像头码流 1主码流,2子码流 private String rtsp = "";// 返回的rtsp地址 private String rtmp = "";// 返回的rtmp地址 private String url = "";// 返回的hlv播放地址 private String startTime = "";// 回放开始时间,回放时候才要赋值 private String endTime = "";// 回放结束时间,回放时候才要赋值 private String openTime = "";// 打开时间 private int count = 0;// 默认使用人数 private String token = "";//直播和回放必须指定一个唯一标志 private String hls = "";//返回hls播放 private String type="";//默认空为合成视频,0:nvr,1:ipc******************************************** 方法传入参数pojo实体必须赋值如下参数 username = "";// 摄像头账号 password = "";// 摄像头密码 ip = "";// 摄像头ip port = "8000"; channel = "";// 摄像头通道 token = "";//直播和回放必须指定一个唯一标志 type="";//默认空为合成视频,0:nvr,1:ipc******************************************** 当打开回放流必须传入 startTime = "";// 回放开始时间,回放时候才要赋值 endTime = "";// 回放结束时间,回放时候才要赋值******************************************** 方法返回result 为CameraPojo的json字符串,其中播放地址回返回在其中 rtsp = "";// 返回的rtsp地址 rtmp = "";// 返回的rtmp地址 url = "";// 返回的hlv播放地址 hls = "";//返回hls播放 */String result = easysteamService.openCamera(CameraPojo pojo); 关闭直播视频流/** * tokens为打开视频流的时的token,多个用逗号分隔;例如1,3 */String result = easysteamService.closeCamera(String tokens); 关闭回放视频流/** * tokens为打开视频流的时的token,多个用逗号分隔;例如1,3 */String result = easysteamService.closeHistoryCamera(String tokens); 视频流保活,定时调用此方法否则超时会停止转码流/** * tokens为打开视频流的时的token,多个用逗号分隔;例如1,3 */String result = easysteamService.keepAlive(String tokens); 视频回放流保活,定时调用此方法否则超时会停止转码流/** * tokens为打开视频流的时的token,多个用逗号分隔;例如1,3 */String result = easysteamService.keepPlayBackAlive(String tokens); 前端页面播样例:这里用了flv.js库<script src="../../lib/media/flv1.5.js"></script><video id="video_3" autoplay="autoplay" height="100%" width="100%"></video> function playvidoe(param, timer,id) { $.ajax({ type: 'POST', url: '/nslcloud/rtmp/cameras', dataType: 'json', data: { 'ip': param.videoip, 'port': param.videoport, 'username': param.username, 'password': param.password, 'channel': param.monitortdh, 'type': param.type, 'token': param.videoid, 'kcdm' : param.kcdm }, success: function (json) { //json=JSON.parse(json) //alert(json.url); var ieversion = IEVersion(); if (json.url != '') { //if (flvjs.isSupported()) { if (ieversion == 99) { var videoElement = document.getElementById('video_' + id); var flvPlayer = flvjs.createPlayer({ type: 'flv', //height:'1040px', url: json.url }); flvPlayer.attachMediaElement(videoElement); flvPlayer.load(); flvPlayer.play(); //flvid[id] = flvPlayer; flvid.put(id, flvPlayer); kcdms.put(id,param); } else { videojs('video_' + id).ready( function () { //alert("1111"); var myPlayer5 = this; myPlayer5.src({type: "rtmp/flv", src: json.rtmp}); myPlayer5.load(json.rtmp); //myPlayer5.src({type: "rtmp/flv", src: json.hls}); //myPlayer5.load(json.hls); myPlayer5.play(); this.on('play', function () {//开始播放 //flvid[id] = myPlayer5; flvid.put(id, myPlayer5); kcdms.put(id,param); }); } ); } var interval = setInterval(function () { $.ajax({ type: 'POST', url: '/nslcloud/rtmp/keepAlive', dataType: 'json', traditional: true,//这里设置为true headers: { 'Authorization': sessionStorage.getItem('Authorization') }, data: { 'tokens': param.videoid, 'kcdm' : param.kcdm }, success: function (json) { } }); }, 10000, 3000); if (timer.containsKey(id)) { clearInterval(timer.get(id)); timer.remove(id); } //timer[id] = interval; timer.put(id, interval); // } } else { alert("无视频源!"); } }, error: function (data) { alert("请求错误!"); } });} 联系作者:
亲,进群前记得先star一下哦~ 项目协议The MIT License (MIT) Copyright (c) 2020 jian yu |
请发表评论