webrtc测试服务器编译和搭建

这部分,主要是参考网上别人的做法,只不过中间遇到的一些问题这里我会稍微写一下。

首先,webrtc服务器的编译主要参考这位大神的做法:http://blog.csdn.net/s569646547/article/details/50780682

我这里用的是Ubuntu 16.04 LTS 64位的linux系统。

服务器方面需要注意的是,启动服务器的时候不要设置系统代理,因为下载某些软件的时候可能需要翻墙。如果编译中出现下载失败的问题,很有可能是翻墙造成的,需要自己去确认下是不是需要翻墙。另外,设置系统代理或者取消代理,可能需要注销下才会起作用,这个有点麻烦,为什么不是立即生效呢。。。

一、AppRTC房间服务器

这个编译按照链接里的做就行,只不过中间安装某些软件的时候,需要等的时间比较长,耐心等就行了。

编译完成,配置的地方说几点不同的:

1.我这里用的iceserver,好像最新的webrtc demo用的是iceserver,所谓的iceserver其实就是请求一个url网址,返回一组打洞服务器地址,我这里改成这个

ICE_SERVER_BASE_URL = 'http://192.168.123.231'

完整的url是http://192.168.123.231/v1alpha/iceconfig/?key=north,这里的url需要自己做一个网站配置一下,理论上,如果只是测试,写成一个静态的index.html返回给客户端应该也是可以的。

url返回的json数据是:

{"iceServers":[{"username":"1473662094:ling","credential":"HbWuzrR0z\/Ei0wBPvHISXpdGvc4=","ttl":86400,"urls":["turn:192.168.123.231:3478?transport=udp","turn:192.168.123.231:3478?transport=tcp","turn:192.168.123.231:3479?transport=udp","turn:192.168.123.231:3479?transport=tcp"]},{"username":"1473662094:ling","credential":"HbWuzrR0z\/Ei0wBPvHISXpdGvc4=","ttl":86400,"urls":["turn:192.168.123.231:3478?transport=udp","turn:192.168.123.231:3478?transport=tcp","turn:192.168.123.231:3479?transport=udp","turn:192.168.123.231:3479?transport=tcp"]}]}

注意这里的urls,链接里面是uris,这是不同的。最新webrtc demo是用的urls解析的。另外mac版本的demo解析这个json和android不同,有bug,需要自己修复下。

2.npm的安装不需要翻墙。

3.constants.py里面的修改


4.apprtc.py里面,为了测试通过,我加了这句,是为了不执行if下面的代码。


5.我的启动命令dev_appserver.py --host 192.168.123.231 --port 8080 ./out/app_engine


二、Collider信令服务器

这个也是按照链接里的做就可以了。不过go的编译也用了蛮长时间,主要是第一次编译的问题。

需要注意的是,要在src目录下启动信令服务器,我的启动命令~/collider_root/bin/collidermain -port=8089 -room-server="192.168.123.231" -tls=false


三、打洞服务器

这里我是下载的源码http://turnserver.open-sys.org/downloads/v4.5.0.4/turnserver-4.5.0.4.tar.gz自己编译安装的。.configure以后,make,sudo make install就行了。

启动之前,我没有修改配置,用的默认配置启动的,签名证书的生成同链接里的。我的启动命令sudo turnserver start

不过这里可能涉及到一个打洞服务器认证的问题,由于这里只是自己测试用,这些并没有在意。如果是需要上线的,请自行研究解决下吧。


四、iceserver的生成

关于第一步中这个url:http://192.168.123.231/v1alpha/iceconfig/?key=north

这里我们做一个php实现。

1.网站服务器,由于ubuntu16.04 LTS中自带了一个叫做lighttpd的网站服务器,所以不需要再去装什么apache或者nginx网站服务器了。

2.php安装,请参照http://blog.csdn.net/wangzuo0714/article/details/6834558,该链接php安装部分,不过我用的php5.6

3.lighttp配置php

找到/etc/lighttpd/conf-available/15-fastcgi-php.conf,修改"bin-path" => "/usr/local/bin/php-cgi"指向你自己的php-cgi位置

然后运行

lighttpd-enable-mod fastcgi

lighttpd-enable-mod fastcgi-php

这将创建符号链接
/etc/lighttpd/conf-enabled/10-fastcgi.conf 指向/etc/lighttpd/conf-available/10-fastcgi.conf
/etc/lighttpd/conf-enabled/15-fastcgi-php.conf 指向 /etc/lighttpd/conf-available/15-fastcgi-php.conf

最后重启lighttpd, sudo service lighttpd force-reload


4.下面参照链接里的php,我做了一下修改,里面的username什么都是为了暂时测试改掉的,这里需要配合客户端做相应的修改,由于写改文章的时候,我对webrtc客户端代码还没做太多研究,这里为了测试通过,这样改了。

<?php  
  
    $request_username = "";//$_GET["username"];  
    if(!isset($_GET["username"])) {  
        //echo "username == null";  
        //exit;  
	$request_username = "ling";
    }
    $request_key = "ling1234";//$_GET["key"];  
    $time_to_live = 600;  
    $timestamp = time() + $time_to_live;//失效时间  
    $response_username = $timestamp.":".$request_username;//$_GET["username"];  
    $response_key = $request_key;  
    if(empty($response_key))  
        $response_key = "密钥";//constants.py中CEOD_KEY  
  
    $response_password = getSignature($response_username, $response_key);  
   
    $iceServer = new Response();  
    $iceServer->username = $response_username;  
    $iceServer->credential = $response_password;  
    $iceServer->ttl = 86400;  
    $iceServer->urls = array("turn:192.168.123.231:3478?transport=udp","turn:192.168.123.231:3478?transport=tcp","turn:192.168.123.231:3479?transport=udp","turn:192.168.123.231:3479?transport=tcp");  
    $str = json_encode($iceServer);
    $config = array("iceServers"=>[$iceServer,$iceServer]);//{"iceServers":"ff"};
    echo json_encode($config);  
      
    /**   
         * 使用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 $credential = "";  
        public $ttl = "";  
        public $urls = array("");  
    }  
  
?>  
将以上php代码保存为index.php,放到/var/www/html/v1alpha/iceconfig下面。这样,访问http://192.168.123.231/v1alpha/iceconfig/?key=north,将会返回类似这样的json数据:

{"iceServers":[{"username":"1473662094:ling","credential":"HbWuzrR0z\/Ei0wBPvHISXpdGvc4=","ttl":86400,"urls":["turn:192.168.123.231:3478?transport=udp","turn:192.168.123.231:3478?transport=tcp","turn:192.168.123.231:3479?transport=udp","turn:192.168.123.231:3479?transport=tcp"]},{"username":"1473662094:ling","credential":"HbWuzrR0z\/Ei0wBPvHISXpdGvc4=","ttl":86400,"urls":["turn:192.168.123.231:3478?transport=udp","turn:192.168.123.231:3478?transport=tcp","turn:192.168.123.231:3479?transport=udp","turn:192.168.123.231:3479?transport=tcp"]}]}

以上是webrtc服务器的搭建过程,由于对webrtc的客户端和服务器端研究太少,这里的步骤都是为了测试所写,而且都是测试通过的。

以后如果有机会详细研究下去的话,会再找机会写点更详细的东西。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nature19862001

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值