diff --git a/hd-glasses-app/.env.dev b/hd-glasses-app/.env.dev index a0db78c..2a5e5d6 100644 --- a/hd-glasses-app/.env.dev +++ b/hd-glasses-app/.env.dev @@ -1,8 +1,9 @@ VUE_APP_MAP_URL='http://82.157.23.170:8600/geoserver' VUE_APP_MAP_AUTHKEY='9b488ac6-5309-4ef4-ab99-2180d2da161d' VUE_APP_API="http://work.ii999.live:19002/znzq" -VUE_APP_STATIC_FILE_Prefix='http://43.139.191.204:8908' + +VUE_APP_STATIC_FILE_Prefix='https://119.45.242.222/static_file/' VUE_APP_SRS_URL='webrtc://119.45.242.222/' -VUE_APP_IM_API_URL='https://119.45.242.222/im_api/v1' +VUE_APP_IM_API_URL='https://dev.shudong.xyz/im_api/v1' diff --git a/hd-glasses-app/.env.prod b/hd-glasses-app/.env.prod index 858437b..a6ed255 100644 --- a/hd-glasses-app/.env.prod +++ b/hd-glasses-app/.env.prod @@ -1,7 +1,7 @@ VUE_APP_MAP_URL='http://172.16.2.2:8600/geoserver' VUE_APP_MAP_AUTHKEY='30efbafe-d218-4d77-8200-0207246924be' VUE_APP_API="http://172.16.2.3:19000/znzq" -VUE_APP_STATIC_FILE_Prefix='http://43.139.191.204:8908' +VUE_APP_STATIC_FILE_Prefix='https://172.16.3.19/static_file' VUE_APP_SRS_URL='webrtc://172.16.3.19/' VUE_APP_IM_API_URL='https://172.16.3.19/im_api/v1' diff --git a/hd-glasses-app/package-lock.json b/hd-glasses-app/package-lock.json index f4375be..c775cc2 100644 --- a/hd-glasses-app/package-lock.json +++ b/hd-glasses-app/package-lock.json @@ -3538,6 +3538,11 @@ "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz", "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, + "dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, "de-indent": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz", diff --git a/hd-glasses-app/package.json b/hd-glasses-app/package.json index cdee00b..e9649f7 100644 --- a/hd-glasses-app/package.json +++ b/hd-glasses-app/package.json @@ -14,6 +14,7 @@ "amfe-flexible": "^2.2.1", "axios": "^1.5.1", "core-js": "^3.8.3", + "dayjs": "^1.11.10", "less": "^4.2.0", "less-loader": "^11.1.3", "lib-flexible": "^0.3.2", diff --git a/hd-glasses-app/public/index.html b/hd-glasses-app/public/index.html index ddb6608..6e26464 100644 --- a/hd-glasses-app/public/index.html +++ b/hd-glasses-app/public/index.html @@ -3,7 +3,7 @@ diff --git a/hd-glasses-app/public/srs/srs.sdk.js b/hd-glasses-app/public/srs/srs.sdk.js index 767ad10..1821ecf 100644 --- a/hd-glasses-app/public/srs/srs.sdk.js +++ b/hd-glasses-app/public/srs/srs.sdk.js @@ -1,4 +1,3 @@ - /** * The MIT License (MIT) * @@ -29,14 +28,66 @@ function SrsRtcPublisherAsync() { var self = {}; + self.cameraIndex=0 + + self.cameraDevices = [] + + self.url="" + // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia self.constraints = { audio: true, video: { + deviceId:{ + exact:"136e115ef37b7ec8361207a61d42cd39818381aa0e99728e35eb9746bedce6b4" + }, width: {ideal: 320, max: 576} } }; + self.initDevices = async function () { + // await navigator.mediaDevices.enumerateDevices().then(gotDevices).catch(handleError); + } + + function gotDevices(deviceInfos) { + let option = {} + // Handles being called several times to update labels. Preserve values. + for (let i = 0; i !== deviceInfos.length; ++i) { + const deviceInfo = deviceInfos[i]; + const option = document.createElement('option'); + option.value = deviceInfo.deviceId; + if (deviceInfo.kind === 'audioinput') { + console.log(option) + console.log(deviceInfo) + } else if (deviceInfo.kind === 'audiooutput') { + console.log(option) + console.log(deviceInfo) + } else if (deviceInfo.kind === 'videoinput') { + self.cameraDevices.push(deviceInfo) + } else { + console.log('Some other kind of source/device: ', deviceInfo); + } + } + } + + function handleError(error) { + console.log('navigator.getUserMedia error: ', error); + } + + self.changeCamera = async function(){ + // console.log('navigator.getUserMedia') + // console.log(self.cameraDevices) + self.cameraIndex=self.cameraIndex+1==self.cameraDevices.length?0:self.cameraIndex+1 + let deviceId={ + exact:"" + } + deviceId.exact=self.cameraDevices[self.cameraIndex].deviceId + self.constraints.video.deviceId=deviceId + + self.publish(self.url) + + console.log(self.constraints) + } // @see https://github.com/rtcdn/rtcdn-draft // @url The WebRTC url to play with, for example: // webrtc://r.ossrs.net/live/livestream @@ -59,12 +110,17 @@ function SrsRtcPublisherAsync() { // or any other information, will pass-by in the query: // webrtc://r.ossrs.net/live/livestream?vhost=xxx // webrtc://r.ossrs.net/live/livestream?token=xxx - self.publish = async function (url) { + self.publish = async function (url,constraints={}) { + + self.url=url; + var conf = self.__internal.prepareUrl(url); self.pc.addTransceiver("audio", {direction: "sendonly"}); self.pc.addTransceiver("video", {direction: "sendonly"}); - var stream = await navigator.mediaDevices.getUserMedia(self.constraints); + + + var stream = await navigator.mediaDevices.getUserMedia(constraints); // @see https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/addStream#Migrating_to_addTrack stream.getTracks().forEach(function (track) { @@ -156,7 +212,7 @@ function SrsRtcPublisherAsync() { return { apiUrl: apiUrl, streamUrl: streamUrl, schema: schema, urlObject: urlObject, port: port, - tid: Number(parseInt(new Date().getTime()*Math.random()*100)).toString(16).slice(0, 7) + tid: Number(parseInt(new Date().getTime() * Math.random() * 100)).toString(16).slice(0, 7) }; }, parse: function (url) { @@ -300,14 +356,14 @@ function SrsRtcPlayerAsync() { // or any other information, will pass-by in the query: // webrtc://r.ossrs.net/live/livestream?vhost=xxx // webrtc://r.ossrs.net/live/livestream?token=xxx - self.play = async function(url) { + self.play = async function (url) { var conf = self.__internal.prepareUrl(url); self.pc.addTransceiver("audio", {direction: "recvonly"}); self.pc.addTransceiver("video", {direction: "recvonly"}); var offer = await self.pc.createOffer(); await self.pc.setLocalDescription(offer); - var session = await new Promise(function(resolve, reject) { + var session = await new Promise(function (resolve, reject) { // @see https://github.com/rtcdn/rtcdn-draft var data = { api: conf.apiUrl, tid: conf.tid, streamurl: conf.streamUrl, @@ -317,15 +373,16 @@ function SrsRtcPlayerAsync() { $.ajax({ type: "POST", url: conf.apiUrl, data: JSON.stringify(data), - contentType:'application/json', dataType: 'json' - }).done(function(data) { + contentType: 'application/json', dataType: 'json' + }).done(function (data) { console.log("Got answer: ", data); if (data.code) { - reject(data); return; + reject(data); + return; } resolve(data); - }).fail(function(reason){ + }).fail(function (reason) { reject(reason); }); }); @@ -337,7 +394,7 @@ function SrsRtcPlayerAsync() { }; // Close the player. - self.close = function() { + self.close = function () { self.pc && self.pc.close(); self.pc = null; }; @@ -383,7 +440,7 @@ function SrsRtcPlayerAsync() { return { apiUrl: apiUrl, streamUrl: streamUrl, schema: schema, urlObject: urlObject, port: port, - tid: Number(parseInt(new Date().getTime()*Math.random()*100)).toString(16).slice(0, 7) + tid: Number(parseInt(new Date().getTime() * Math.random() * 100)).toString(16).slice(0, 7) }; }, parse: function (url) { @@ -496,7 +553,7 @@ function SrsRtcPlayerAsync() { self.stream = new MediaStream(); // https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/ontrack - self.pc.ontrack = function(event) { + self.pc.ontrack = function (event) { if (self.ontrack) { self.ontrack(event); } @@ -511,7 +568,7 @@ function SrsRtcFormatSenders(senders, kind) { var codecs = []; senders.forEach(function (sender) { var params = sender.getParameters(); - params && params.codecs && params.codecs.forEach(function(c) { + params && params.codecs && params.codecs.forEach(function (c) { if (kind && sender.track.kind !== kind) { return; } diff --git a/hd-glasses-app/src/assets/media/call_down.png b/hd-glasses-app/src/assets/media/call_down.png new file mode 100644 index 0000000..5d2ad51 Binary files /dev/null and b/hd-glasses-app/src/assets/media/call_down.png differ diff --git a/hd-glasses-app/src/assets/media/camera_close.png b/hd-glasses-app/src/assets/media/camera_close.png new file mode 100644 index 0000000..32d51f6 Binary files /dev/null and b/hd-glasses-app/src/assets/media/camera_close.png differ diff --git a/hd-glasses-app/src/assets/media/camera_open.png b/hd-glasses-app/src/assets/media/camera_open.png new file mode 100644 index 0000000..c210d25 Binary files /dev/null and b/hd-glasses-app/src/assets/media/camera_open.png differ diff --git a/hd-glasses-app/src/assets/media/mute-fill.png b/hd-glasses-app/src/assets/media/mute-fill.png new file mode 100644 index 0000000..5ae9c74 Binary files /dev/null and b/hd-glasses-app/src/assets/media/mute-fill.png differ diff --git a/hd-glasses-app/src/assets/media/sound-fill.png b/hd-glasses-app/src/assets/media/sound-fill.png new file mode 100644 index 0000000..f8f63ea Binary files /dev/null and b/hd-glasses-app/src/assets/media/sound-fill.png differ diff --git a/hd-glasses-app/src/assets/media/switch.png b/hd-glasses-app/src/assets/media/switch.png new file mode 100644 index 0000000..aa65183 Binary files /dev/null and b/hd-glasses-app/src/assets/media/switch.png differ diff --git a/hd-glasses-app/src/assets/media/voice_close.png b/hd-glasses-app/src/assets/media/voice_close.png new file mode 100644 index 0000000..2bf17c7 Binary files /dev/null and b/hd-glasses-app/src/assets/media/voice_close.png differ diff --git a/hd-glasses-app/src/assets/media/voice_open.png b/hd-glasses-app/src/assets/media/voice_open.png new file mode 100644 index 0000000..9a1e3a1 Binary files /dev/null and b/hd-glasses-app/src/assets/media/voice_open.png differ diff --git a/hd-glasses-app/src/pages/call_room.vue b/hd-glasses-app/src/pages/call_room.vue index 4040bc2..8b53e25 100644 --- a/hd-glasses-app/src/pages/call_room.vue +++ b/hd-glasses-app/src/pages/call_room.vue @@ -1,17 +1,38 @@