mirror of
https://github.com/pion/webrtc.git
synced 2025-10-03 14:26:25 +08:00
108 lines
2.5 KiB
JavaScript
108 lines
2.5 KiB
JavaScript
/* eslint-env browser */
|
|
|
|
// Create peer conn
|
|
const pc = new RTCPeerConnection({
|
|
iceServers: [{
|
|
urls: 'stun:stun.l.google.com:19302'
|
|
}]
|
|
})
|
|
|
|
pc.oniceconnectionstatechange = (e) => {
|
|
console.log('connection state change', pc.iceConnectionState)
|
|
}
|
|
pc.onicecandidate = (event) => {
|
|
if (event.candidate === null) {
|
|
document.getElementById('localSessionDescription').value = btoa(
|
|
JSON.stringify(pc.localDescription)
|
|
)
|
|
}
|
|
}
|
|
|
|
pc.onnegotiationneeded = (e) =>
|
|
pc
|
|
.createOffer()
|
|
.then((d) => pc.setLocalDescription(d))
|
|
.catch(console.error)
|
|
|
|
pc.ontrack = (event) => {
|
|
console.log('Got track event', event)
|
|
const video = document.createElement('video')
|
|
video.srcObject = event.streams[0]
|
|
video.autoplay = true
|
|
video.width = '500'
|
|
const label = document.createElement('div')
|
|
label.textContent = event.streams[0].id
|
|
document.getElementById('serverVideos').appendChild(label)
|
|
document.getElementById('serverVideos').appendChild(video)
|
|
}
|
|
|
|
navigator.mediaDevices
|
|
.getUserMedia({
|
|
video: {
|
|
width: {
|
|
ideal: 4096
|
|
},
|
|
height: {
|
|
ideal: 2160
|
|
},
|
|
frameRate: {
|
|
ideal: 60,
|
|
min: 10
|
|
}
|
|
},
|
|
audio: false
|
|
})
|
|
.then((stream) => {
|
|
document.getElementById('browserVideo').srcObject = stream
|
|
pc.addTransceiver(stream.getVideoTracks()[0], {
|
|
direction: 'sendonly',
|
|
streams: [stream],
|
|
sendEncodings: [
|
|
// for firefox order matters... first high resolution, then scaled resolutions...
|
|
{
|
|
rid: 'f'
|
|
},
|
|
{
|
|
rid: 'h',
|
|
scaleResolutionDownBy: 2.0
|
|
},
|
|
{
|
|
rid: 'q',
|
|
scaleResolutionDownBy: 4.0
|
|
}
|
|
]
|
|
})
|
|
pc.addTransceiver('video')
|
|
pc.addTransceiver('video')
|
|
pc.addTransceiver('video')
|
|
})
|
|
|
|
window.startSession = () => {
|
|
const sd = document.getElementById('remoteSessionDescription').value
|
|
if (sd === '') {
|
|
return alert('Session Description must not be empty')
|
|
}
|
|
|
|
try {
|
|
console.log('answer', JSON.parse(atob(sd)))
|
|
pc.setRemoteDescription(new RTCSessionDescription(JSON.parse(atob(sd))))
|
|
} catch (e) {
|
|
alert(e)
|
|
}
|
|
}
|
|
|
|
window.copySDP = () => {
|
|
const browserSDP = document.getElementById('localSessionDescription')
|
|
|
|
browserSDP.focus()
|
|
browserSDP.select()
|
|
|
|
try {
|
|
const successful = document.execCommand('copy')
|
|
const msg = successful ? 'successful' : 'unsuccessful'
|
|
console.log('Copying SDP was ' + msg)
|
|
} catch (err) {
|
|
console.log('Unable to copy SDP ' + err)
|
|
}
|
|
}
|