var pc = null; function negotiate() { pc.addTransceiver('video', { direction: 'recvonly' }); return pc.createOffer().then((offer) => { return pc.setLocalDescription(offer); }).then(() => { // wait for ICE gathering to complete return new Promise((resolve) => { if (pc.iceGatheringState === 'complete') { resolve(); } else { const checkState = () => { if (pc.iceGatheringState === 'complete') { pc.removeEventListener('icegatheringstatechange', checkState); resolve(); } }; pc.addEventListener('icegatheringstatechange', checkState); } }); }).then(() => { var offer = pc.localDescription; return fetch('/offer', { body: JSON.stringify({ sdp: offer.sdp, type: offer.type, }), headers: { 'Content-Type': 'application/json' }, method: 'POST' }); }).then((response) => { return response.json(); }).then((answer) => { return pc.setRemoteDescription(answer); }).catch((e) => { alert(e); }); } function start() { console.log('开始执行!'); var config = { sdpSemantics: 'unified-plan' }; //config.iceServers = [{ urls: ['stun:stun.voiparound.com'] }]; pc = new RTCPeerConnection(); pc.addEventListener('track', (evt) => { if (evt.track.kind == 'video') { const video = document.getElementById('video'); video.srcObject = evt.streams[0]; //video.play() // video.muted = true; // 静音 // video.play().then(() => { // // 如果成功播放,可以选择恢复音量 // video.muted = false; // }).catch((error) => { // console.error('Error playing video:', error); // }); } }); document.getElementById('start').style.display = 'none'; negotiate(); document.getElementById('stop').style.display = 'inline-block'; } function stop() { document.getElementById('stop').style.display = 'none'; // close peer connection setTimeout(() => { pc.close(); }, 500); document.getElementById('start').style.display = 'inline-block'; } function showView(){ console.log('status:',document.getElementById('video').paused) if (document.getElementById('video').paused) { document.getElementById('video').play().catch(error => { console.error('Error playing video:', error); }); } } // // 监听页面焦点变化 window.addEventListener('focus', () => { if (document.getElementById('video').paused) { document.getElementById('video').play().catch(error => { console.error('Error playing video:', error); }); } }); //document.addEventListener('visibilitychange', () => { //if (document.visibilityState === 'visible') { // if (document.getElementById('video').paused) { // document.getElementById('video').play().catch(error => { // console.error('Error playing video:', error); // }); // } //} //});