Giter Site home page Giter Site logo

simple_webrtc_server_demo's Introduction

simple_webrtc_server_demo

在原有另外一个大神开发的基础上实现了最简单的webrtc网关,可以实现群组通话。原先地址:https://www.jianshu.com/p/61e3c9e13456

原有demo只能实现将一个服务端视频或语音文件,通过浏览器webrtc播放。这里增加了上行流,和流转发。

基础原理就是,将一个端收到的rtp包,取出编码数据,然后重新封包转发给其它用户。每个用户都有一个队列用户存放待发送的包。

另外其中增加了一个udpserver线程 和 tcpserver线程。用于演示如果需要和第三方server交互时的处理方式。

之前的demo在windows下编译,我这边改为了在linux下编译。

gatewayrtctest 是前端

gateway 是服务端

安装方法是:

基础组件安装

yum install git gtk-doc  libffi-devel zlib-devel pcre-devel openssl-devel lrzsz boost-devel nginx 
yum group install "Development Tools"
mkdir webrtcvoice
cd webrtcvoice

库安装

glib安装 注意这里要至少安装2.56版本,不能使用yum安装glib。

cd /root/webrtcvoice
wget http://ftp.acc.umu.se/pub/GNOME/sources/glib/2.56/glib-2.56.1.tar.xz
tar -xvf glib-2.56.1.tar.xz 
cd glib-2.56.1
./configure --prefix=/usr/local/app/glib_2_56 --enable-libmount=no
make && make install
export PKG_CONFIG_PATH=/usr/local/app/glib_2_56/lib/pkgconfig
export PATH=/usr/local/app/glib_2_56/bin:$PATH

libnice 用于进行ice候选项生成和连接的建立 github地址:https://github.com/libnice/libnice

cd /root/webrtcvoice
git clone https://github.com/libnice/libnice
cd libnice
 sh autogen.sh
./configure --prefix=/usr/local/app/libnice
make && make install

libsrtp安装 注意这里需要1.x版本 我是在github上下载的1.6.0 然后rz上去的

cd /root/webrtcvoice
unzip libsrtp-1.6.0.zip 
cd libsrtp-1.6.0
./configure --prefix=/usr/local/app/libsrtp
make && make install

websocketpp 安装 注意 websocketpp 本身其实不用安装,直接从github上下载下来代码就可以了。

cd /root/webrtcvoice
git clone https://github.com/zaphoyd/websocketpp

openssl 安装 注意 在yum中已经安装了openssl,这里之所以还要编译安装是因为 代码需要更新版本的openssl

cd /root/webrtcvoice
wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz
tar zxvf openssl-1.1.1d.tar.gz 
cd openssl-1.1.1d
./config --prefix=/usr/local/app/openssl
make && make install

运行库添加

将运行库加入到 /etc/ld.so.conf 如下图所示。 然后运行 /sbin/ldconfig -v /usr/local/app/openssl/lib/ /usr/local/app/libnice/lib/

图片描述

编译运行

运行sh create.sh进行编译。create.sh 是我写的编译脚本。 通过./webrtcgateway 开始运行。下图表示运行成功。

图片描述

nginx环境

nginx是为了代理websocket,因为webrtc的websocket必须使用https也就是wss,所以必须配置证书。

配置如下:



#user  nobody;
worker_processes  1;

#error_log  /root/logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
	

	 server {
        listen       443 ssl;
        server_name  ericrtc.com;
        #charset koi8-r;
        location / {
			proxy_pass http://127.0.0.1:9002;
        	# WebScoket Support
        	proxy_http_version 1.1;
        	proxy_set_header Upgrade $http_upgrade;
        	proxy_set_header Connection "upgrade";

        	proxy_set_header Origin xxx;
        	proxy_set_header X-Real-IP $remote_addr;
        	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        	proxy_set_header Host $http_host;
        	proxy_set_header X-NginX-Proxy true;
        }
		ssl_certificate  /root/ssl/ssl.crt;
		ssl_certificate_key /root/ssl/ssl.key;
		






    }
	

	 server {
        listen       443 ssl;
        server_name  webrtc.mygrsun.com;
        #charset koi8-r;
        location / {
			proxy_pass http://127.0.0.1:9002;
        	# WebScoket Support
        	proxy_http_version 1.1;
        	proxy_set_header Upgrade $http_upgrade;
        	proxy_set_header Connection "upgrade";

        	proxy_set_header Origin xxx;
        	proxy_set_header X-Real-IP $remote_addr;
        	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        	proxy_set_header Host $http_host;
        	proxy_set_header X-NginX-Proxy true;
        }
		ssl_certificate  /root/webrtc_mygrsun_com_ssl/1_webrtc.mygrsun.com_bundle.crt;
		ssl_certificate_key /root/webrtc_mygrsun_com_ssl/2_webrtc.mygrsun.com.key;
		

    }
	
	 server {
        listen       9054 ssl;
        server_name  ericrtc.com;
        #charset koi8-r;
        location / {
            root   html;
            index  index.html index.htm;
        }
		ssl_certificate  /root/ssl/ssl.crt;
		ssl_certificate_key /root/ssl/ssl.key;
		

    }

    server {
        listen       81;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

      
    }

    server {
        listen       81;
        server_name  webrtc.mygrsun.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

      
    }




}




其它

libnice 打开调试 方法

文档在:https://nice.freedesktop.org/libnice/libnice-Debug-messages.html 设置环境变量: export G_MESSAGES_DEBUG=all export NICE_DEBUG=all 代码中调用nice_debug_enable(true) 注意:不需要重新编译libnice 就可以打开调试

关于腾讯云部署

腾讯云开通公网地址后,ifconfig中看不到公网地址,这是腾讯云特有的一种机制。需要开通eip直通文档如下:https://cloud.tencent.com/document/product/213/12540 如果没有使用弹性网卡,需要先转成弹性网卡https://cloud.tencent.com/document/product/213/16586 因为腾讯云的eip直通处于体验阶段,所以需要提交腾讯云工单,之后才可以开通。(没开通前 页面中没有开通按钮)

simple_webrtc_server_demo's People

Stargazers

 avatar weit avatar  avatar tianguang avatar tongpengfei avatar buzai avatar 夏楚 avatar edwin avatar  avatar  avatar  avatar Mihawk086 avatar little wang avatar

Watchers

James Cloos avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.