webrtc视频会议学习(三)

news2024/12/1 4:30:59

文章目录

    • 关联:
    • 源码
    • 搭建
      • coturn服务器
      • nginx配置
      • ice配置
      • 需服务器要开放的端口
    • 效果

关联:

webrtcP2P音视频通话(一)

webrtcP2P音视频通话(二)

webrtc视频会议学习(三)

源码

  • WebRTC视频 - B站

  • 源码:video-meeting 在gitee的代码

  • vite + vue3本地测试配置ssl自签名证书,开启https,并可以开启ws,才知道这样可以同时转发本地的https和wss请求

  • 实现在两个PC之间在公网上通过浏览器视频会议,需要搭建coturn服务器,测试手机浏览器暂不可用。

搭建

coturn服务器

  1. 在服务器上,搭建coturn服务器,参考:WebRTC实现双端音视频聊天(Vue3 + SpringBoot)
    下载coturn的源码,
    解压,
    /configure --prefix=/usr/local/coturn
    make && make install
    使用下面的配置文件完全替换掉/usr/local/coturn/etc/turnserver.conf配置文件

    
    # 网卡名
    relay-device=eth0
    #内网IP
    listening-ip=172.17.23.234
    listening-port=3478
    #内网IP,加密访问配置
    relay-ip=172.17.23.234
    tls-listening-port=5349
    # 外网IP
    external-ip=119.23.61.24
    relay-threads=500
    #打开密码验证
    lt-cred-mech
    cert=/usr/local/coturn/etc/turn_server_cert.pem
    pkey=/usr/local/coturn/etc/turn_server_pkey.pem
    min-port=49152
    max-port=65535
    #设置用户名和密码,创建IceServer时使用
    user=user:123456
    # 外网IP绑定的域名
    realm=119.23.61.24
    # 服务器名称,用于OAuth认证,默认和realm相同,部分浏览器本段不设可能会引发cors错误。
    server-name=119.23.61.24
    # 认证密码,和前面设置的密码保持一致
    cli-password=123456
    
  2. 启动coturn:./turnserver -o -a -f -c ../etc/turnserver.conf

  3. 测试coturn:Trickle ICE 测试页,出现srflx和relay就表示成功了
    在这里插入图片描述

nginx配置

nginx需要配置证书,使用https才能调用浏览器提供的webrtc接口,生成过程参考:docker&dockerfile&docker-compose操作&nginx,这里配置的是自签名证书,所以会有不安全的提示。
在这里插入图片描述

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;
    
    client_max_body_size     50m;
    client_body_buffer_size  10m; 	  
    client_header_timeout    1m;
    client_body_timeout      1m;
    
    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_comp_level  4;
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    gzip_vary on;
    
    
    server {
        listen       80;
        server_name  localhost;
        rewrite ^(.*)$	https://$host$1	permanent;
    }
    
    # HTTPS server
    server {
        listen       443 ssl;
        server_name  localhost;

        ssl_certificate      /usr/local/nginx/cert/server.crt;
        ssl_certificate_key  /usr/local/nginx/cert/server.key;

        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        location / {
            root   /usr/local/nginx/html/meeting/dist;
            index  index.html index.htm;
            try_files $uri $uri/ /index.html;
        }
        
        location ^~ /api/ {
            proxy_pass http://119.23.61.24:9090;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
       
        location /api/websocket/ {
       
           proxy_redirect off;
           
           # 如果location那里使用了正则表达式,则这里就不能写uri路径,就是端口后面不能写其它的了,否则校验不通过  
           proxy_pass http://119.23.61.24:9090;
           
           proxy_http_version 1.1;
           # 如果不配置这个 如果客户端一直不发送消息过来,经测试默认1分钟之后连接会关闭。所以需要心跳机制。
           proxy_read_timeout 36000s;
           proxy_send_timeout 36000s;
           
           # 升级协议头 websocket
           # 浏览器会携带Connection头: Upgrade;Upgrade头: websocket;
           proxy_set_header Connection "Upgrade";
           proxy_set_header Upgrade $http_upgrade;
           
           # proxy_set_header Host $host;
           proxy_set_header X-Real_IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto $scheme; 
       }
        
    }
}

ice配置

const iceConfig = {
  "iceServers": [
      {
          "urls": [
              "stun:119.23.61.24:3478"
          ],
          "username": "",
          "credential": ""
      },
      {
          "urls": [
              "turn:119.23.61.24:3478"
          ],
          "username": "user",
          "credential": "123456"
      }
  ],
  "iceTransportPolicy": "all"
}

需服务器要开放的端口

注意3478的tcp和udp都需要放开
在这里插入图片描述

效果

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2250870.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mac上的建议xftp 工具

mac上的建议xftp 工具 最近使用mac比较频繁了,但是第一次重度使用mac里面有很多的工具都是新的,有的window版本的工具无法使用。 xftp 的平替 Cyberduck 从它的官网上下载是免费的,但是如果使用 Apple store 要花费198呢。这不就剩下一大笔…

paimon的四种changelog模式(1)-input模式

环境创建 CREATE CATALOG fs_catalog WITH (typepaimon,warehousefile:/data/soft/paimon/catalog );USE CATALOG fs_catalog;drop table if exists t_changelog_input;CREATE TABLE t_changelog_input (age BIGINT,money BIGINT,hh STRING,PRIMARY KEY (hh) NOT ENFORCED )WIT…

【趣味】斗破苍穹修炼文字游戏HTML,CSS,JS

目录 图片展示 游戏功能 扩展功能 完整代码 实现一个简单的斗破苍穹修炼文字游戏,你可以使用HTML、CSS和JavaScript结合来构建游戏的界面和逻辑。以下是一个简化版的游戏框架示例,其中包含玩家修炼的过程、增加修炼进度和显示经验值的基本功能。 图片…

一款现代化的轻量级跨平台Redis桌面客户端

Tiny RDM‌ 是一款现代化的轻量级跨平台Redis桌面客户端,专为开发和运维人员设计,旨在提供便捷、高效的Redis操作体验。它支持macOS、Windows和Linux操作系统,安装包大小约为10MB,具有广泛的兼容性和便携性‌。 功能特性 ‌轻量级…

【大数据学习 | Spark调优篇】Spark之JVM调优

1. Java虚拟机垃圾回收调优的背景 如果在持久化RDD的时候,持久化了大量的数据,那么Java虚拟机的垃圾回收就可能成为一个性能瓶颈。因为Java虚拟机会定期进行垃圾回收,此时就会追踪所有的java对象,并且在垃圾回收时,找…

《使用Python进行数据挖掘:理论、应用与案例研究》

嘿,今天我要给你们介绍一本使用Python进行数据挖掘的好书。这本书是由吴迪博士撰写的,他是雷曼学院商学院的助理教授,也是数据科学的实战派。 在这个时代,数据多得让人眼花缭乱,要从中找出有用的信息,那可不…

C++之C++11新特性(三)--- 智能指针

目录 一、智能指针 1.1 为什么需要智能指针 1.2 内存泄漏 1.2.1 内存泄漏的基本概念 1.2.2 内存泄漏的分类 1.2.3 如何避免内存泄漏 1.3 智能指针的使用及其原理 1.3.1 RAII 1.3.2 智能指针的基本原理 1.3.3 auto_ptr 1.3.4 unique_ptr 1.3.5 shared_ptr 1.3.6 sha…

Flink学习连载文章8--时间语义

Time的分类 (时间语义) EventTime:事件(数据)时间,是事件/数据真真正正发生时/产生时的时间 IngestionTime:摄入时间,是事件/数据到达流处理系统的时间 ProcessingTime:处理时间,是事件/数据被处理/计算时的系统的时间 EventTime的重要性 假设,你正在去往地下停…

【Docker】部署nginx

docker部署nginx docker部署nginx镜像加速器1、拉取nginx镜像2、创建nginx容器3、浏览器访问 docker部署nginx 镜像加速器 备注:阿里云镜像加速地址 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors可用的镜像源: https://https://reg…

github webhooks 实现网站自动更新

本文目录 Github Webhooks 介绍Webhooks 工作原理配置与验证应用云服务器通过 Webhook 自动部署网站实现复制私钥编写 webhook 接口Github 仓库配置 webhook以服务的形式运行 app.py Github Webhooks 介绍 Webhooks是GitHub提供的一种通知方式,当GitHub上发生特定事…

Rust SQLx CLI 同步迁移数据库

上文我们介绍了SQLx及SQLite,并介绍了如何使用代码同步迁移数据库。本文介绍Sqlx cli 命令行工具,介绍如何安装、使用,利用其提供的命令实现数据表同步迁移。Java生态中有flyway, sqlx cli 功能类似,利用命令行工具可以和其他语言…

论文笔记-WWW2024-ClickPrompt

论文笔记-WWW2024-ClickPrompt: CTR Models are Strong Prompt Generators for Adapting Language Models to CTR Prediction ClickPrompt: CTR模型是大模型适配CTR预测任务的强大提示生成器摘要1.引言2.预备知识2.1传统CTR预测2.2基于PLM的CTR预测 3.方法3.1概述3.2模态转换3.…

解析客服知识库搭建的五个必要性

在当今竞争激烈的商业环境中,客服知识库的搭建已成为企业提升服务质量、优化客户体验的重要手段。一个完善的客服知识库不仅能帮助企业高效管理客户服务流程,还能显著提升客户满意度和忠诚度。以下是搭建客服知识库的五个必要性: 1. 提升服务…

css—轮播图实现

一、背景 最近和朋友在一起讨论的时候,我们提出了这样的一个提问,难道轮播图的效果只能通过js来实现吗?经过我们的一系列的争论,发现了这是可以通过纯css来实现这一效果的,CSS轮播图也是一种常见的网页展示方式&#x…

40分钟学 Go 语言高并发:【实战课程】工作池(Worker Pool)实现

工作池(Worker Pool)实战实现 一、知识要点概述 模块核心功能实现难点重要程度池化设计管理协程生命周期并发安全、资源控制⭐⭐⭐⭐⭐动态扩缩容根据负载调整池大小平滑扩缩、性能优化⭐⭐⭐⭐任务分发合理分配任务到worker负载均衡、任务优先级⭐⭐⭐…

深度学习3:数据预处理使用Pandas与PyTorch的实践

文章目录 导读一、主题与提纲1.1. 读取数据集1.2. 处理缺失值1.3. 转换为张量格式二、结论本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观事实描…

004 MATLAB数值微积分

01 函数的极值点 求解一元函数在区间(x1,x2)中极小值点: xfminbnd(fun,x1,x2)求解初始向量为x0的多元函数极小值点x和对应的极值y [x,y]fminsearch(fun,x0)02 微积分 1.数值微分: 一次微分: diff(x) 若x是一个向量,则返回[x(…

重塑用户体验!快手电商智能巡检平台的实践与探索

导读:随着科技的飞速发展,人工智能(AI)已经成为推动各行各业创新的重要力量。特别是在用户体验方面,AI 技术的应用不仅解决了许多传统问题,还带来了全新的交互方式和更高的用户满意度。本文将从快手电商B端…

C# 结构体

文章目录 前言一、结构体的定义与基本使用(一)定义结构体(二)结构体的使用示例 二、C# 结构的特点(一)丰富的成员类型(二)构造函数相关限制与特性(三)继承方面…

实现Linux平台自定义协议族

一 简介 我们常常在Linux系统中编写socket接收TCP/UDP协议数据,大家有没有想过它怎么实现的,如果我们要实现socket接收自定义的协议数据又该怎么做呢?带着这个疑问,我们一起往下看吧~~ 二 Linux内核函数简介 在Linux系统中要想…