首页 > 其他分享 >第4章 带你快速入门WebRTC技术

第4章 带你快速入门WebRTC技术

时间:2023-12-08 11:37:15浏览次数:36  
标签:http 入门 err nil fmt WebRTC staticUrl 快速 port

4-3 屏幕共享项目-用golang搭建静态资源服务

这段代码是一个使用Go语言编写的简单的HTTP和HTTPS服务器。下面是对代码中涉及的知识点和语法格式的详细解释

package main

import (
	"fmt"
	"net/http"
)
  • package main:这行代码指定了当前文件所属的包是main,表示这是一个可执行程序的入口文件。

  • import:这个关键字用于导入需要使用的包,本例中导入了fmt和net/http包。

func startHttp(port string) {
	fmt.Printf("Start http port: %s\n", port)
	err := http.ListenAndServe(port, nil)
	if err != nil {
		fmt.Println(err)
	}
}
  • func startHttp(port string) { ... }:这是一个函数定义,定义了一个名为startHttp的函数,它接受一个字符串类型的参数port。

  • fmt.Printf("Start http port: %s\n", port):使用Printf函数打印一条启动HTTP端口的消息。

  • http.ListenAndServe(port, nil):使用http.ListenAndServe函数启动一个HTTP服务器,监听指定的端口。第一个参数是要监听的端口,第二个参数是处理HTTP请求的处理器(在本例中使用nil表示使用默认的处理器)。

  • if err != nil { ... }:如果启动HTTP服务器出错,则打印错误信息。

func startHttps(port, cert, key string) {
	fmt.Printf("Start https port: %s\n", port)
	err := http.ListenAndServeTLS(port, cert, key, nil)
	if err != nil {
		fmt.Println(err)
	}
}
  • func startHttps(port, cert, key string) { ... }:这是一个函数定义,定义了一个名为startHttps的函数,它接受三个字符串类型的参数port、cert和key。

  • fmt.Printf("Start https port: %s\n", port):使用Printf函数打印一条启动HTTPS端口的消息。

  • http.ListenAndServeTLS(port, cert, key, nil):使用http.ListenAndServeTLS函数启动一个HTTPS服务器,监听指定的端口,并使用指定的证书文件和私钥文件进行TLS加密通信。第一个参数是要监听的端口,第二个参数是证书文件的路径,第三个参数是私钥文件的路径,第四个参数是处理HTTPS请求的处理器(在本例中使用nil表示使用默认的处理器)。

  • if err != nil { ... }:如果启动HTTPS服务器出错,则打印错误信息。

func main() {
	staticUrl := "/static/"
	fs := http.FileServer(http.Dir("./static"))
	http.Handle(staticUrl, http.StripPrefix(staticUrl, fs))
	go startHttp(":8080")
	startHttps(":8081", "./conf/fullchain.pem", "./conf/privkey.pem")
}
  • func main() { ... }:这是程序的入口函数。

  • staticUrl := "/static/":定义了一个名为staticUrl的字符串变量,它保存了URL的前缀。

  • fs := http.FileServer(http.Dir("./static")):创建了一个文件服务器,使用http.Dir函数指定根目录为"./static"。

  • http.Handle(staticUrl, http.StripPrefix(staticUrl, fs)):将URL前缀与文件服务器绑定,使用http.Handle函数来注册URL和处理器的对应关系。http.StripPrefix函数用于剥去URL前缀,以便正确地定位文件。

  • go startHttp(":8080"):使用go关键字启动一个新的Go协程,异步地启动HTTP服务器并监听端口8080。

  • startHttps(":8081", "./conf/fullchain.pem", "./conf/privkey.pem"):启动HTTPS服务器并监听端口8081,使用"./conf/fullchain.pem"作为证书文件,"./conf/privkey.pem"作为私钥文件。

代码
package main

import (
	"fmt"
	"net/http"
)

func startHttp(port string) {
	fmt.Printf("Start http port: %s\n", port)
	err := http.ListenAndServe(port, nil)
	if err != nil {
		fmt.Println(err)
	}
}

func startHttps(port, cert, key string) {
	fmt.Printf("Start https port: %s\n", port)
	err := http.ListenAndServeTLS(port, cert, key, nil)
	if err != nil {
		fmt.Println(err)
	}
}

func main() {
	staticUrl := "/static/"
	fs := http.FileServer(http.Dir("./static"))
	http.Handle(staticUrl, http.StripPrefix(staticUrl, fs))
	go startHttp(":8080")
	startHttps(":8081", "./conf/fullchain.pem", "./conf/privkey.pem")
}

4-5 屏幕共享项目-设计UI界面

代码
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>1v1屏幕共享示例</title>

    <style type="text/css">
        video {
            width: 320px;
            height: 240px;
            border: 1px solid black;
        }
        
        button {
            background-color: #d84a38;
            border: none;
            color: white;
            margin: 0 1em 0 0;
            padding: 0.5em 0.7em 0.6em 0.7em;
        }
    </style>
</head>

<body>
    <h3>1v1屏幕共享示例</h3>
    
    <div>
        <video id="localVideo" autoplay controls><
        /video>
        <video id="remoteVideo" autoplay controls></video>
    </div>
    
    <button id="btnStartPush">开始推流</button>
    <button id="btnStopPush">停止推流</button>
    <button id="btnStartPull">开始拉流</button>
    <button id="btnStopPull">停止拉流</button>
    
    <script src="/static/js/adapter.js"></script>
    <script src="/static/js/screen_share.js"></script>
</body>
</html

这段代码是一个简单的HTML页面,用于展示一个1v1屏幕共享示例。下面是对代码中涉及的知识点和语法格式的详细解释:

  • :这是HTML5的文档类型声明,指定当前文档使用HTML5标准。
  • ...:标签包括了整个HTML文档的内容。
  • <head>...</head>:<head>标签包含了文档的头部信息,如字符编码、标题和样式表等。
  • :标签用于指定文档的字符编码为UTF-8,确保正确显示中文字符和其他特殊字符。

  • <title>1v1屏幕共享示例</title>:<title>标签用于设置文档的标题,显示在浏览器的标题栏中。

标签:http,入门,err,nil,fmt,WebRTC,staticUrl,快速,port
From: https://www.cnblogs.com/Gal0721/p/17884792.html

相关文章

  • SAP数据一键拉取!利用零代码ETL工具快速实现数据同步
    当我们谈到SAP数据读取以及提取、转换、加载(ETL)工作时,选择适当的方法和工具对于企业来说至关重要。本文将为您介绍如何通过SAP函数读取数据,并推荐一些强大的ETL工具,以帮助您更好地处理和整合SAP数据。如何解锁SAP数据的力量?SAP系统在现代企业中扮演着关键的角色,管理着财务、供......
  • go-zero 开发入门-API服务开发示例
    接口定义定义API接口文件接口文件add.api的内容如下:syntax="v1"info(title:"API接口文件示例"desc:"演示如何编写API接口文件"author:"一见"date:"2023年12月07日"version:"v1")typeAddReq......
  • go-zero开发入门之API网关开发
    开发一个API网关,代理https://www.cnblogs.com/aquester/p/17882070.html中的RPC服务。网关完整源代码//file:main.gopackagemainimport("flag""fmt""github.com/zeromicro/go-zero/core/conf""github.com/zeromicro/go-z......
  • 快速认识什么是:Kubernetes
    每次谈到容器的时候,除了Docker之外,都会说起Kubernetes,那么什么是Kubernetes呢?今天就来一起学快速入门一下Kubernetes吧!希望本文对您有所帮助。Kubernetes,一种用于管理和自动化云中容器化工作负载的工具。想象一下你有一个管弦乐队,将每个音乐家视为一个码头容器。为了创作优......
  • 大数入门(2)——扩展的基本列与多元Veblen函数
    扩展——指数不动点进一步的,我们可以考虑\(\omega^{\omega^{\omega^{...}}}\)仿照\(\omega\)的定义,我们定义\(\epsilon_0=\sup\{\omega,\omega^\omega,\omega^{\omega^\omega},...\}\)另一种更为深刻的理解方式是:\(\epsilon_0\)是\(\alpha\rightarrow\omega^\alpha\)的第一个指......
  • HarmonyOS 开发入门(三)
    HarmonyOS开发入门(三)日常逼逼叨在开发入门(一)和开发入门(二)中我们描述了HarmonyOS开发的语言ArKTs以及Ts简单的入门级语法操作以及开发环境的搭建,接下来我们进入第三部分:HarmonyOS基础组件的开发,有任何说的不合理的地方,希望各位看官老爷批评指正......
  • 快速认识什么是:Docker
    Docker,一种可以将软件打包到容器中并在任何环境中可靠运行的工具。但什么是容器以及为什么需要容器呢?今天就来一起学快速入门一下Docker吧!希望本文对您有所帮助。假设您使用Cobol构建了一个在某种奇怪风格的Linux上运行的应用程序。您想与您的朋友分享这个应用程序,但他有一个......
  • 2-SAT 问题入门
    前言1.本文在非代码部分用\(T\)代替\(true\),\(F\)代替\(false\)。2.本文对于具体的问题解答,只涉及P4782【模板】2-SAT问题,其他类型(如连接符号为“与”、“异或”)暂不涉及。3.请预习强连通相关知识。4.本文中的“到达”和“可达”指由\(i\)点经过一些单向边后可以到达......
  • tiktok电商入门完整教程,新手小白一定要看
    随着短视频的兴起,越来越多的人开始关注如何在TikTok上开展电商业务。对于新手小白来说,了解如何入门并快速掌握TikTok电商运营技巧至关重要。本文将为您提供一份完整的TikTok电商入门教程,帮助您从零开始构建自己的电商业伴来详细了解一下吧。一、了解TikTok电商模式TikTok电商主要是......
  • 算法【快速排序】
    算法【快速排序】快速排序。选择一个作为比较的元素,这里我们选择首元素,这个元素我叫他‘比较元素’;前后两个指针(其实是索引变量)同时往后和往前进行遍历,开头的指针遇到比‘比较元素’大的元素停下来(空循环体的循环即可实现),末尾的指针往前遍历,遇到比‘比较元素’小的元素停下来;两个......