Commit 1a3f0393 by 李宁

1

1 parent 8bc9386b
...@@ -365,7 +365,7 @@ ...@@ -365,7 +365,7 @@
var vConsole = new VConsole() var vConsole = new VConsole()
</script> --> </script> -->
<!-- <script defer src="https://xpo.oss-cn-beijing.aliyuncs.com/huaian/js/livekit-client.min.js"></script> --> <script defer src="https://xpo.oss-cn-beijing.aliyuncs.com/huaian/js/livekit-client.min.js"></script>
<script defer src="https://xpo.oss-cn-beijing.aliyuncs.com/huaian/js/aliyun-oss-sdk-6.20.0.min.js"></script> <script defer src="https://xpo.oss-cn-beijing.aliyuncs.com/huaian/js/aliyun-oss-sdk-6.20.0.min.js"></script>
<script src="https://xpo.oss-cn-beijing.aliyuncs.com/huaian/js/jquery-3.4.1.min.js"></script> <script src="https://xpo.oss-cn-beijing.aliyuncs.com/huaian/js/jquery-3.4.1.min.js"></script>
<script src="https://xpo.oss-cn-beijing.aliyuncs.com/huaian/js/axios.min.js"></script> <script src="https://xpo.oss-cn-beijing.aliyuncs.com/huaian/js/axios.min.js"></script>
...@@ -375,7 +375,7 @@ ...@@ -375,7 +375,7 @@
<script src="js/vue.min.js"></script> <script src="js/vue.min.js"></script>
<script src="js/vant.min.js"></script> <script src="js/vant.min.js"></script>
<script src="js/demo.js?90909"></script> <script src="js/demo.js?9091109"></script>
</body> </body>
</html> </html>
\ No newline at end of file \ No newline at end of file
...@@ -643,74 +643,6 @@ $("#videoSwitch").click(async function(e){ ...@@ -643,74 +643,6 @@ $("#videoSwitch").click(async function(e){
} }
}) })
async function safeSwitchCam(camsId) {
const oldTrack = localTracks.videoTrack;
if (!oldTrack) return false;
let newTrack = null;
try {
/* 1. 先停掉旧轨道,防止华为 ROM 把设备锁死 */
oldTrack.stop(); // 必须 stop,否则同一个设备再次打开会黑屏
/* 2. 重新创建摄像头轨道 */
newTrack = await AgoraRTC.createCameraVideoTrack({
cameraId: camsId,
encoderConfig: {
width: 1280,
height: 720,
frameRate: 25,
},
optimizationMode: 'detail',
});
/* 3. 简单黑帧检测:等 500 ms 后抓一帧,亮度>10 认为 OK */
const stream = new MediaStream([newTrack.getMediaStreamTrack()]);
const video = document.createElement('video');
video.srcObject = stream;
video.play();
await new Promise(r => setTimeout(r, 500));
const canvas = document.createElement('canvas');
canvas.width = 64;
canvas.height = 64;
const ctx = canvas.getContext('2d');
ctx.drawImage(video, 0, 0, 64, 64);
const img = ctx.getImageData(0, 0, 64, 64);
let sum = 0;
for (let i = 0; i < img.data.length; i += 4) {
sum += 0.299 * img.data[i] + 0.587 * img.data[i + 1] + 0.114 * img.data[i + 2];
}
const brightness = sum / (64 * 64);
if (brightness < 10) throw new Error('black frame');
/* 4. 重新发布 */
await client.unpublish(oldTrack);
await client.publish(newTrack);
/* 5. 更新本地引用 & 播放 */
localTracks.videoTrack = newTrack;
newTrack.play('local-player', { mirror: $('#mirror-check').prop('checked') });
return true;
} catch (e) {
console.warn('[safeSwitchCam] fail:', e);
newTrack?.stop();
/* 回滚:重新打开原来的设备 */
try {
const oldDevice = oldTrack.getMediaStreamTrack().getSettings().deviceId;
const rollBack = await AgoraRTC.createCameraVideoTrack({
cameraId: oldDevice,
encoderConfig: { width: 1280, height: 720, frameRate: 25 },
});
await client.unpublish(oldTrack);
await client.publish(rollBack);
localTracks.videoTrack = rollBack;
rollBack.play('local-player', { mirror: $('#mirror-check').prop('checked') });
} catch {}
return false;
}
}
function setStepButt(){ function setStepButt(){
$('.none').hide() $('.none').hide()
if(stepId.startsWith("start_")){ if(stepId.startsWith("start_")){
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!