array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 搭建自己的AppRTCDemo服务器 - 爱码网


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

http://io.diveinedu.com/2015/02/05/%E7%AC%AC%E5%85%AD%E7%AB%A0-WebRTC%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA.html

https://github.com/webrtc/apprtc

http://www.cnblogs.com/cther/p/4604599.html


后台运行的命令用:前面加 nohup 后面加 &

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

(一)
先搭建房间服务器AppRTC:

sudo apt-get update
sudo apt-get install git
sudo git clone https://github.com/webrtc/apprtc
sudo apt-get install nodejs
sudo apt-get install npm
sudo npm install -g npm
sudo apt-get install nodejs-legacy
sudo npm -g install grunt-cli


还需要下载工具文件才能运行服务器:
https://cloud.google.com/appengine/downloads#Google_App_Engine_SDK_for_Python
下载google_appengine_1.9.24.zip。
unzip google_appengine_1.9.24.zip
sudo vi /etc/profile
export PATH="$PATH:/path/to/google_appengine/"
source /etc/profile

然后修改配置文件的几个地方,
一、修改文件src/app_engine/apprtc.py
搜索 "wss:" 和 "https:" (注意冒号)
可以在方法 get_wss_parameters 里搜索到,
这里需要把 wss: 替换成 ws:、把 https: 替换成 http:。

搜索make_pc_config,在config里面加turnserver和stunserver地址和用户密码,xu是用户名,密码是1234.如下:

def make_pc_config(ice_transports):
config = { 'iceServers': [{
"url": "stun:198.11.178.145"
},{
"url": "turn:xu@198.11.178.145",
"credential": "1234"
}] };

保存退出,就可以了。

二、修改文件src/app_engine/constants.py
① 搜索 TURN_BASE_URL
  将等号后面的字符串替换为 turnserver的地址,如:'http://198.11.178.145:3478'

② 搜索 WSS_INSTANCES
  可以看到,这里被配置为了一个数组,不过我们只有单台服务器。所以先删掉数组的其他元素,只保留一个。
  在保留下来的元素中,我们只修改 WSS_INSTANCE_HOST_KEY 对应的值即可。
  将其改为上面 Collider 服务器的可访问地址。比如:198.11.178.145:8089。不需要协议,没有 URI。
改完以上两处,可以保存退出了。

cd /apprtc (apprtc目录下有build、src、tool目录还有一些文件,切换到这个目录然后在执行以下命令)
npm install
sudo apt-get install python-webtest
grunt build

执行成功,出来out文件夹。

最后运行房间服务器:

cd /apprtc

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


(二)
搭建信令服务器,可以参照https://github.com/webrtc/apprtc/tree/master/src/collider步骤。
刚才通过https://github.com/webrtc/apprtc下载的源码里面就含有了信令服务器的代码。在src\collider目录下。
先安装依赖的golang环境。
sudo apt-get install golang-go
mkdir -p /collider_root
sudo /etc/profile
export GOPATH=/collider_root
source /etc/profile
将src\collider目录下的collider,collidermain,collidertest三个文件夹拷贝到/collider_root/src目录下。

先修改配置文件collider_root/src/collidermain/main.go中的房间服务器地址。
var roomSrv = flag.String("room-server", "http://198.11.178.145:8080/", "The origin of the room server")
修改后保存。

cd /collider_root/src
sudo apt-get install mercurial
go get collidermain
go install collidermain
成功编译后会在collider_root目录下生成bin和pkg文件夹,可执行程序在bin中。

最后运行信令服务器。
/collider_root/bin/collidermain -port=8089 -tls=false


(三)
搭建turnserver。

wget http://turnserver.open-sys.org/downloads/v4.4.1.2/turnserver-4.4.1.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz

tar xvfz turnserver-4.4.1.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz

sudo apt-get install gdebi-core

sudo gdebi coturn*.deb

vim /etc/default/coturn

把上面打开编辑的文件中的这一行TURNSERVER_ENABLED=1去掉注释,保存退出.

vim /etc/turnserver.conf

删除所有改为:

listening-device=eth0
relay-device=eth0
Verbose
fingerprint
lt-cred-mech
use-auth-secret
static-auth-secret=1234
user=xu:1234
user=xml:1234
stale-nonce
cert=/etc/turn_server_cert.pem
pkey=/etc/turn_server_pkey.pem
no-loopback-peers
no-multicast-peers

上面cert和pkey配置的自签名证书用Openssl命令生成:
sudo openssl req -x509 -newkey rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes

启动turnserver 。
turnserver -c /etc/turnserver.conf -v


然而怎么单独测试turnserver为webrtc服务成功呢?

就是自己部署下面这个例子,这个部署很简单。
http://chinawebrtc.org/forums/topic/%E4%BD%BF%E7%94%A8webrtc%E6%90%AD%E5%BB%BA%E5%89%8D%E7%AB%AF%E8%A7%86%E9%A2%91%E8%81%8A%E5%A4%A9%E5%AE%A4-%E5%85%A5%E9%97%A8%E7%AF%87/
https://github.com/LingyuCoder/SkyRTC-demo

例子使用说明:

安装Node.js及npm环境
下载源码到本地,并解压缩
移动到解压后的目录下
使用命令npm install安装所需要的库
运行命令node server.js
访问localhost:3000#roomName查看效果,其中roomName为进入的房间名,不同房间的用户无法互相通信

然后根据说明,用4G手机谷歌浏览器跟电脑通话。

 

如果在虚拟机里请使用桥接模式:直接连接物理网络,勾选复杂网络连接状态。

http://198.11.178.145:8080

 

相关文章: