在以前的博文中咱們有介紹方案*NVR硬件錄像機web無插件播放方案(支持取特定時間段視頻流)*;該片博文旨在介紹時間軸功能的實現和相關接口的調用;css
時間軸樣式展現:
html
對於 時間軸的展現實現須要實現的是時間刻度尺的展現,刻度尺的實現就是展現出時間刻度和對應時間是否擁有錄像的標識,當前擁有錄像的標識就是綠色背景的。
其次就是時間刻度滑標,目的用於顯示選擇出對應的時間點,來開始 播放對應的錄像文件,和跳轉到對應的時間點來開始錄像的直播。前端
前端實現代碼:
html css部分:web
.time-rule { overflow: hidden; position: relative; height: 50px; margin: 0 auto; width: 100%; font-size: 12px; max-width: 1440px; background-color: #CCC; margin-top: 30px; } .time-day { position: absolute; left:0; top:0; height: 100%; width: 1440px; cursor: pointer; } .time-minute { float: left; width: 1px; height: 8px; margin: 0; /*background: green*/ } .time-minute.active { background-color: green; } .time-text { float: left; width: 60px; border-left: 1px solid #999; border-top : 1px solid #999; -ms-user-select: none; user-select: none; text-align: center; height: 25px; line-height: 25px; } .time-00 { border-left : 0; } .time-cursor { position: absolute; left:0; top:0; height: 30px; width: 2px; background-color: red; text-align: center; } .time-cursor-text { position: absolute; padding: 0 5px; width : 60px; left : -30px; top: 30px; border : 1px solid red; height: 15px; line-height: 15px; cursor: move; background-color: white; -ms-user-select: none; user-select: none; } <div class="time-rule"> <div class="time-day"> </div> <div class="time-cursor"> <div class="time-cursor-text">00:00</div> </div> </div>
js部分:api
function onTimeUpdate(){ if($(".time-cursor").position().left >= 1440 + $(".time-day").position().left){ $(".time-cursor")[0].style.left = (1440 - 1 + $(".time-day").position().left) + "px"; } var m = moment().hour(0).minute($(".time-cursor").position().left - $(".time-day").position().left); $(".time-cursor-text").text(m.format("HH:mm")).data("changed", true); } function renderTimeTexts(){ $(".time-day .time-text").remove(); for(var i = 0; i< 24; i++){ var $text = $("<div class='time-text'></div>"); var m = moment().hour(i).minute(0).second(0); $text.text(m.format("HH:mm")); $text.addClass("time-" + m.format("HH")); $(".time-day").append($text); } } function renderTimeMinutes(){ $(".time-day .time-minute").remove(); for (var i = 0; i < 1440; i++) { var $minute = $("<div class='time-minute'></div>"); var m = moment().hour(0).minute(i); $minute.addClass("time-" + m.format("HH-mm")); $(".time-day").append($minute); } } if (isIntegrate) { $(".main-header").show(); $("#guangchang").attr("href","/index.html?isIntegrate=true") } $(document).on("click",".box-header .form-group .date",function(e){ $('.datepicker').datepicker({ format: 'mm/dd/yyyy', startDate: '-3d' }); }) $(document).on("mousedown", ".time-cursor-text,.time-day", function (e) { $(this).data("pageX", e.pageX); }).on("mouseup", function (e) { if($(".time-cursor-text").data("changed")){ onChangeTime(); $(".time-cursor-text").removeData("changed"); } $(".time-cursor-text,.time-day").removeData("pageX"); }).on("mousemove", function (e) { var pageX = $(".time-cursor-text").data("pageX"); if (pageX != undefined) { $(".time-cursor-text").data("pageX", e.pageX); var moveX = e.pageX - pageX; var left = $(".time-cursor").position().left + moveX; left = left < 0 ? 0 : left; left = left > ($(".time-rule").innerWidth() - 1) ? ($(".time-rule").innerWidth() - 1) : left; $(".time-cursor")[0].style.left = left + "px"; onTimeUpdate(); } pageX = $(".time-day").data("pageX"); var curLeft = $(".time-day").position().left; if(pageX != undefined && ($(".time-rule").innerWidth() < $(".time-day").outerWidth() || curLeft < 0)){ $(".time-day").data("pageX", e.pageX); var moveX = e.pageX - pageX; var left = $(".time-day").position().left + moveX; left = left > 0 ? 0 : left; var minLeft = $(".time-rule").innerWidth() - $(".time-day").outerWidth(); left = left < minLeft ? minLeft : left; $(".time-day")[0].style.left = left + "px"; onTimeUpdate(); } }).on("mousedown",".time-minute",function(e){ var left = $(this).position().left + $(".time-day").position().left; $(".time-cursor")[0].style.left = left + "px"; onTimeUpdate(); })
主要是經過時間十分渲染出對應的div,以一個div對應一個時間(時、分);而後給予對應的背景來表示對應的時間段是否有錄像文件,還有 就是經過定位 來實現標尺和滑標的運動以及運動到的對應的位置獲取到對應的時間信息。網絡
http://127.0.0.1:10800/api/v1/gethwnvrrecordbyday?id=1&channel=3&day=20180316
{ "EasyDarwin": { "Body": { "Channels": [ { "Duration": 1261, "Name": "ch0003_00000000372000000", "StartTime": "15:29:24" } ], "FileCount": "1" }, "Header": { "CSeq": "1", "ErrorNum": "200", "ErrorString": "Success OK", "MessageType": "MSG_DS_HWNVR_QUERY_RECORD_BY_DAY_ACK", "Version": "v1" } } }
根據 獲取到的 對應時段的錄像信息,經過開始時間和錄像時長來 肯定這個時間端有錄像信息 ,而後經過前端渲染對應的展現出來。app
選擇時間點跳轉,就是 獲取到對應的時間點信息和是否有錄像信息,而後對應的播放開始播放起來。svg
效果展現:
this
EasyNVR可以經過簡單的網絡攝像機通道配置,將傳統監控行業裏面的高清網絡攝像機IP Camera、NVR等具備RTSP協議輸出的設備接入到EasyNVR,EasyNVR可以將這些視頻源的音視頻數據進行拉取,轉換爲RTMP/HLS,進行全平臺終端H5直播(Web、Android、iOS),而且EasyNVR可以將視頻源的直播數據對接到第三方CDN網絡,實現互聯網級別的直播分發;.net
點擊連接加入羣【EasyNVR解決方案】:383501345
Copyright © EasyNVR.com 2016-2019