js+webrtc实现p2p文字音视频大文件点对点互转传输聊天代码
代码语言:html
所属分类:多媒体
代码描述:js+webrtc实现p2p文字音视频大文件点对点互转传输聊天代码,可设置自己的iceserver服务器,默认是免费的google的iceserver,注意在国内可能外网p2p会失败,请更换国内的iceserver。默认打开页面生成二维码,将二维码发送给对方,然后就可以p2p的进行文本聊天、文件互传、音视频聊天了。
代码标签: js webrtc p2p 文字 音视频 大文件 点对点 互转 传输 聊天 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<title>P2P 音视频 · 聊天 · 文件传输 (WebRTC)</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=Noto+Sans+SC:wght@300;400;600&display=swap" rel="stylesheet">
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/peerjs.min.js"></script>
<!-- QRCode -->
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/qrcode.1.5.0.js"></script>
<style>
:root{
--bg:#0f1221;
--card:#14182a;
--muted:#b8c1d8;
--text:#eaf0ff;
--brand:#6c8cff;
--brand-2:#9f7aea;
--ok:#2ecc71;
--warn:#ffb200;
--err:#ff6b6b;
--border:rgba(255,255,255,0.08);
--shadow: 0 10px 30px rgba(0,0,0,0.35), inset 0 1px 0 rgba(255,255,255,0.03);
}
*{ box-sizing: border-box; }
html,body{ height:100%; }
body{
margin:0;
font-family:"Inter","Noto Sans SC",system-ui,-apple-system,Segoe UI,Roboto,Arial;
background:
radial-gradient(1200px 600px at 10% -20%, rgba(108,140,255,0.25), transparent 50%),
radial-gradient(900px 500px at 90% -10%, rgba(159,122,234,0.25), transparent 50%),
linear-gradient(180deg, #0a0d1a, #0f1221 40%, #0f1221);
color:var(--text);
}
.wrap{ max-width:1200px; margin: 28px auto 60px; padding: 0 18px; }
header{ display:flex; align-items:center; justify-content:space-between; gap:16px; margin-bottom:16px;}
.brand{ display:flex; align-items:center; gap:12px;}
.logo{ width:44px;height:44px;border-radius:12px; background: conic-gradient(from 220deg,var(--brand),var(--brand-2),var(--brand)); box-shadow: var(--shadow); }
h1{ margin:0; font-size: 26px; letter-spacing:.2px; background: linear-gradient(90deg,#fff,#cdd7ff); -webkit-background-clip:text; background-clip:text; color:transparent; font-weight:700;}
.sub{ color:var(--muted); font-size:13px; }
.card{
background: linear-gradient(180deg, rgba(255,255,255,0.02), rgba(255,255,255,0.00));
border: 1px solid var(--border);
border-radius: 16px;
box-shadow: var(--shadow);
padding: 16px;
}
.grid{ display:grid; grid-template-columns: 1.4fr .9fr; gap:16px; }
@media (max-width: 980px){ .grid{ grid-template-columns:1fr; } }
.section-title{ font-size: 14px; color: var(--muted); font-weight:600; margin: 0 0 10px; }
.statusbar{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-top:6px; }
.status{ font-size:12px; color:var(--muted); margin-left:auto; }
.btn{
appearance: none; border:0; cursor:pointer; border-radius: 12px;
padding: 10px 14px; font-weight:600; letter-spacing:.3px;
background: linear-gradient(180deg, #6C8CFF, #5b7cf7);
color: #0b1023; box-shadow: 0 10px 20px rgba(108,140,255,.25), inset 0 1px 0 rgba(255,255,255,.25);
transition: transform .06s ease, filter .2s ease;
}
.btn:hover{ filter: brightness(1.05); }
.btn:active{ transform: translateY(1px); }
.btn.sec{ background: linear-gradient(180deg, #1b223d, #151a31); color: var(--text); border:1px solid var(--border); box-shadow: 0 8px 16px rgba(0,0,0,.35), inset 0 1px 0 rgba(255,255,255,.05);}
.btn.ok{ background: linear-gradient(180deg, #60df9f, #2ecc71); color:#07170f;}
.btn.warn{ background: linear-gradient(180deg, #ffb84d, #ff9900); color:#1b1200;}
.row{ display:flex; align-items:center; gap:8px; flex-wrap:wrap;}
.pill{ font-size: 12px; color:#cfe0ff; background:#0b0f1f; border:1px solid var(--border); padding:6px 10px; border-radius:999px; }
.input, select, textarea{
background: #0c1021; border: 1px solid var(--border); color: var(--text);
border-radius: 12px; padding: 10px 12px; outline:none; min-width:0;
}
textarea{ width:100%; min-height:90px; resize: vertical; }
.quiet{ color: var(--muted); font-size: 12px; }
.error{ color: var(--err); background: rgba(255,107,107,.1); border: 1px solid rgba(255,107,107,.25); border-radius: 12px; padding: 10px 12px; font-size: 13px; display:none; }
.good{ color: var(--ok); }
.warn{ color: var(--warn); }
.share{
display:grid; grid-template-columns: 180px 1fr; gap:16px; align-items:center;
border:1px dashed var(--border); border-radius:12px; padding:12px;
}
@media (max-width: 560px){ .share{ grid-template-columns:1fr; } }
#qrCanvas{ width:180px; height:180px; background:#fff; border-radius:12px; }
.linkline{ display:flex; gap:8px; align-items:center; margin-top:8px; }
.link{ flex:1; overflow:auto; white-space:nowrap; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size:12px; background:#0b0f1f; border:1px solid var(--border); padding:8px 10px; border-radius:10px;}
.videos{ position: relative; background:#0b0f1f; border:1px solid var(--border); border-radius:12px; ov.........完整代码请登录后点击上方下载按钮下载查看
















网友评论0