webrtc测试服务器编译和搭建

来源:互联网 发布:网络舆情汇报 编辑:程序博客网 时间:2024/05/01 00:18

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

首先,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 0
原创粉丝点击