webrtc网页代码分析一

文档结构

<!doctype html>
<html lang="en">
  <head>
    ...
  </head>
  <body>
    ...
  </body>
</html>

  • 文档类型声明():声明文档使用HTML5标准。
  • html标签:设置文档的语言为英语(lang=\"en\")。
  • head标签:包含元数据、样式、外部链接等,定义网页的头部信息。
  • body标签:页面的主体部分,包含所有网页内容。

head标签

字符集和窗口设置

<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">

meta标签:用于定义页面的字符集、视口设置、作者信息等。

  • charset=\\"utf-8\\":指定字符编码为UTF-8,确保网页能够正确显示多种语言的字符。
  • viewport 设置:用于响应式设计,确保页面在不同设备上显示良好。width=device-width 表示页面宽度等于设备的屏幕宽度,initial-scale=1 表示初始缩放比例为 1。

外部资源引入

<script src="https://unpkg.com/mqtt@4.1.0/dist/mqtt.min.js"></script>
<script src="https://kit.fontawesome.com/8c8bbe3334.js" crossorigin="anonymous"></script>

  • MQTT库:引入了 MQTT JavaScript 客户端库(版本 4.1.0)。MQTT 是一种轻量级的消息发布/订阅协议,通常用于 IoT(物联网)应用。这表明页面可能涉及到实时消息传递或设备间通信。
  • FontAwesome图标库:引入了 FontAwesome 的 JavaScript 库,用于提供图标支持。crossorigin=\"anonymous\" 允许浏览器在不发送凭据的情况下访问该资源。

CSS样式

style标签包含了许多样式规则,以下是主要部分的分析。

全局设置

html {
  font-family:"Calibri", sans-serif;
  box-sizing: border-box;
}

*, *:before, *:after {
  box-sizing: inherit;
}

  • font-family: \"Calibri\", sans-serif;:设置了页面字体为 \"Calibri\",如果不支持则使用 sans-serif。
  • box-sizing: border-box;:使得所有元素的 padding 和 border 都包含在 width 和 height 的计算中,避免了布局问题。

响应式设计

@media screen and (max-width: 650px) {
  .column {
    width: 100
    display: block;
  }
}

使用 @media 媒体查询来调整页面布局。在屏幕宽度小于或等于 650px 时,将 .column 类的元素的宽度设置为 100

卡片样式和容器

.card {
  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
}

.container {
  position: relative;
  text-align: center;
  color: white;
}

  • .card:为卡片元素设置了一个阴影效果,使其在页面上看起来更立体。
  • .container:设置容器为相对定位,并使文本居中。文本颜色为白色。

按钮样式

.title {
  color: grey;
}

.bottom-left, .top-left, .top-right, .bottom-right {
  position: absolute;
  padding: 10px;
}

.button {
  border: none;
  outline: 0;
  display: inline-block;
  padding: 8px;
  color: white;
  background-color: #000;
  text-align: center;
  cursor: pointer;
}

.button:hover {
  background-color: #555;
}

  • .title:为标题设置灰色字体颜色。
  • .bottom-left, .top-left, .top-right, .bottom-right:为定位在四个角的元素提供了绝对定位样式。通过定位,它们可以被放置在容器的四个角。
  • .button:定义了按钮的基本样式,包括无边框、白色文字、黑色背景以及光标指针。hover 样式将按钮背景色更改为灰色(#555)。

导航栏样式

.topnav {
  overflow: hidden;
  background-color: #333;
}

.topnav a {
  float: left;
  display: block;
  color: #f2f2f2;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
  font-size: 17px;
}

.topnav a:hover {
  background-color: #ddd;
  color: black;
}

.topnav a.active {
  background-color: #04AA6D;
  color: white;
}

.topnav:定义了一个水平的导航栏,背景色为深灰色,且隐藏溢出的内容。
.topnav a:定义了导航栏中每个链接的样式,包括文本颜色、对齐方式、内边距等。
.topnav a:hover:设置链接在悬停时背景色变为浅灰色,文字颜色变为黑色。
.topnav a.active:当链接处于 \"活动\" 状态时,背景色变为绿色(#04AA6D),文字变为白色。

按钮样式

.btn-group button {
  margin-top: -4px;
  background-color: white;
  border: 1px solid white;
  color: black;
  padding: 10px 24px;
  cursor: pointer;
}

.btn-group button:hover {
  background-color: #f2f2f2;
}

.btn-group button:定义了按钮组中的按钮样式,包括背景色为白色,边框为白色,文本为黑色,且在悬停时背景色变为浅灰色。

普通按钮样式

.btn {
  background-color: DodgerBlue;
  border: none;
  color: white;
  padding: 12px 16px;
  font-size: 16px;
  cursor: pointer;
}

.btn:hover {
  background-color: RoyalBlue;
}

.btn:定义了一个蓝色的按钮,包含内边距、字体颜色等样式。在悬停时,按钮的背景色会变成更深的蓝色(RoyalBlue)。

body标签

body包含页面部分显示部分和script部分。

页面内容

导航栏区域

<div class="topnav" id="myTopnav">
  <a href="#">Peer Project</a>
  <a href="https://ko-fi.com/sepfy95" style="float: right">Sponsor</a>
  <a href="https://github.com/sepfy/pear" style="float: right">Github</a>
</div>

这是一个顶部导航栏(topnav)元素,包含三个链接:

  • Peer Project:这是主页面的链接,指向当前页面(#)。可以是应用的标题或者主页面链接。
  • ko-fi.com:链接到 ko-fi.com,可能是用于捐赠或支持项目。
  • github: GitHub 项目的链接,用户可以访问该链接查看源代码或参与项目。

这些链接使用了 float: right 样式,使得“Sponsor”和“Github”链接都被浮动到右侧,而“Peer Project”链接则停留在左侧。

音视频展示区域

//这是包含视频内容的容器
<div class="column" id="video">
  //用来包裹所有显示视频、音频及空间的内容,创建一个卡片式布局
  <div class="card">
    //容器内放置了视频和音频元素,包含一些展示信息的<p>标签
    <div class="container">
      // 媒体元素信息
        //图片元素,在没有视频流可用时显示,他的id是imgStream
      <img id="imgStream" style="width: 100
        //video元素,用于显示视频流,display样式为none,默认视频流不可见。通过js控制
      <video id="videoStream" playsinline style="width:100
       //audio元素,用于播放音频流的,默认被隐藏,通过js控制。
      <audio id="audioStream" style="display: none"></audio>
       //用于设置设备信息
        //段落元素用于显示设备信息,这里是device id
      <p class="top-left" id="device-id"></p>
        //段落元素,用于显示设备当的状态。
      <p class="top-right" id="status">waiting</p>
    </div>
     //控制按钮,包括音量、录音、旋转、暂停
    <div class="btn-group" style="width:100
      //控制音量的按钮,调用onVolume函数,图标为fa-solid fa-volume-xmark
      <button style="width:25
      //控制是否静音,调用onMuted函数,图标为fa-solid fa-microphone-slash
      <button style="width:25
      //用于旋转视频,点击调用onRotate函数,图标为solid fa-arrows-rotate
      <button style="width:25
      //用于停止视频或音频流,点击调用onStop函数,图标为fa-solid fa-circle-stop
      <button style="width:25
    </div>
  </div>
</div>