让æä»¬å¼å§ä¸ºæä»¬åºäº WebRTC ççµè¯åºç¨ç¨åºå»ºç«åºç¡ã
é¦å
ï¼å¨ä½ çæ¬å°æä»¶ç»æä¸æ¾å°ä¸ä¸ªåéçä½ç½®ï¼ç¶åè¿è¡ mkdir audio_app
ï¼ç¶åä½¿ç¨ cd audio_app
å建ä¸ä¸ªå
å«ä½ çåºç¨ç¨åºçç®å½å¹¶è¿å
¥å
¶ä¸ã
æ¥ä¸æ¥ï¼éè¿è¿è¡ yarn init
å建ä¸ä¸ªæ°çåºç¨ç¨åºãæç
§æç¤ºæä¾é¡¹ç®åç§°ãçæ¬ãæè¿°çä¿¡æ¯ã
ç¶åï¼ä½¿ç¨ä»¥ä¸å½ä»¤å®è£ æéçä¾èµé¡¹ï¼
Peer ç¨äºå¯¹çæå¡å¨ï¼è PeerJS ç¨äºè®¿é® PeerJS API åæ¡æ¶ãå®è£
宿ä¾èµé¡¹åï¼ä½ ç package.json
åºè¯¥ç±»ä¼¼äºä»¥ä¸å
容ï¼
{
"name": "audio_app",
"version": "1.0.0",
"description": "An audio app using WebRTC",
"scripts": {
"start": "node server.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "Lola Odelola",
"license": "MIT",
"dependencies": {
"express": "^4.17.1",
"peer": "^0.5.3",
"peerjs": "^1.3.1"
}
}
å®æè®¾ç½®åï¼ä½ éè¦å°ä»¥ä¸ HTML å CSS æä»¶å¤å¶å°é¡¹ç®æä»¶å¤¹çæ ¹ç®å½ä¸ãä½ å¯ä»¥å°è¿ä¸¤ä¸ªæä»¶å½å为 index
ï¼å æ¤ HTML æä»¶å°æ¯ index.html
ï¼CSS æä»¶å°æ¯ index.css
ã卿¥ä¸æ¥çæç« ä¸ï¼ä½ ä¸éè¦å¯¹è¿äºæä»¶è¿è¡å¤ªå¤ä¿®æ¹ã
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Lola ç Web çµè¯ï¼</title>
<meta
property="og:description"
content="å°æ¨çè®¡ç®æºæå°å°æ¨ç设å¤ä¸ä»¥ç¨ä½çµè¯æºæè¯å¨" />
<!-- 导å
¥ç½é¡µçæ ·å¼è¡¨ -->
<link rel="stylesheet" href="/index.css" />
<!-- 导å
¥ javascript -->
<script src="script.js" defer></script>
<script src="https://unpkg.com/peerjs@1.3.1/dist/peerjs.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/davidshimjs-qrcodejs@0.0.2/qrcode.min.js"></script>
</head>
<body>
<div class="container">
<h1>ç»æåæçµè¯</h1>
<p id="cast-status" class="big">è¿çº¿ä¸â¦â¦</p>
<p>请使ç¨è³æºï¼</p>
<button class="call-btn">å¼å«</button>
<section class="call-container" hidden>
<div class="audio-container">
<p>æ¨å·²èªå¨éé³ï¼è¯·åæ¶éé³ï¼</p>
<audio controls id="remoteAudio" muted="true"></audio>
<audio controls id="localAudio" muted="true"></audio>
</div>
<button class="hangup-btn">ææ</button>
</section>
</div>
<section class="modal" hidden>
<div id="close">å
³é</div>
<div class="inner-modal">
<label>请æä¾æ¨æåçè®¾å¤ ID</label>
<input placeholder="è¾å
¥æ¨æåçè®¾å¤ ID" aria-colcount="10" />
<button class="connect-btn">è¿çº¿</button>
</div>
</section>
</body>
</html>
*,
*:before,
*:after {
box-sizing: border-box;
}
body {
color: darkslategrey;
display: flex;
align-items: center;
justify-content: center;
background: antiquewhite;
}
h1 {
font-size: 6rem;
letter-spacing: 0.2rem;
margin-bottom: auto;
}
p {
text-align: center;
font-size: 2rem;
}
button {
background-color: light-dark(white, black);
padding: 1rem 10rem;
border-radius: 3rem;
border: none;
cursor: pointer;
}
.call-btn {
background-color: darkslategrey;
color: antiquewhite;
font-size: 3rem;
margin-left: 7rem;
}
.hangup-btn {
background-color: darkred;
color: white;
font-size: 1.5rem;
margin-left: 6rem;
margin-top: 4rem;
}
.modal {
padding: 5rem;
background-color: whitesmoke;
border-radius: 2rem;
width: 40rem;
height: 20rem;
}
.inner-modal {
text-align: center;
}
.modal label {
font-size: 1.5rem;
}
.modal input {
margin: 1rem 7rem 3rem;
display: block;
padding: 1rem;
border-radius: 3rem;
box-shadow: 0 0 15px 4px rgba(0, 0, 0, 0.19);
border: none;
width: 50%;
}
.connect-btn {
background-color: #0c1d1d;
color: whitesmoke;
font-size: 1.5rem;
}
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4