Files
webrtc/examples/broadcast/jsfiddle/demo.js
Ben Weitzman 73f8db9316 Populate MediaEngine from Offer in broadcast
Use offerer PayloadType when generating answer. Before we would use the
hardcoded values, this is invalid behavior and would cause browsers to
just ignore our video when publishing.
2020-03-28 14:50:03 -07:00

63 lines
1.7 KiB
JavaScript

/* eslint-env browser */
var log = msg => {
document.getElementById('logs').innerHTML += msg + '<br>'
}
window.createSession = isPublisher => {
let pc = new RTCPeerConnection({
iceServers: [
{
urls: 'stun:stun.l.google.com:19302'
}
]
})
pc.oniceconnectionstatechange = e => log(pc.iceConnectionState)
pc.onicecandidate = event => {
if (event.candidate === null) {
document.getElementById('localSessionDescription').value = btoa(JSON.stringify(pc.localDescription))
}
}
if (isPublisher) {
navigator.mediaDevices.getUserMedia({ video: true, audio: false })
.then(stream => {
pc.addStream(document.getElementById('video1').srcObject = stream)
pc.createOffer()
.then(d => pc.setLocalDescription(d))
.catch(log)
}).catch(log)
} else {
pc.addTransceiver('video')
pc.createOffer()
.then(d => pc.setLocalDescription(d))
.catch(log)
pc.ontrack = function (event) {
var el = document.getElementById('video1')
el.srcObject = event.streams[0]
el.autoplay = true
el.controls = true
}
}
window.startSession = () => {
let sd = document.getElementById('remoteSessionDescription').value
if (sd === '') {
return alert('Session Description must not be empty')
}
try {
pc.setRemoteDescription(new RTCSessionDescription(JSON.parse(atob(sd))))
} catch (e) {
alert(e)
}
}
let btns = document.getElementsByClassName('createSessionButton')
for (let i = 0; i < btns.length; i++) {
btns[i].style = 'display: none'
}
document.getElementById('signalingContainer').style = 'display: block'
}