|
@@ -0,0 +1,362 @@
|
|
|
+<!DOCTYPE html>
|
|
|
+<html lang="en">
|
|
|
+<head>
|
|
|
+ <meta charset="UTF-8">
|
|
|
+ <title>Aisky-coffee</title>
|
|
|
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
|
+
|
|
|
+
|
|
|
+ <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.1.0/css/bootstrap.min.css">
|
|
|
+
|
|
|
+
|
|
|
+ <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
|
|
|
+
|
|
|
+
|
|
|
+ <script src="https://cdn.bootcss.com/popper.js/1.12.5/umd/popper.min.js"></script>
|
|
|
+
|
|
|
+
|
|
|
+ <script src="https://cdn.bootcss.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
|
|
|
+
|
|
|
+
|
|
|
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
|
|
|
+
|
|
|
+
|
|
|
+ <style>
|
|
|
+ body {
|
|
|
+ margin:0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .navbar-dark .navbar-nav .nav-link {
|
|
|
+ color: white;
|
|
|
+ cursor: pointer;
|
|
|
+ text-decoration:none;
|
|
|
+ width: 110px;
|
|
|
+ height: 46px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .nav-top {
|
|
|
+ line-height:40px;
|
|
|
+ background-color: #C4C4C4;
|
|
|
+ }
|
|
|
+
|
|
|
+ .website_title{
|
|
|
+ font-family: Roboto;
|
|
|
+ font-style: normal;
|
|
|
+ font-weight: normal;
|
|
|
+ font-size: 30px;
|
|
|
+ color: #000000;
|
|
|
+ }
|
|
|
+
|
|
|
+ .navbar-nav > li{
|
|
|
+ float: none;
|
|
|
+ display: inline-block;
|
|
|
+ width: 100px;
|
|
|
+ margin: 0 auto;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .navbar-nav > li a{
|
|
|
+ font-size: 20px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .main-page {
|
|
|
+ margin-top: 200px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .page-title {
|
|
|
+ font-family: Roboto;
|
|
|
+ font-style: normal;
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 36px;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ .flex {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ justify-content: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .set-link {
|
|
|
+ display: inline-block;
|
|
|
+ width: 350px;
|
|
|
+ height: 100px;
|
|
|
+ line-height: 100px;
|
|
|
+ background: #008CBA;
|
|
|
+ border: 1px solid #CFCFCF;
|
|
|
+ box-sizing: border-box;
|
|
|
+ color: #FFFFFF;
|
|
|
+ border-radius: 10px;
|
|
|
+ font-size: 36px;
|
|
|
+ }
|
|
|
+
|
|
|
+ @media(max-width:373px){
|
|
|
+ .card {
|
|
|
+ margin-right: 0px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @media(max-width:577px){
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @media(min-width:576px){
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ @media(min-width:768px){
|
|
|
+ .navbar-nav > li {
|
|
|
+ margin-left: 0px;
|
|
|
+ }
|
|
|
+ .navbar-nav .li-block {
|
|
|
+ display:none;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @media(min-width:991px){
|
|
|
+ .navbar-nav > li {
|
|
|
+ margin-left: 20px;
|
|
|
+ }
|
|
|
+ .navbar-nav .li-block {
|
|
|
+ display:none;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @media(min-width:1200px){
|
|
|
+ .navbar-nav > li {
|
|
|
+ margin-left: 50px;
|
|
|
+ }
|
|
|
+ .navbar-nav .li-block {
|
|
|
+ display: inline-block;
|
|
|
+ width: 100px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @media(min-width:1400px){
|
|
|
+ .navbar-nav .li-block {
|
|
|
+ display: inline-block;
|
|
|
+ width: 200px;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @media(min-width:1689px) {
|
|
|
+ .navbar-nav > li {
|
|
|
+ margin-left: 50px;
|
|
|
+ }
|
|
|
+ .navbar-nav .li-block {
|
|
|
+ display: inline-block;
|
|
|
+ width: 500px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ </style>
|
|
|
+
|
|
|
+ <script>
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ </script>
|
|
|
+</head>
|
|
|
+<body>
|
|
|
+ <nav class="fixed-top">
|
|
|
+ <nav class="navbar navbar-expand-md nav-top justify-content-center">
|
|
|
+ <div>
|
|
|
+ <span class="website_title">影像串流</span>
|
|
|
+ </div>
|
|
|
+ </nav>
|
|
|
+ <nav class="navbar navbar-expand-md bg-dark navbar-dark nav-bottom">
|
|
|
+ <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsibleNavbar">
|
|
|
+ <span class="navbar-toggler-icon"></span>
|
|
|
+ </button>
|
|
|
+ <div class="collapse navbar-collapse" id="collapsibleNavbar">
|
|
|
+ <ul class="navbar-nav">
|
|
|
+ <li class="nav-item">
|
|
|
+ <a class="nav-link" href="/">首頁</a>
|
|
|
+ </li>
|
|
|
+ <li class="nav-item">
|
|
|
+ <a class="nav-link" href="#">關於我們</a>
|
|
|
+ </li>
|
|
|
+ <li class="nav-item">
|
|
|
+ <a class="nav-link" href="#">資訊</a>
|
|
|
+ </li>
|
|
|
+ <li class="nav-item">
|
|
|
+ <a class="nav-link" href="#">聯絡方法</a>
|
|
|
+ </li>
|
|
|
+ <li class="nav-item">
|
|
|
+ <a class="nav-link" href="/cargo_list">咖啡貨櫃</a>
|
|
|
+ </li>
|
|
|
+ <li class="nav-item">
|
|
|
+ <a class="nav-link" href="/video">影像串流</a>
|
|
|
+ </li>
|
|
|
+ <li class="li-block"></li>
|
|
|
+ <li class="nav-item">
|
|
|
+ <a class="nav-link" href="#"><i class="fa fa-user-o"></i> {{params.username}}</a>
|
|
|
+ </li>
|
|
|
+ <li class="nav-item">
|
|
|
+ <a class="nav-link" href="/logout">Logout</a>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </div>
|
|
|
+ </nav>
|
|
|
+ </nav>
|
|
|
+ <div class="main-page">
|
|
|
+
|
|
|
+ <div class="container-fluid">
|
|
|
+ <div class="row" style="margin-top:100px;">
|
|
|
+ <div class="col flex">
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ <div class="col-md-12 row flex" style="text-align:center;margin-top:5px;">
|
|
|
+ <div class="col-md-4 row flex">
|
|
|
+ <img src="" id = "one"width = "320" height = "240">
|
|
|
+ </div>
|
|
|
+ <div class="col-md-4 row flex">
|
|
|
+ <img src="" id = "two" width = "320" height = "240">
|
|
|
+ </div>
|
|
|
+ <div class="col-md-4 row flex">
|
|
|
+ <img src="" id = "three" width = "320" height = "240">
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="col-md-12 row flex" style="text-align:center;margin-top:5px;">
|
|
|
+ <div class="col-md-4 row flex">
|
|
|
+ <img src="" id = "four" width = "320" height = "240">
|
|
|
+ </div>
|
|
|
+ <div class="col-md-4 row flex">
|
|
|
+ <img src="" id = "five" width = "320" height = "240">
|
|
|
+ </div>
|
|
|
+ <div class="col-md-4 row flex">
|
|
|
+ <img src="" id = "six" width = "320" height = "240">
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ </div>
|
|
|
+</body>
|
|
|
+ <script>
|
|
|
+ const img = document.querySelector('#one');
|
|
|
+ const WS_URL = 'ws:///60.250.156.230:8088';
|
|
|
+ const ws = new WebSocket(WS_URL);
|
|
|
+ let urlObject;
|
|
|
+ ws.onopen = () => console.log(`Connected to ${WS_URL}`);
|
|
|
+ ws.onmessage = message => {
|
|
|
+ const arrayBuffer = message.data;
|
|
|
+ if(urlObject){
|
|
|
+ URL.revokeObjectURL(urlObject);
|
|
|
+ }
|
|
|
+ urlObject = URL.createObjectURL(new Blob([arrayBuffer]));
|
|
|
+ img.src = urlObject;
|
|
|
+ }
|
|
|
+ const img1 = document.querySelector('#two');
|
|
|
+ const WS_URL1 = 'ws:///60.250.156.230:8089';
|
|
|
+ const ws1 = new WebSocket(WS_URL1);
|
|
|
+ let urlObject1;
|
|
|
+ ws1.onopen = () => console.log(`Connected to ${WS_URL1}`);
|
|
|
+ ws1.onmessage = message1 => {
|
|
|
+ const arrayBuffer1 = message1.data;
|
|
|
+ if(urlObject1){
|
|
|
+ URL.revokeObjectURL(urlObject1);
|
|
|
+ }
|
|
|
+ urlObject1 = URL.createObjectURL(new Blob([arrayBuffer1]));
|
|
|
+ img1.src = urlObject1;
|
|
|
+ }
|
|
|
+ const img2 = document.querySelector('#three');
|
|
|
+ const WS_URL2 = 'ws:///60.250.156.230:8090';
|
|
|
+ const ws2 = new WebSocket(WS_URL2);
|
|
|
+ let urlObject2;
|
|
|
+ ws2.onopen = () => console.log(`Connected to ${WS_URL2}`);
|
|
|
+ ws2.onmessage = message2 => {
|
|
|
+ const arrayBuffer2 = message2.data;
|
|
|
+ if(urlObject2){
|
|
|
+ URL.revokeObjectURL(urlObject2);
|
|
|
+ }
|
|
|
+ urlObject2 = URL.createObjectURL(new Blob([arrayBuffer2]));
|
|
|
+ img2.src = urlObject2;
|
|
|
+ }
|
|
|
+ const img3 = document.querySelector('#four');
|
|
|
+ const WS_URL3 = 'ws:///60.250.156.230:8091';
|
|
|
+ const ws3 = new WebSocket(WS_URL3);
|
|
|
+ let urlObject3;
|
|
|
+ ws3.onopen = () => console.log(`Connected to ${WS_URL3}`);
|
|
|
+ ws3.onmessage = message3 => {
|
|
|
+ const arrayBuffer3 = message3.data;
|
|
|
+ if(urlObject3){
|
|
|
+ URL.revokeObjectURL(urlObject3);
|
|
|
+ }
|
|
|
+ urlObject3 = URL.createObjectURL(new Blob([arrayBuffer3]));
|
|
|
+ img3.src = urlObject3;
|
|
|
+ }
|
|
|
+ const img4 = document.querySelector('#five');
|
|
|
+ const WS_URL4 = 'ws:///60.250.156.230:8092';
|
|
|
+ const ws4 = new WebSocket(WS_URL4);
|
|
|
+ let urlObject4;
|
|
|
+ ws4.onopen = () => console.log(`Connected to ${WS_URL4}`);
|
|
|
+ ws4.onmessage = message4 => {
|
|
|
+ const arrayBuffer4 = message4.data;
|
|
|
+ if(urlObject4){
|
|
|
+ URL.revokeObjectURL(urlObject4);
|
|
|
+ }
|
|
|
+ urlObject4 = URL.createObjectURL(new Blob([arrayBuffer4]));
|
|
|
+ img4.src = urlObject4;
|
|
|
+ }
|
|
|
+ const img5 = document.querySelector('#six');
|
|
|
+ const WS_URL5 = 'ws:///60.250.156.230:8093';
|
|
|
+ const ws5 = new WebSocket(WS_URL5);
|
|
|
+ let urlObject5;
|
|
|
+ ws5.onopen = () => console.log(`Connected to ${WS_URL5}`);
|
|
|
+ ws5.onmessage = message5 => {
|
|
|
+ const arrayBuffer5 = message5.data;
|
|
|
+ if(urlObject5){
|
|
|
+ URL.revokeObjectURL(urlObject5);
|
|
|
+ }
|
|
|
+ urlObject5 = URL.createObjectURL(new Blob([arrayBuffer5]));
|
|
|
+ img5.src = urlObject5;
|
|
|
+ }
|
|
|
+ </script>
|
|
|
+</html>
|