Monica视频监控处理程序
xc
2021-04-29 bf17d1c5c8270cb8dbd28ea246336509c05c9f44
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
;!(function () {
 
    function HistoryComponent(opt) {
        if (typeof opt.elem === 'string') {
            opt.elem = document.getElementById(opt.elem);
        }
        if (!opt.elem) {
            throw new Error('需要容器');
            return;
        }
        this.elem = opt.elem;
        appendContent(this.elem);
 
        let stream_path;
        let cameraId = opt.cameraId;
 
        let container = document.getElementById("container");
        let h5lc = new Jessibuca({container, decoder: "../js/jessibuca/ff.js", videoBuffer: 0});
 
        //创建时间轴
        let currentTimer;
        let hourTimestamp = 3600 * 1000;
        let dayTimestamp = hourTimestamp * 24;
 
        $("#progressTime").ProgressTime({
            container: "progressTime",
            startTime: new Date(formatDate(new Date(new Date().getTime() - dayTimestamp * 1), "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 * 1.5), "YYYY/MM/DD 12:00:00")),
            interval: 300,
            delay: 2000,
            hoursInterval: 1,//时间间隔
            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);
            }
        });
 
        let progressTimelayer = window.progressTime;
 
        let beginDateStr = new Date(formatDate(new Date(new Date().getTime() - dayTimestamp * 1), "YYYY/MM/DD 00:00:00"));
        let endDateStr = new Date(formatDate(new Date(), "YYYY/MM/DD 00:00:00"));
 
        //创建精确时间选择器
        jeDate("#currentTimer", {
            festival: false,                     //是否显示农历节日
            minDate: "1900-01-01",              //最小日期
            maxDate: "2099-12-31",              //最大日期
            method: {
                choose: function (params) {
                }
            },
            donefun: function (obj) {
                currentTimer = obj.val;
                let flag = compareTime(beginDateStr, endDateStr, currentTimer);
                if (flag) {
                    //只有在指定时间才刷新指针位置
                    progressTimelayer.setTime({
                        time: currentTimer,//指针显示时间
                        timer: currentTimer,//指针位置计算时间
                        originalEvent: {
                            layerX: undefined,
                        },
                        type: "",
                    });
                    progressTimelayer.resize();
                }
            },
            format: "YYYY-MM-DD hh:mm:ss"
        });
 
        //判断时间是否属于区间内
        function compareTime(begin, end, timer) {
            var date1 = Date.parse(new Date(begin));
            var date2 = Date.parse(new Date(end));
            var time = Date.parse(new Date(timer));
            if (date1 < time && date2 > time) {
                return true;
            }
            ;
            return false;
        }
 
        //播放
        $(".progressTime-left-b-start").on("click", function () {
            if (opt.rtspUrl) {
                let rtspUrl = opt.rtspUrl;
                historyComponent.playVideoRTSP(rtspUrl, currentTimer, function (result) {
                    h5lc.play(result.jessicaURL)
                    stream_path = result.streamPath;
                });
            } else {
                historyComponent.playVideo(cameraId, currentTimer, function (result) {
                    h5lc.play(result.jessicaURL)
                    stream_path = result.streamPath;
                });
            }
        });
 
        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>\n" +
            "    <div class=\"jeitem\">\n" +
            "        <label class=\"jelabel\">精准时间查找</label>\n" +
            "        <div class=\"jeinpbox\"><input type=\"text\" class=\"jeinput\" id=\"currentTimer\" placeholder=\"选择时间\">\n" +
            "        </div>\n" +
            "    </div>";
        element.innerHTML = _content;
    }
 
    //播放 - 针对摄像头id
    HistoryComponent.prototype.playVideo = function (video_id, starttime, callback) {
        $.ajax({
            type: "get",
            url: "../../monica/history?param=" + video_id + "&startTime=" + starttime + "&endTime=",
            timeout: 5000,
            async: false,
            success: function (result) {
                callback(result);
            }
        });
    };
    //播放 - 针对rtsp
    HistoryComponent.prototype.playVideoRTSP = function (rtspURL, starttime, callback) {
        $.ajax({
            type: "get",
            url: "../../monica/rtsp/history?param=" + rtspURL + "&startTime=" + starttime + "&endTime=",
            timeout: 5000,
            async: false,
            success: function (result) {
                callback(result);
            }
        });
    };
 
    //关闭流
    HistoryComponent.prototype.closeVideo = function (streamPath) {
        if (streamPath && typeof streamPath === "string") {
            $.ajax({
                type: "get",
                url: "../../monica/stop?param=" + streamPath,
                async: false,
                success: function (result) {
                }
            });
        }
    };
 
    HistoryComponent.prototype.close = function () {
        this.closeVideo(this.stream_path);
    };
 
 
    window.HistoryComponent = HistoryComponent;
 
})()