代码拉取完成,页面将自动刷新
easystream是一个对海康大华rtsp二次封装转换为web直播流的框架。
利用nginx实现rtmp、hlv、hls格式播放视频。windows下编译过的nginx请项目中下载,Linux下需动态编译需要欢迎索取。
easystream:
#对应推送的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依赖即可
<dependency>
<groupId>com.github.xianyujava</groupId>
<artifactId>easystream-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
在Spring Boot的配置类或者启动类上加上@EasystreamScan
注解
@SpringBootApplication
@Configuration
@EasystreamScan
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
OK,我们可以愉快地调用接口了
// 注入接口实例
@Autowired
private 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);
<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
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。