apprtc(webrtc) 本地搭建服务器

这两天测试了下webrtc的效果,不知道是不是手机比较渣,画面并不是很清晰,先来说说服务器的部署。部署环境ubuntu14.04 32位。

一、服务器组成

      1、AppRTC 房间服务器  https://github.com/webrtc/apprtc

      2、Collider  信令服务器  上边源码里自带

      3、coTurn   穿透服务器   https://github.com/coturn/coturn

      4、需要自己实现coTurn连接信息接口,主要返回用户名、密码和turn配置信息,通常叫做TURN REST API,不实现这个接口的话AppRTCDemo连不上服务器,浏览器访问的话可以正常访问。

二、AppRTC房间服务器

      1、下载代码

      2、安装依赖

            sudo apt-get install nodejs

            sudo npm install -g npm

            sudo apt-get install nodejs-legacy

            sudo npm -g install grunt-cli

            切换到源码目录

            cd apprtc-master

            npm install

            sudo apt-get install python-webtest

            grunt build

            编译之后会多出out目录

            运行还依赖 Google App Engine SDK for  Python 需

            下载完后设置环境变量

            sudo gedit /etc/profile

            export PATH=$PATH:/home/google_appengine

            source /etc/profile

        3、修改配置文件

             主要是src/app_engine目录下的apprtc.py和constants.py

             首先是constants.py

             修改TURN_BASE_URL = 'http://192.168.214.129:80'  这个是上边提到的连接信息接口的地址

             TURN_URL_TEMPLATE = '%s/turn.php?username=%s&key=%s'

             CEOD_KEY = 和coturn turnserver.conf static-auth-secret一致

             WSS_INSTANCES = [{
                   WSS_INSTANCE_HOST_KEY: '192.168.214.129:8089',
                   WSS_INSTANCE_NAME_KEY: 'wsserver-std',
                   WSS_INSTANCE_ZONE_KEY: 'us-central1-a'
                  }, {
                   WSS_INSTANCE_HOST_KEY: '192.168.214.129:8089',
                   WSS_INSTANCE_NAME_KEY: 'wsserver-std-2',
                   WSS_INSTANCE_ZONE_KEY: 'us-central1-f'
            }]

             apprtc.py:

             修改get_wss_parameters(request) 下的

              if wss_tls and wss_tls == 'false':
                   wss_url = 'ws://' + wss_host_port_pair + '/ws'
                   wss_post_url = 'http://' + wss_host_port_pair
              else:
                   wss_url = 'ws://' + wss_host_port_pair + '/ws'
                   wss_post_url = 'http://' + wss_host_port_pair

              主要是把原来的wss和https的scheme都改为ws和http,不要让客户端和浏览器去使用ssl连接,如果有第三   方根证书的签名机构颁发的证书就不需要这样了。

               修改完后重新grunt build下。

           4、启动

                dev_appserver.py --host=0.0.0.0 ./out/app_engine

三、Collider信令服务器

        1、安装依赖

         sudo apt-get install golang-go

         2、在home目下创建文件夹

         mkdir -p ~/collider_root        并在collider_root目录下创建src目录

         设置GOPATH环境变量    export GOPATH=~/collider_root

         将apprtc/src/collider目录下的三个文件夹都拷贝到collider_root/src下

         进入到collider_root/src,开始编译安装collider,准备好

         go get collidermain

         go install collidermain

         成功编译后会在collider_root目录下生成bin和pkg目录,执行文件在bin下。

        3、运行

          修改collider_root/src/collidermain/main.go填上自己ip地址

          var roomSrv = flag.String("room-server", "http://192.168.214.129:8080/", "The origin of the room server")

          启动

          ~/collider_root/bin/collidermain -port=8089 -tls=false

四、coTurn 打洞服务器

        1、下载http://turnserver.open-sys.org/downloads/

         找个适合自己linux系统的,我这里是ubuntu32位所以选了turnserver-4.2.1.2-debian-wheezy-ubuntu-mint-x86-32bits.tar.gz

         下载完后解压进入解压目录

          cat INSTALL     查看安装须知

          sudo apt-get install gdebi-core

          sudo gdebi coturn_4.2.2.2-1_i386.deb

         2、编辑配置文件

           sudo gedit /etc/turnserver.conf

           listening-device=eth0

           listening-port=3478

           relay-device=eth1

           min-port=49152
           max-port=65535

           Verbose

           fingerprint

           lt-cred-mech

           use-auth-secret

           static-auth-secret=填写自己的密钥可不修改

           stale-nonce

           cert=/usr/local/etc/turn_server_cert.pem

           pkey=/usr/local/etc/turn_server_pkey.pem

           no-loopback-peers

           no-multicast-peers

           mobility

           no-cli

         3、生成签名证书

           sudo 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       

               4、启动

          service coturn start

五、coTurn连接信息接口

       TURN REST API 标准参考文档

       返回json结果示例:

       {"username":"1456904882:1231244","password":"jAph7EHMLuPJuxLLC1uRiI3kvq4=","ttl":86400,"uris":["turn:192.168.214.129:3478?transport=udp","turn:192.168.214.129:3478?transport=tcp","turn:192.168.214.129:3479?transport=udp","turn:192.168.214.129:3479?transport=tcp"]}

       1、username字段需要以timestamp + ":"  + username的形式输出

       2、响应的 password 字段,需要以 HMAC-SHA1 算法计算得出,公式为:【base64_encode( hmac( key,

            username ) )】此处的 key,为 coTurn 服务器配置中的 “static-auth-secret”值。以 key 作为      hmac 算法的密钥,turn-username 为被计算的内容,得出的 hmac 摘要后,经 base64 编码得到最终密码。

       3、uris为后台配置好的,我这里写死

       4、很简单的接口,用惯了java,这里我准备用php,写起来比java快

       

username = $response_username;
	$jsonObj->password = $response_password;
	$jsonObj->ttl = 86400;
	$jsonObj->uris = array("turn:192.168.214.129:3478?transport=udp","turn:192.168.214.129:3478?transport=tcp","turn:192.168.214.129:3479?transport=udp","turn:192.168.214.129:3479?transport=tcp");
	
	echo json_encode($jsonObj);
    
	/** 
         * 使用HMAC-SHA1算法生成签名值 
         * 
	 * @param $str 源串 
         * @param $key 密钥 
         * 
         * @return 签名值 
         */  
    function getSignature($str, $key) {  
        $signature = "";  
        if (function_exists('hash_hmac')) {  
            $signature = base64_encode(hash_hmac("sha1", $str, $key, true));  
        } else {  
            $blocksize = 64;  
            $hashfunc = 'sha1';  
            if (strlen($key) > $blocksize) {  
                $key = pack('H*', $hashfunc($key));  
            }  
            $key = str_pad($key, $blocksize, chr(0x00));  
            $ipad = str_repeat(chr(0x36), $blocksize);  
            $opad = str_repeat(chr(0x5c), $blocksize);  
            $hmac = pack(  
                    'H*', $hashfunc(  
                            ($key ^ $opad) . pack(  
                                    'H*', $hashfunc(  
                                            ($key ^ $ipad) . $str  
                                    )  
                            )  
                    )  
            );  
            $signature = base64_encode($hmac);  
        }  
        return $signature;  
       }  

	class Response {
		public $username = "";
		public $password = "";
		public $ttl = "";
		public $uris = array("");
	}

?>

      5、拿nginx部署下,怎么部署自行百度

六、测试

       部署成功后可在浏览器输入http://192.168.214.129:8080创建房间

       appRTCDemo连接也改成http://192.168.214.129:8080即可

七、参考连接

       http://www.mamicode.com/info-detail-513556.html

       http://www.jianshu.com/p/c55ecf5a3fcf

       http://www.bubuko.com/infodetail-938737.htmll

八、关于webrtc编译

       我只编译了android的版本,公司网速慢死,找了个国内下好的代码,分享到网盘了http://pan.baidu.com/s/1kUyNE55

       AppRTCDemo的工程源码连接:AppRTCDemo工程源码

       运行截图:

       apprtc(webrtc) 本地搭建服务器_第1张图片



你可能感兴趣的:(android)