| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- var pc = null;
- function negotiate() {
- var host = window.location.hostname
- pc.addTransceiver('video', { direction: 'recvonly' });
- pc.addTransceiver('audio', { 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("http://"+host+":1985/rtc/v1/whep/?app=live&stream=livestream", {
- body: offer.sdp,
- headers: {
- 'Content-Type': 'application/sdp'
- },
- method: 'POST'
- });
- }).then((response) => {
- console.log(response)
- return response.data;
- }).then((answer) => {
- return pc.setRemoteDescription({sdp:answer,type:'answer'});
- }).catch((e) => {
- alert(e);
- });
- }
- function start() {
- var config = {
- sdpSemantics: 'unified-plan'
- };
- if (document.getElementById('use-stun').checked) {
- config.iceServers = [{ urls: ['stun:stun.l.google.com:19302'] }];
- }
- pc = new RTCPeerConnection(config);
- // connect audio / video
- pc.addEventListener('track', (evt) => {
- if (evt.track.kind == 'video') {
- document.getElementById('video').srcObject = evt.streams[0];
- } else {
- document.getElementById('audio').srcObject = evt.streams[0];
- }
- });
- 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);
- }
|