simple-peer 视频聊天之main.js

这段代码展示了如何使用simple-peer库创建一个视频聊天应用。它包含了初始化按钮事件监听、文件发送、接收和进度更新等功能。当用户点击呼叫按钮时,会创建一个PeerConnection对象并开始信号交换。挂断按钮则用于关闭连接。文件发送部分读取并分割文件,通过WebRTC发送,并显示传输速度。
摘要由CSDN通过智能技术生成

‘use strict’;
console.log(‘初始化按钮’);
const callButton = document.getElementById(‘callButton’);
const hangupButton = document.getElementById(‘hangupButton’);
const sendButton = document.getElementById(‘sendButton’);
const cancleButton = document.getElementById(‘cancleButton’);
const progress = document.getElementById(‘progress’);
const progress_bar = document.getElementById(‘progress_bar’);
const pingdom = document.getElementById(‘pingdom’);
const speedDom = document.getElementById(‘speedDom’);
callButton.disabled = false;
hangupButton.disabled = true;
callButton.addEventListener(‘click’, call);
hangupButton.addEventListener(‘click’, hangup);
sendButton.addEventListener(‘click’, sendFile);
cancleButton.addEventListener(‘click’, cancleFile);
console.log(‘初始化变量’);
let startTime;
const localVideo = document.getElementById(‘localVideo’);
const remoteVideo = document.getElementById(‘remoteVideo’);

localVideo.addEventListener(‘loadedmetadata’, function() {
console.log(Local video videoWidth: ${this.videoWidth}px, videoHeight: ${this.videoHeight}px);
});

remoteVideo.addEventListener(‘loadedmetadata’, function() {
console.log(Remote video videoWidth: ${this.videoWidth}px, videoHeight: ${this.videoHeight}px);
});

remoteVideo.addEventListener(‘resize’, () => {
console.log(Remote video size changed to ${remoteVideo.videoWidth}x${remoteVideo.videoHeight});
if (startTime) {
const elapsedTime = window.performance.now() - startTime;
console.log('Setup time: ’ + elapsedTime.toFixed(3) + ‘ms’);
startTime = null;
}
});
function cancleFile(){
if (fileReader && fileReader.readyState === 1) {
console.log(‘Abort read!’);
fileReader.abort();
clearInterval(speedClock);
speed = 0;
speedDom.innerHTML = ‘’;
progress.style.display = ‘none’;
}
}
function sendFile(){
if(!pc){
alert(‘请先建立连接’);
return;
}
const file = fileSource.files[0];
if (file.size === 0) {
alert(‘File is empty, please select a non-empty file’);
return;
}
progress.style.display = ‘block’;
fileReader = new FileReader();
const chunkSize = 16354;
let offset = 0;
fileReader.addEventListener(‘error’, error => console.error(‘Error reading file:’, error));
fileReader.addEventListener(‘abort’, event => console.log(‘File reading aborted:’, event));
fileReader.addEventListener(‘load’, e => {
console.log('FileRead.onload ', e);
console.log(‘Thread ‘, _thread<thread);
// sendChannel.send(e.target.result);
if(_thread<thread){
_thread++;
var data = new Uint8Array(e.target.result.byteLength+1);
var uint8 = new Uint8Array(e.target.result);
data.set([3]);
data.set(uint8,1)
pc.send(data);
speed += e.target.result.byteLength;
offset +=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁静之峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值