| | |
| | | <button class="toggle-button" onclick="changeGrid(7, 7)">7x7</button> |
| | | <button class="toggle-button" onclick="changeGrid(8, 8)">8x8</button> |
| | | <button class="toggle-button" onclick="changeGrid(9, 9)">9x9</button> |
| | | <input id="videoUrl" type="text" value="http://192.168.1.227:8889/164/" style="width: 250px"/> |
| | | <input id="videoUrl" type="text" value="http://192.168.1.227:8889/0d1c9f80a7b4480c8b401ba6b140b581_1/" style="width: 250px"/> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | console.log(RTCRtpReceiver.getCapabilities('video').codecs) |
| | | console.log(RTCRtpReceiver.getCapabilities('audio').codecs) |
| | | //whep操作方法 |
| | | const restartPause = 2000; |
| | | const unquoteCredential = (v) => ( |
| | | JSON.parse(`"${v}"`) |
| | | ); |
| | | const linkToIceServers = (links) => ( |
| | | (links !== null) ? links.split(', ').map((link) => { |
| | | const m = link.match(/^<(.+?)>; rel="ice-server"(; username="(.*?)"; credential="(.*?)"; credential-type="password")?/i); |
| | |
| | | console.log("requesting ICE servers"); |
| | | fetch(this.wurl, { |
| | | method: 'OPTIONS', |
| | | headers: { |
| | | 'Referer': this.wurl, |
| | | }, |
| | | }) |
| | | .then((res) => this.onIceServers(res)) |
| | | .catch((err) => { |
| | |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/sdp', |
| | | 'Referer': this.wurl, |
| | | }, |
| | | body: offer.sdp, |
| | | }) |
| | |
| | | if (res.status !== 201) { |
| | | throw new Error('bad status code'); |
| | | } |
| | | // this.eTag = res.headers.get('ETag'); |
| | | // this.eTag = res.headers.get('ETag'); |
| | | this.eTag = res.headers.get("ETag") || res.headers.get('E-Tag'); |
| | | this.wurl = new URL(res.headers.get('location'), this.wurl.origin).toString(); |
| | | return res.text(); |
| | | }) |
| | | .then((sdp) => this.onRemoteAnswer(new RTCSessionDescription({ |
| | |
| | | headers: { |
| | | 'Content-Type': 'application/trickle-ice-sdpfrag', |
| | | 'If-Match': this.eTag, |
| | | 'Referer': this.wurl, |
| | | }, |
| | | |
| | | body: generateSdpFragment(this.offerData, candidates), |