Mr.小艾——apprtc服务器的搭建(ubuntu)

来源:互联网 发布:条形码打印机软件 编辑:程序博客网 时间:2024/06/16 18:12

apprtc(webrtc)本地搭建服务器

好长时间没有更新了,之前一直在研究视频直播,这段时间由于项目换了需求。需要搭建一套webrtc的视频会议系统,网页和网页端实现倒是简单点(毕竟初衷就是用于网页的),但问题是项目需求是Android端和Web端实现通信。首先就是网上找资料,然后打算自己搭建发现不切实际果断放弃,连续好几个星期一直找,期间尝试了无数中方法,一直没有什么收获。皇天不负有心人吧?最后找到了这个apprtc——github上的开源项目。Android端的代码是现成的,直接导入修改修改就可以用。难的就是系统服务器的搭建。首先我告诉你,我搭建成功了!!!所以你想成功就耐着性子做下去。我一个人摸索了一个星期,为了帮助大家少走点弯路,将我自己的经验分享给大家。
网上这样的教程千篇一律,我搭建的时候几乎找遍了所以资料,但内容大体一样(估计是一个人写的,其他人也就改改,自己装没装都是问题)。个人建议 百度or谷歌 “apprtc 搭建 ”前几个博客写的很清楚,但对于新手来说有难度,我的经验就是结合他们的教程来说的,理论上面写的也很清楚,像服务器的组成功能等都有介绍。首先自己找一篇教程来做,我把会遇到的问题分享给大家。

  • Apprtc房间服务器
  • 信令服务器
  • 打洞服务器
  • nginx服务器
  • php模块的安装

Apprtc房间服务器搭建

将github上面的源码下载到本地,放到一个好找的目录就行。接下来如果直接按照教程安装可能会出现问题,因为好多资源都需要连接国外的服务器下载。所以下载好源码之后,先实现翻墙吧!!!不会的话就网上找一个代理。个人推荐一个“二师兄vpn”(建议充值一个会员吧,20元一个月,我不是打广告!这个和我没有关系,毕竟免费的太垃圾了。。。)vpn登录之后检查一下成功没有(看看可不可以访问youtube什么的)。之后按照教程一步步来,会在源码的目录下多出一个out文件夹,然后接着安装依赖库、修改配置文件(注意别进错目录就行)修改的话就按照教程来。在修改constants.py的时候注意

TURN_URL_TEMPLATE = '%s/turn.php?username=%s&key=%s'CEOD_KEY = 和coturn turnserver.conf static-auth-secret一致

上面的turn.php是要自己新建的,还有CEOD_KEY的值自己想一个好记的,后面会用的到。记住这两点!!!

修改完之后 从新grunt build下

到源码的根目录下启动:
dev_appserver.py –host=0.0.0.0 ./out/app_engine

信令服务器搭建

这个很简单,按照教程就可以,当然还是在翻墙的前提之下。修改一些配置文件就可以启动了
~/collider_root/bin/collidermain -port=8089 -tls=false

打洞服务器搭建

还是按照教程来,到编辑配置文件的时候
static-auth-secret = CEOD_KEY的值
千万记得修改,之后启动:service coturn start
之后在浏览器输入:IP地址:3478 出现 TURN Server 就成功了!!!

装到这里,大多数的教程一般就结束了!此时浏览器访问 IP地址:8080一般可以了,Android端导入源码之后修改一下服务器的地址就可以了。但android和web是无法通信的。记得上面还有一个turn.php没用到吧?只能说成功了一大半了。

nginx服务器搭建

因为需要跑一个php文件,(我这里是turn.php 注意TURN_URL_TEMPLATE = ‘%s/turn.php?username=%s&key=%s’ php的名字要和这里的名字一致)需要再搭建一个服务器,在这里选择nginx具体的安装很简单,下载一些压缩包解压,之后复制命令运行就可以了,具体的自行百度,最后nginx配置php模块的时候记得选好端口号,因为这里服务器安装的很多,避免重复导致无法使用;默认的文件路径可以修改也可以不修改,但对于的路径下一定要有turn.php文件(你的名字自己定义),文件的内容写一下内容,要稍作修改:

<?php      $request_username = $_GET["username"];      if(empty($request_username)) {          echo "username == null";          exit;      }      $request_key = $_GET["key"];      $time_to_live = 600;      $timestamp = time() + $time_to_live;//失效时间      $response_username = $timestamp.":".$_GET["username"];      $response_key = $request_key;      if(empty($response_key))          $response_key = "密钥";//constants.py中CEOD_KEY      $response_password = getSignature($response_username, $response_key);      $jsonObj = new Response();      $jsonObj->username = $response_username;      $jsonObj->password = $response_password;      $jsonObj->ttl = 86400;      $jsonObj->uris = array("turn:IP地址:3478?transport=udp","turn:IP地址:3478?transport=tcp","turn:IP地址:3479?transport=udp","turn:IP地址: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("");      }  ?>  

这是别人自己定义的文件代码,我们可以直接拿过来使用。此时在浏览器输入 IP地址:80 (这是我自己定义的,默认是8080,由于被APPrtc占用所以换成80)。没有安装php所以没有结果,但是如果换成.html文件可以的话说明Nginx就安装成功了。

php的搭建

还是一样安装的教程自行百度吧,安装成功之后,启动php:
sudo service php-fpm start
出现php-fpm done 就说明成功了,之后重启一下nginx!!!在浏览器输入IP地址/index.php 会出现:username == null
说明你真的完成了。

之后,重启一下电脑。打开四个终端:
第一个进入到apprtc源码的目录执行:

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

第二个直接运行:

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

第三个运行:

sudo usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

第四个运行:

sudo service php-fpm start

顺序就按照这个来,php和nginx颠倒会出现端口被占用的情况。之后android和web就可以建立连接了!!!turn打洞服务器开机自起,就不用自己打开了

总结

距离我完成搭建到现在已经有好几个星期了,有好多当初遇到的问题现在也不记得了。按照上面说的一步步来应该不会有太大的问题。以后一定做完就写总结,这也是对自己的一种负责。我成功了你也可以的,有不懂的可以问我,我保证教会你!!!还有有什么问题也请指出,我会改。我是Mr.小艾。

0 0
原创粉丝点击