193 lines
5.8 KiB
HTML
193 lines
5.8 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0" />
|
|
<title>CMS Player</title>
|
|
<link rel="shortcut icon" href="#" />
|
|
<script src="./public/player/cmsplayer.js"></script>
|
|
<script src="./public/player/common.js"></script>
|
|
<script src="./public/player/pcm-player.js"></script>
|
|
<script src="./public/player/webgl.js"></script>
|
|
<script src="./public/player/cmstalk.js"></script>
|
|
<script src="./public/player/alawmulaw.js"></script>
|
|
<script src="./public/player/recorder-core.js"></script>
|
|
<script src="./public/js/moment.js"></script>
|
|
<script src="./public/js/axios.min.js"></script>
|
|
<script src="./public/js/jquery-2.2.3.min.js"></script>
|
|
<style>
|
|
html,
|
|
body {
|
|
width: 100%;
|
|
height: 100%;
|
|
margin: 0;
|
|
/* padding: 30px; */
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
div {
|
|
user-select: none;
|
|
-ms-user-select: none;
|
|
-moz-user-select: none;
|
|
-html-user-select: none;
|
|
-webkit-user-select: none;
|
|
}
|
|
|
|
ul {
|
|
list-style: none;
|
|
}
|
|
|
|
ul li {
|
|
height: 100%;
|
|
float: left;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
#videoTimeTrack li {
|
|
border-right: 1px solid #ccc;
|
|
}
|
|
|
|
#videoTimeTrack li:first-child {
|
|
border-left: 1px solid #ccc;
|
|
}
|
|
|
|
#playerBox {
|
|
height: 96%;
|
|
width: 100%;
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body ontouchstart>
|
|
<div id="playerBox"></div>
|
|
<div>
|
|
<button class="layui-btn" id="talk-real-server">实时视频对讲(请配置URL)</button>
|
|
<!-- <input type="text" id="talkUrl" style="width: 600px" value="" /> -->
|
|
</div>
|
|
<script type="text/javascript">
|
|
window.onload = function () {
|
|
self.player = new Player($("#playerBox"));
|
|
function getParams(key) {
|
|
var reg = new RegExp("(^|&)" + key + "=([^&]*)(&|$)");
|
|
var r = window.location.search.substr(1).match(reg);
|
|
if (r != null) {
|
|
return decodeURIComponent(r[2]); // 使用 decodeURIComponent 代替 unescape
|
|
}
|
|
return null;
|
|
}
|
|
|
|
var locationUrl = window.location.href;
|
|
var id = getParams("id");
|
|
var title = getParams("title");
|
|
let requestBody = {
|
|
pointId: id,
|
|
useTLS: 0
|
|
}
|
|
// console.log(window.location, locationUrl, id, title);
|
|
try {
|
|
if (window.location.host === 'www.hndyjqrh.cn') {
|
|
requestBody.useTLS = 1
|
|
}
|
|
// requestBody.useTLS = 1
|
|
let url = 'https://www.hndyjqrh.cn/api/multialarm/video/preview'
|
|
axios({
|
|
method: 'post',
|
|
url,
|
|
data: { ...requestBody }
|
|
}).then(res => {
|
|
// console.log(res);
|
|
var PLAYURL = res.data.data.videoUrl
|
|
self.player.play(PLAYURL, true, "");
|
|
|
|
}).catch(function (error) {
|
|
console.log(error)
|
|
})
|
|
} catch (error) {
|
|
console.log(error);
|
|
|
|
}
|
|
$("html>head>title").html(title);
|
|
|
|
var wsUrl = ''
|
|
document.getElementById("talk-real-server").onclick = function () {
|
|
console.log(1111);
|
|
axios({
|
|
method: 'post',
|
|
url: 'https://www.hndyjqrh.cn/api/multialarm/talk/channel',
|
|
data: { ...requestBody }
|
|
}).then(res => {
|
|
console.log('talk/channel', res);
|
|
wsUrl = res.data.data.videoUrl
|
|
|
|
}).catch(function (error) {
|
|
console.log(error)
|
|
})
|
|
if (wsUrl.length > 0) {
|
|
// 创建 WebSocket 连接
|
|
const socket = new WebSocket(wsUrl);
|
|
|
|
// 监听 WebSocket 连接的打开事件
|
|
socket.onopen = function (event) {
|
|
console.log('WebSocket 连接已打开');
|
|
|
|
// 获取麦克风的音频流
|
|
navigator.mediaDevices.getUserMedia({ audio: true })
|
|
.then(stream => {
|
|
// 使用 AudioContext 处理音频数据
|
|
const audioContext = new AudioContext();
|
|
const source = audioContext.createMediaStreamSource(stream);
|
|
const processor = audioContext.createScriptProcessor(4096, 1, 1);
|
|
|
|
// 监听音频数据
|
|
processor.onaudioprocess = function (event) {
|
|
const audioData = event.inputBuffer.getChannelData(0);
|
|
const float32Array = new Float32Array(audioData);
|
|
|
|
// 将浮点音频数据转换为 16 位 PCM 格式
|
|
const int16Array = new Int16Array(float32Array.length);
|
|
for (let i = 0; i < float32Array.length; i++) {
|
|
int16Array[i] = float32Array[i] * 0x7FFF; // 将 [-1, 1] 映射到 [-32768, 32767]
|
|
}
|
|
|
|
// 发送音频数据
|
|
socket.send(int16Array.buffer);
|
|
console.log('音频数据已发送');
|
|
};
|
|
|
|
// 将音频流连接到处理器并开始处理
|
|
source.connect(processor);
|
|
processor.connect(audioContext.destination);
|
|
})
|
|
.catch(error => {
|
|
console.error('获取音频流失败:', error);
|
|
});
|
|
};
|
|
|
|
// 监听 WebSocket 收到消息事件
|
|
socket.onmessage = function (event) {
|
|
console.log('收到消息:', event.data);
|
|
};
|
|
|
|
// 监听 WebSocket 连接关闭事件
|
|
socket.onclose = function (event) {
|
|
console.log('WebSocket 连接已关闭');
|
|
};
|
|
|
|
// 监听 WebSocket 连接出错事件
|
|
socket.onerror = function (event) {
|
|
console.error('WebSocket 错误:', event);
|
|
};
|
|
|
|
}
|
|
// var playUrl = document.getElementById("realplayUrl").value;
|
|
// var talkUrl = document.getElementById("talkUrl").value;
|
|
// self.player.talkUrl = talkUrl;
|
|
// self.player.play(playUrl, true, "");
|
|
}
|
|
}
|
|
|
|
</script>
|
|
</body>
|
|
|
|
</html> |