sync/player/whepplayer.coffee
2025-07-22 01:02:34 +02:00

46 lines
1.4 KiB
CoffeeScript

window.WhepPlayer = class WhepPlayer extends PlayerJSPlayer
constructor: (data) ->
super(data)
@load(data)
load: (data) ->
@ready = false
@setMediaProperties(data)
{ whepURL, streamKey } = data.meta
waitUntilDefined window, 'PlayerJSPlayer', =>
videoEl = document.createElement 'video'
videoEl.autoplay = true
videoEl.muted = true
videoEl.controls = true
removeOld(videoEl)
@setupPlayer(videoEl, data)
pc = new RTCPeerConnection()
pc.addTransceiver 'audio', direction: 'recvonly'
pc.addTransceiver 'video', direction: 'recvonly'
pc.ontrack = (event) ->
videoEl.srcObject = event.streams[0]
pc.oniceconnectionstatechange = ->
document.getElementById('connectionState').innerText = pc.iceConnectionState
pc.createOffer().then (offer) ->
pc.setLocalDescription offer
fetch whepURL,
method: 'POST'
headers:
'Authorization': "Bearer #{streamKey}"
'Content-Type': 'application/sdp'
body: offer.sdp
.then (r) -> r.text()
.then (answer) ->
pc.setRemoteDescription type: 'answer', sdp: answer
pc.onconnectionstatechange = ->
if pc.connectionState is 'connected'
@ready = true
@fire 'ready'
document.getElementById('readyFlag').innerText = 'yes'