| src/main/java/com/hbbh/adapter/controller/MonibucaController.java | ●●●●● patch | view | raw | blame | history | |
| src/main/resources/public/js/history/historypler.js | ●●●●● patch | view | raw | blame | history | |
| src/main/resources/public/js/live/livepler.js | ●●●●● patch | view | raw | blame | history | |
| src/main/resources/public/monitor/history.html | ●●●●● patch | view | raw | blame | history | |
| src/main/resources/public/monitor/live.html | ●●●●● patch | view | raw | blame | history | |
| src/main/resources/public/monitor/test.html | ●●●●● patch | view | raw | blame | history |
src/main/java/com/hbbh/adapter/controller/MonibucaController.java
@@ -71,6 +71,26 @@ return monicaResult; } @RequestMapping(value = "/history", method = RequestMethod.GET) @ApiOperation("history") public MonicaResult History(@RequestParam("param")String param,@RequestParam("startTime")String startTime) { MonicaResult monicaResult = new MonicaResult(); try { monicaResult.setSourceURL("rtsp:////"); monicaResult.setHlsURL(""); monicaResult.setFlvURL(""); monicaResult.setJessicaURL("ws://172.16.30.113:8082/live/ff80808178af424e0178af44e677000343616d657261.flv"); monicaResult.setWebrtcURL(""); monicaResult.setStreamPath("live/ff80808178af424e0178af44e677000343616d657261"); return monicaResult; } catch (Exception e) { log.error("接口:com.hbbh.adapter.controller.api.MonibucaAPIController.parseVideoRTSP 调用失败"); e.printStackTrace(); } return monicaResult; } @RequestMapping(value = "/stop", method = RequestMethod.GET) @ApiOperation("stop") public String stop(@RequestParam("param")String param) { src/main/resources/public/js/history/historypler.js
@@ -1,122 +1,108 @@ ;!(function () { let _content = $("" + "<div class=\"player-wrapper\" id=\"container\"></div>\n" + "<div id=\"progressTime\"></div>"); $("#jessibucaContainerHistory").append(_content); var stream_path; var hourTimestamp = 3600 * 1000; var dayTimestamp = hourTimestamp * 24; var currentTimer; let decoder = queryParam('decoder') || 'ff'; var container = document.getElementById("container"); var h5lc; var ffurl; var elem; function Historypler(opt) { if (typeof option.elem === 'string') { if (typeof opt.elem === 'string') { opt.elem = document.getElementById(opt.elem); } if (!option.elem) { if (!opt.elem) { throw new Error('需要容器'); return; } elem = opt.elem; ffurl = opt.ffurl; } this.elem = opt.elem; appendContent(this.elem); $("#progressTime").ProgressTime({ container: "progressTime", startTime: new Date(formatDate(new Date(new Date().getTime() - dayTimestamp * 3), "YYYY/MM/DD 00:00:00")), endTime: new Date(formatDate(new Date(), "YYYY/MM/DD 00:00:00")), currentTime: new Date(formatDate(new Date(new Date().getTime() - dayTimestamp * 2), "YYYY/MM/DD 12:00:00")), interval: 300, delay: 2000, isNow: false, // 是否显示右侧回到当前时间 toPlay: false, // 渲染是否完成 animateFinish: false, // 动画是否完成 callback: function (config) { console.log(config); currentTimer = config.time; }, animateCallback: function (config) { let stream_path; let ffurl = opt.ffurl; let code = opt.code; let container = document.getElementById("container"); // 假如动画完成之后请求数据需要两秒 var timer = setTimeout(function () { progressTime.options.toPlay = false; // 两秒之后再继续走播放条 clearTimeout(timer); }, 0); } }); let h5lc = new Jessibuca({container, decoder: ffurl, videoBuffer: 0}); let hourTimestamp = 3600 * 1000; let dayTimestamp = hourTimestamp * 24; let currentTimer; Historypler.prototype.playVideo = function (video_id, starttime) { $.ajax({ type: "get", url: "../../webapi/media/live?param=" + video_id + "&startTime=" + starttime, timeout: 5000, async: false, success: function (result) { stream_path = result.streamPath; $play.style.display = 'none'; $stop.style.display = 'inline'; //时间轴 $("#progressTime").ProgressTime({ container: "progressTime", startTime: new Date(formatDate(new Date(new Date().getTime() - dayTimestamp * 3), "YYYY/MM/DD 00:00:00")), endTime: new Date(formatDate(new Date(), "YYYY/MM/DD 00:00:00")), currentTime: new Date(formatDate(new Date(new Date().getTime() - dayTimestamp * 2), "YYYY/MM/DD 12:00:00")), interval: 300, delay: 2000, isNow: false, // 是否显示右侧回到当前时间 toPlay: false, // 渲染是否完成 animateFinish: false, // 动画是否完成 callback: function (config) { console.log(config); currentTimer = config.time; }, animateCallback: function (config) { // 假如动画完成之后请求数据需要两秒 var timer = setTimeout(function () { progressTime.options.toPlay = false; // 两秒之后再继续走播放条 clearTimeout(timer); }, 0); } }); //播放 $(".progressTime-left-b-start").on("click", function () { historypler.playVideo(code,currentTimer,function (result) { h5lc.onLoad = function () { h5lc = new Jessibuca({container, decoder: ffurl, videoBuffer: 1000}); this.play() this.play(result.jessicaURL); } } }); }); let than = this; //暂停(关闭流) $(".progressTime-left-b-start stop").on("click", function () { $(this).removeClass("stop"); h5lc.destroy(); than.closeVideo(stream_path) than.elem.style.display = 'none'; }); } //文本添加 function appendContent(element) { let _content = "<div class=\"player-wrapper\" id=\"container\"></div>\n" + "<div id=\"progressTime\"></div>"; element.innerHTML = _content; } //播放 Historypler.prototype.playVideo = function (video_id,starttime, callback) { $.ajax({ type: "get", //url: "../../webapi/media/live?param=" + video_id, url: "../../monica/history?param=" + video_id+ "&startTime=" + starttime, timeout: 5000, async: false, success: function (result) { callback(result); } }); }; Historypler.prototype.closeVideo = function (streamPath) { this.h5lc.destroy(); if (streamPath && typeof streamPath === "String") { if (streamPath && typeof streamPath === "string") { $.ajax({ type: "get", url: "../../webapi/media/stop?param=" + streamPath, //url: "../../webapi/media/stop?param=" + streamPath, url: "../../monica/stop?param=" + streamPath, async: false, success: function (result) { this.elem.style.display = 'none'; } }); } } }; function queryParam(name, url) { var search = window.location.search; var qArr = ''; var key = {}; if (url) { qArr = url.split("?")[1].split("&") } else { if (!window.location.search) { return } qArr = search.substr(1).split("&") } for (var i = 0; i < qArr.length; i++) { var firstPos = qArr[i].indexOf('='); key[qArr[i].slice(0, firstPos)] = qArr[i].slice(firstPos + 1) } if (name) { return key[name] } else { if (url) { return key[name] } else { return key } } } window.Historypler = Historypler; src/main/resources/public/js/live/livepler.js
@@ -1,28 +1,5 @@ ;!(function () { let _content = $("<div class=\"content\">\n" + " <div class=\"player\" onmouseover=\"$('.player .control').css('display', 'block')\" onmouseout=\"$('.player .control').css('display', 'none')\">\n" + " <div class=\"player-wrapper\" id=\"container\" style=\"background-color: #0D0E1B;\">\n" + " </div>\n" + " <div class=\"control\">\n" + " <div class=\"fa fa-play\" id=\"play\"></div>\n" + " <div class=\"fa fa-stop\" id=\"stop\" style=\"display: none\"></div>\n" + " <div class=\"timer\">\n" + " <span class=\"progress_timer\">00:00:00</span>\n" + " <span class=\"duration_timer\">00:00:00</span>\n" + " </div>\n" + " <div class=\"fa fa-expand expand\" onclick=\"h5lc.fullscreen=true\"></div>\n" + " <div class=\"fa fa-close\" id=\"close\"></div>\n" + " </div>\n" + " </div>\n" + " </div>"); $("#jessibucaContainer").append(_content); var $play = document.getElementById('play'); var $stop = document.getElementById('stop'); var $jessibucaContainer = document.getElementById('jessibucaContainer'); function Livepler(opt) { if (typeof opt.elem === 'string') { @@ -32,22 +9,27 @@ throw new Error('需要容器'); return; } let stream_path; this.elem = opt.elem; appendContent(this.elem); let stream_path; let ffurl = opt.ffurl; let code = opt.code; this.container = document.getElementById("container"); let $play = document.getElementById('play'); let $stop = document.getElementById('stop'); let h5lc = new Jessibuca({container, decoder: ffurl, videoBuffer: 0}); this.playVideo(code,function (result) { h5lc.onLoad=function () { this.playVideo(code, function (result) { h5lc.onLoad = function () { this.play(result.jessicaURL); } stream_path=result.streamPath; stream_path = result.streamPath; $play.style.display = 'none'; $stop.style.display = 'inline'; }) }); this.stream_path = stream_path; let $close = document.getElementById('close'); let than = this; @@ -57,6 +39,35 @@ than.closeVideo(stream_path) than.elem.style.display = 'none'; }, false); //全屏 let $expand = document.getElementById('expand'); $expand.addEventListener('click', function () { h5lc.fullscreen=true }, false); } function appendContent(element) { let _content = "<div class=\"content\">\n" + " <div class=\"player\" onmouseover=\"$('.player .control').css('display', 'block')\" onmouseout=\"$('.player .control').css('display', 'none')\">\n" + " <div class=\"player-wrapper\" id=\"container\" style=\"background-color: #0D0E1B;\">\n" + " </div>\n" + " <div class=\"control\">\n" + " <div class=\"fa fa-play\" id=\"play\"></div>\n" + " <div class=\"fa fa-stop\" id=\"stop\" style=\"display: none\"></div>\n" + " <div class=\"timer\">\n" + " <span class=\"progress_timer\">00:00:00</span>\n" + " <span class=\"duration_timer\">00:00:00</span>\n" + " </div>\n" + " <div class=\"fa fa-expand expand\" id=\"expand\"></div>\n" + " <div class=\"fa fa-close\" id=\"close\"></div>\n" + " </div>\n" + " </div>\n" + " </div>"; element.innerHTML=_content; } Livepler.prototype.playVideo = function (video_id, callback) { @@ -83,8 +94,12 @@ } }); } } }; Livepler.prototype.close = function () { this.closeVideo(this.stream_path); }; window.Livepler = Livepler; })() })(); src/main/resources/public/monitor/history.html
@@ -12,34 +12,22 @@ </head> <body> <!-- jessiebuca播放器 录像 --> <div id="jessibucaContainerHistory"></div> <script src="../js/renderer.js"></script> <script src="../js/jquery.min.js"></script> <script src="../js/ajax.js"></script> <script src="../js/renderer.js"></script> <script src="../js/jquery.progressTime.js"></script> <script src="../js/history/historypler.js"></script> <script> window.onkeydown = function () { h5lc.fullscreen = false }; let historypler =new Historypler({ elem:"jessibucaContainerHistory", ffurl:"../js/jessibuca/ff.js", }); //播放 $(".progressTime-left-b-start").on("click", function () { //TODO:historypler.playVideo(); }); //暂停 关闭流 $(".progressTime-left-b-start stop").on("click", function () { $(this).removeClass("stop"); //TODO:historypler.closeVideo() code:"ff80808178af424e0178af44e677000343616d657261", }); </script> src/main/resources/public/monitor/live.html
@@ -30,6 +30,7 @@ code:"ff80808178af424e0178af44e677000343616d657261", }); livepler.close(); </script> </body> src/main/resources/public/monitor/test.html
@@ -7,45 +7,64 @@ <meta charset="utf-8"/> <link rel="stylesheet" href="../css/font-awesome.min.css"> <link rel="stylesheet" href="../css/controles.css"> <link rel="stylesheet" href="../css/live/liveStyle.css"> </head> <body> <!-- jessiebuca播放器 --> <div id="jessibucaContainer"></div> <div class="wrap"> <div class="content"> <div class="player" onmouseover="playerShow()" onmouseout="playerHidden()"> <div class="player-wrapper" id="container" style="background-color: #0D0E1B;"> </div> <div class="control"> <div class="fa fa-play" id="play"> </div> <div class="fa fa-stop" id="stop" style="display: none"> </div> <div> <span class="progress"></span> </div> <div class="timer"> <span class="progress_timer">00:00:00</span>/ <span class="duration_timer">00:00:00</span> </div> <div class="fa fa-expand expand" onclick="h5lc.fullscreen=true"></div> </div> </div> </div> </div> <script src="../js/ajax.js"></script> <script src="../js/renderer.js"></script> <script src="../js/jquery.min.js"></script> <script src="../js/live/livepler.js"></script> <script> var video_id; var stream_path; window.onkeydown = function () { h5lc.fullscreen = false } var isLive = true; var $play = document.getElementById('play'); var $stop = document.getElementById('stop'); var $close = document.getElementById('close'); var container = document.getElementById("container"); var $jessibucaContainer = document.getElementById("jessibucaContainer"); //入参 let url = getQueryVariable("url"); var $progressTime = document.getElementById('progressTime'); var isPlaying = false; let source = queryParam('source') || 'localhost'; var h5lc = new Jessibuca({container, decoder: "../js/jessibuca/ff.js", videoBuffer: 0}); h5lc.onLoad = function () { //this.play("ws://172.16.30.113:8082/live/ff80808178af424e0178af44e677000343616d657261.flv") //this.play("wss://pulls.1234326.cn/live/L01.flv") //this.play("ws://localhost:8080/live/test.flv") //this.play("ws://" + source + ":8080/live/" + stream) //this.play("ws://pull3.afb1188.com/live/" + stream + ".flv") //this.play("ws://pull2.afb1188.com/live/" + stream + ".flv") } h5lc.onPlay = function () { isPlaying = true; @@ -69,14 +88,6 @@ $stop.style.display = 'none'; }, false); $close.addEventListener('click', function () { if (!isPlaying) { return; } isPlaying = false; //stop(); $jessibucaContainer.style.display = 'none'; }, false); function stop() { $.get("http://127.0.0.1:8088/monica/video/stop?param=live/test", function () { @@ -85,49 +96,40 @@ ); } function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = query.split("&"); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split("="); if (pair[0] == variable) { return pair[1]; function queryParam(name, url) { var search = window.location.search; var qArr = ''; var key = {}; if (url) { qArr = url.split("?")[1].split("&") } else { if (!window.location.search) { return } qArr = search.substr(1).split("&") } for (var i = 0; i < qArr.length; i++) { var firstPos = qArr[i].indexOf('='); key[qArr[i].slice(0, firstPos)] = qArr[i].slice(firstPos + 1) } if (name) { return key[name] } else { if (url) { return key[name] } else { return key } } return (false); } //播放 function play_video(video_id) { windows.video_id = video_id; $.ajax({ type: "get", url: "../../webapi/media/live?param=" + video_id, timeout: 5000, async: false, success: function (result) { h5lc.onLoad = function () { this.play(result.jessica); } window.stream_path = result.streamPath; } }); function playerShow() { $(".player .control").css("display", "block") } //关闭 function close_video(streamPath) { h5lc.destroy(); if (streamPath) { $.ajax({ type: "get", url: "../../webapi/media/stop?param=" + stream_path, async: false, success: function (result) { $jessibucaContainer.style.display = 'none'; } }); } function playerHidden() { $(".player .control").css("display", "none") } </script>