手把手教你10分钟快速搭建webrtc

1 篇文章 1 订阅
订阅专栏
  • 先上地址

android:

GitHub - logan39522361/webrtc_android: A webrtc android demo.

ios:

目前由于缺少mac与ios设备,所以无法开展,后续补上

 pc端(h5)与信令服务器(java):

GitHub - logan39522361/webrtc_signaling_server: A webrtc demo,signaling funcion.

  • 本项目实现情况:

1、使用coturn(谷歌官方STUN服务)作为STUN服务,完成NAT检测与流媒体中继

2、使用自研信令服务器(java springboot)

3、客户端目前开发了安卓与h5(chrome),实现了app to app、app to pc、pc to pc的点对点通信,还没有实现多人视频

ps:

1、pc的h5使用谷歌自带的adapter.js可以使用屏幕共享功能,在有摄像头或者麦克风的情况下也可以实现视频通话

2、目前pc自测过chrome支持良好,理论上火狐应该也行,safari应该需要打开一些设置才行(缺少苹果设备无法测试)

  • webrtc介绍
  • I、webrtc是啥

webrtc的前世今生

大白话就是两大点:

1、webrtc:是由谷歌主导且开源的流媒体传输、编解码的框架。

2、传输方式:在非对称型NAT的情况下,客户使用自己的带宽实现点对点流媒体传输(降低服务器压力),在对称型NAT的情况下使用服务器中继传输。

  • II、webrtc主要技术栈

1、NAT类型检测服务器

2、流媒体中继服务器

2、信令交换服务器

3、客户端流媒体编解码(谷歌买了一家专门做音视频的编解码公司,并开源了其代码,一般app使用这个公司的c库实现,谷歌浏览器自带这个c库)

  • 实现具体步骤

环境:

        服务器:centos7.9 jdk1.8

        pc端:win10 jdk1.8

        安卓端:android9.0

  • 具体步骤01 coturn服务器搭建

 1、安装依赖

yum install git && yum install gcc && yum install gcc-c++ && yum install openssl && yum install openssl-devel && yum install libevent2 && yum install libevent-devel

2、获取源码

wget  https://github.com/coturn/coturn/archive/4.5.1.1.tar.gz

3、编译与安装

tar -zxvf 4.5.1.1.tar.gz && cd coturn-4.5.1.1 && ./configure && make && make install

4、修改配置

cp /usr/local/etc/turnserver.conf.default /usr/local/etc/turnserver.conf

vim /usr/local/etc/turnserver.conf

5、设置文件内容:

listening-port=3478

listening-ip=【你的centos服务器局域网ip】

listening-device=eth0

tls-listening-port=5349

external-ip=【你的外部ip】

user=admin_test:123456

cli-password=123456

log-file=/app/logs/turn.log

pidfile=/app/logs/pid_turnserver

6、生成证书

cd /usr/local/etc/

openssl req -x509 -newkey rsa:2048 -keyout /usr/local/etc/turn_server_pkey.pem -out /usr/local/etc/turn_server_cert.pem -days 99999 -nodes

7、启动coturn

turnserver -o -a -f -v -r shenzhen -user=admin_test:123456 -c /usr/local/etc/turnserver.conf

8、安装完成后使用 ice测试,检测stun服务器是否启动成功(Chrome浏览器在测试的时候有问题,请用Firefox浏览器测试!)

        填写自己的服务器信息点击add Server

        然后点击gather

        出现done即表示成功

  • 具体步骤02 启动信令服务器

启动springboot即可

  • 具体步骤03 启动app与h5客户端进行通话
  • h5与h5通信(屏幕共享)

1、 打开信令服务器项目的other目录的webrtc_share.html ,修改 :

        ws_url 为你的websocket地址 

        ice_config 变量为你自己coturn的配置

2、打开两个 webrtc_share.html

        两个页面分别点击step01准备peer

        客户A输入客户B的id,客户A点击step02建立连接

3、效果如下:

  • app与h5通信(app摄像头与麦克风,h5为屏幕共享)

1、使用android studio打开安卓项目,修改 com.kiddo.webrtcdemo.cons.UrlCons   ws、http、stun、turn信息为你的配置

2、pc端打开webrtc_share.html 

        2.1 修改 :

                ws_url 为你的websocket地址 

                ice_config 变量为你自己coturn的配置

        2.2 然后,点击step01准备peer,记得一定要点击“分享系统中的音频”,因为sdp协议需要有对等关系,在屏幕共享这一块我还没改好兼容性,其实是可以不共享音频的,后续会进行优化

3、编译并打开app,刷新用户列表,点击呼叫即开始通话,如下:

 安卓端,效果如下:

pc端,效果如下: 

  • 走过的坑和一些题外话

1、app的实现底层是谷歌编译的c库,有两个版本:

        libjingle_peerconnection(已过时,ios用黑苹果亲测过有些功能已无法使用)

         GoogleWebRTC 目前安卓与ios都使用这个

2、sdp协议这一块大家一定要吃透,特别是有需要不同业务、不同终端情况下建立通信的情况

        比如pc端(h5)只使用麦克风与app端使用摄像头+麦克风进行通话时,如果h5是发起方(create offer),h5在getUserMedia之后,需要手动修改sdp,加上 addTransceiver("video", {direction: "recvonly"}); 使sdp里带有video信息

3、如果想使用动态密码的话,第4的配置要改成如下

listening-port=3478
listening-ip=【centos服务器局域网ip】
tls-listening-port=5349
external-ip=【外部公网ip】
lt-cred-mech
use-auth-secret
static-auth-secret=test
realm=beijing
log-file=/app/logs/turn.log
pidfile=/app/logs/turn_pid

启动指令改成如下

turnserver -o -a -f -v -r beijing -c /usr/local/etc/turnserver.conf

生成密码的java代码

生成用户名:

//过期时间360s
String turnUsername = System.currentTimeMillis() / 1000 + 7200 + ":" + userId;

生成密码:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class TurnPassWordUtil {

    private static final Logger logger = LoggerFactory.getLogger(TurnPassWordUtil.class);

    private static final String MAC_NAME = "HmacSHA1";
    private static final String ENCODING = "UTF-8";

    private static byte[] hmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception {
        byte[] data = encryptKey.getBytes(ENCODING);
        // 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
        SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);
        // 生成一个指定 Mac 算法 的 Mac 对象
        Mac mac = Mac.getInstance(MAC_NAME);
        // 用给定密钥初始化 Mac 对象
        mac.init(secretKey);

        byte[] text = encryptText.getBytes(ENCODING);
        // 完成 Mac 操作
        return mac.doFinal(text);
    }

    public static String getPassWord(String turnUsername) {
        try {
            return Base64Util.encodeByCommons(hmacSHA1Encrypt(turnUsername, "test"));
        } catch (Exception e) {
            logger.error("turn服务器密码加密失败: []", e);
        }
        return null;
    }
}

Webrtc系列三——Ubuntu 20.04上Apprtc服务搭建之一
louis的专栏
04-22 710
由于https://appr.tc已经不维护了,导致研究webrtc源代码变得不太方便。同时webrtc编译出来的AppRTCMobile也无法正常和浏览器进行一对一的实时通信,本人花了好长一些时间来解决这些问题,通过解决这些问题特写下这个文章,一方面起到记录使用,另一方面也可以作为他人参考使用,本文在Ubuntu 20.04.6 LTS上部署apprtc,使得两个chrome浏览器可以进行通信,也可以在webrtc for android的AppRTCMobile.apk和chrome浏览器进行通信
WebRTC服务器搭建
qq_52703909的博客
01-24 922
前言在前面的WebRTC介绍中我们已经介绍了WebRTC的编译以及成功地把WebRTCAndroid Studio中运行了起来,详情请猛击在后面的学习过程中,我们将进一步使用WebRTC实现Android端的实时通信对话。为了方便后续的开发和测试,今天我们来搭建WebRTC的服务器环境。安装环境笔者使用的云服务器是Ubuntu 16.04。需要在云服务器后台开放(出入规则)端口: 3478、8080、8089、80、4431、安装JDK2、安装node.js。
windows下webRTC服务器及测试环境搭建
06-18
里面包含搭建的详细说明文档,node-v12.18.0-x64安装包,可用的chrome浏览器版本等,已测可用。
webrtc Ubuntu环境使用Nodejs+Socket.io搭建webrtc信令服务器
知识共享,你我皆是知识的搬运工
03-27 4006
ubuntu环境使用nodejs搭建信令服务器
一对一WebRTC视频通话系列(六)——部署到公网
君莫笑lucky的博客
05-11 1030
本系列博客主要记录WebRtc实现过程中的一些重点,代码全部进行了注释,便于理解WebRTC整体实现。一对一WebRTC视频通话系列。
webrtc服务器开发--搭建环境
hugang的博客
04-08 501
【代码】webrtc核心架构--搭建环境。
WebRTC(九)简单的信令服务搭建
irainsa的博客
04-26 695
服务端收到“create or join”消息时,它会对房间里的人数进行统计,如果房间里没有人,则发送“created”消息;如果你是在本机上搭建的服务,则可以在浏览器中输入“localhost:2013”,然后在浏览器中新建一个 tab ,在里边再次输入“localhost:2013”。举个例子,假设 A 与 B 要进行音视频通信,那么 A 要知道 B 已经上线了,同样,B 也要知道 A 在等着与它通信呢。你也可以看看下面的例子,其中 S 表示服务器,C 表示客户端,它们是发送消息与接收消息的比对。
搭建WebRtc环境
02-24
这几天了解了一些知识后,决定使用HTML5新支持的WebRtc来作为视频通讯。客户端使用支持HTML5浏览器即可。服务器段需要提供两个主要的服务功能,一个是信令服务器(SignalingServer),一个是NAT穿透服务器(ICEServer)...
WebRTC零基础开发者程(纯净版)
01-18
本文中提供下载的《WebRTC 零基础开发者程》将以一个初学者的角度,从0开始逐步引导你掌握WebRTC开发的方方面面(当然,程中更多的是操作性的内容,具体到技术原理和实现,显然不是本程的讨论范畴)。
5分搭建一个WebRTC视频聊天
09-14
程将详细介绍如何在5分搭建一个WebRTC视频聊天系统。 ### 一、所需组件 1. **NAT穿透服务器(ICE Server)**:NAT(网络地址转换)穿透服务器是解决内网用户之间通信的关键。STUN(简单Traversal of User ...
WebRtc环境搭建(win10+vs2019)
qq_46603687的博客
07-07 970
VS2019+windows下编译webrtc
Windows下搭建nginx和rtspToWebRTC以及Windows程序添加为服务开机启动和后台运行
逍遥游的博客
07-20 2530
之前的rtsp转webrtc的服务很好用(https),测试使用效果都很好,而且由于Go的特性很容易将程序编译为跨平台的程序。由于高并发的需求,一般会搭建nginx服务,Linux和openwrt上都测试过命令直接安装运行nginx可行,这里在Windows下也做简单总结便于后续服务搭建在Windows上。接下来我们总结一下搭建stun服务的搭建和使用,自己有域名以及公网服务器的话可以贡献一下空闲的流量,没有公网服务器和域名也可以在局域网下用ip玩一下。httpshttpshttpshttps。...
基于WebRTC的音视频通话服务器搭建
吓成一坨兔子
12-03 2664
Webrtc服务器搭建后台项目地址 java项目:https://github.com/androidtencent/WebRtcJavaWeb NodeJs项目 : https://github.com/ddssingsong/webrtc_server 本搭建是基于centos 7.6 64位系统,系统恢复原始状态,重新装系统,确保人人都能搭建成功 如果系统安装了基础软件 如git ...
WebRTC多人会议室
Kilig__的博客
12-11 375
基于WebRTC技术的多人会议室项目完成功能:1.完成Web服务器与信令服务器开发;2.完成STUN/TURN服务器的搭建
【前后端的那些事】2万字详解WebRTC + 入门demo代码解析
qq_62835094的博客
02-11 1606
WebRTC是一项允许网页浏览器进行实时视频通信的技术标准。旨在实现在浏览器之间直接进行点对点的音频、视频以及数据共享,无需安装任何插件或额外软件。ICE全称Interactive Connectivity Establishment ,是一种交互式连接框架,他允许两个设备进行p2p通讯。在进行p2p通讯过程中,存在诸多问题,就比如两个客户端(下文均以A,B为代称)他们如何发现对方,通讯信息是否会被防火墙拦截等等问题。为了解决p2p通讯过程中存在的阻碍,ICE采用了STUN或者TURN服务解决这些问题,而
多人实时互动之各WebRTC流媒体服务器比较
yinshipin007的博客
11-03 779
随着网络基础设施的提高,音视频实时通信越来越成为人们日常生活和工作中必不可少的需求。2011年 WebRTC的出现,则更加速了这种需求变为现实的可能性。熟悉 WebRTC 的同学应该都知道,WebRTC规范只定义了实时通信中客户端的行为,而没有规范服务端(包括哪些信令、数据如何流转)的行为。所以,你可以使用WebRTC库方便的实现 1:1 实时通信,但对于多人实时互动,光依靠 WebRTC库显然就无法完成要求了。那我们该如何实现多人实时互动通信呢?
WebRTC视频通话-WebRTC视频自定义RTCVideoCapturer相机
一名开发者
08-15 6629
WebRTC视频通话-WebRTC视频自定义RTCVideoCapturer相机。主要获得相机采集的画面CVPixelBufferRef,将处理后的CVPixelBufferRef生成RTCVideoFrame,通过调用WebRTC的localVideoSource中实现的didCaptureVideoFrame方法
Android 11】AOSP Settings添加屏幕旋转按钮
最新发布
xuanyulevel6的博客
06-13 528
这里是客户要求添加按钮以实现屏幕旋转。这里的值可以是0,1,2,3 的任意一个。我这里没有陀螺仪,所以只需要这个命令就够了。更多的可以参考但是这有个缺陷,就是开机的动画不能随着设置好的屏幕方向旋转。
搭建webrtc服务器
05-20
搭建 WebRTC 服务器,您需要考虑以下几个步骤: 1.选择 WebRTC 服务器技术:有许多不同的 WebRTC 服务器技术可供选择,如 Kurento,Jitsi,Janus,Mediasoup 等。您需要评估每种技术的优劣,并选择适合您需求的技术。 2.安装 WebRTC 服务器:根据您选择的 WebRTC 技术,按照官方文档或社区文档进行安装和配置。 3.配置 NAT 穿透:WebRTC 需要使用 NAT 穿透技术来克服 NAT 网络限制。您可以选择使用 STUN 和 TURN 服务器来实现 NAT 穿透。 4.测试 WebRTC 服务器:一旦您安装和配置了 WebRTC 服务器,您就可以使用浏览器 WebRTC API 进行测试,以确保服务器正常工作。 需要注意的是,搭建 WebRTC 服务器需要一定的技术和经验,如果您不确定如何进行操作,建议寻求专业的技术支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • canvas的drawImage方法参数详解 50883
  • IDEA中自动换行和标准线的设置 38630
  • zookeeper+dubbo+springmvc,搭建 28481
  • jvm参数(调优)+jvm内存的年轻代/老年代/持久代 26186
  • 数据库高并发解决方法总结 19507

分类专栏

  • 实时视频通讯 1篇
  • spring 5篇
  • linux 3篇
  • 2篇
  • java 13篇
  • database 9篇
  • js 8篇
  • 计算机/网络基础 1篇
  • 开发工具 3篇
  • elasticsearch
  • golang 1篇

最新评论

  • IO复用进化史

    huanxuejian: 讲得真好

  • 手把手教你10分钟快速搭建webrtc

    有故事的猫先生: 安装步骤错了

  • 手把手教你10分钟快速搭建webrtc

    yjith666: /usr/local/etc/turnserver.conf.default 这个文件,我的系统里咋找不到呢

  • canvas的drawImage方法参数详解

    四月天-coder: 啧啧啧,关注了关注了

  • canvas的drawImage方法参数详解

    Josh323: 写得好啊,一图胜千言

最新文章

  • IO复用进化史
  • spring修改/添加cookie、header、请求参数(mvc/boot)
  • golang与java通过自建ca证书进行https双向验证通讯
2022年1篇
2021年1篇
2019年1篇
2018年1篇
2017年36篇

目录

目录

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

PHP网站源码布吉企业网站改版福永网站建设设计双龙企业网站建设龙华网站推广盐田网络广告推广石岩网页制作福永网站优化排名塘坑网站推广系统宝安SEO按天收费大芬阿里店铺运营东莞网站优化排名坑梓设计公司网站坂田模板网站建设布吉网站优化推广坂田百搜词包西乡网站制作坪山阿里店铺托管横岗网络推广布吉企业网站设计平湖企业网站制作盐田设计网站永湖网站排名优化西乡关键词按天收费爱联seo网站优化布吉网站优化排名广州外贸网站建设坑梓seo观澜设计公司网站塘坑网站改版大运网站优化排名歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化