基于webrtc的一对一视频聊天(apprtc)

一、前言

项目作者:https://github.com/webrtc

成品项目:https://github.com/webrtc/apprtc

samples项目:https://github.com/webrtc/samples

搭建过程参考文章:http://www.cnblogs.com/hujihon/p/4991137.html

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

说明

此项目为谷歌项目组的官方项目。apprtc为成品项目,可以编译后部署使用。samples项目为webrtc技术点的单独测试。

本文主要介绍apprtc项目的环境搭建与部署。其中“Collider”为服务端,使用GO语言编写;前端项目使用grunt(Nodejs)构建与编译;前端使用Python语言实现( Google App Engine SDK for Python); Google App Engine SDK for Python的环境搭建,需要服务器能够翻墙链接谷歌云服务器(参考文章【ssh+proxychains实现linux服务器的代理翻墙】)。

文章案例使用的服务器为阿里云linux服务,操作系统为ubuntu server 16。

二、获取项目源代码

1.登录服务器并进入指定目录:

通过ssh登录服务器

1.1.更新系统软件包:

sudo apt update
sudo apt dist-upgrade
sudo apt autoremove

1.2.进入当前用户的目录下:

cd (此案例为阿里云的ubuntu server 16,用户目录的绝对路径为"/root/")

2.从github上获取项目源代码:

sudo apt install git
git clone https://github.com/webrtc/apprtc.git

继续阅读基于webrtc的一对一视频聊天(apprtc)

基于webrtc的多对多聊天(SkyRTC)

一、基本介绍

  1. 开源项目地址
    作者项目集合地址:https://github.com/LingyuCoder
    服务端项目地址:https://github.com/LingyuCoder/SkyRTC
    客户端项目地址:https://github.com/LingyuCoder/SkyRTC-client
    demo项目(本文中应用的)地址:https://github.com/LingyuCoder/SkyRTC-demo
  2. 项目技术特点
    这是一个使用SkyRTC和SkyRTC-client搭建浏览器中音频、视频、文字聊天室的Demo
  3. 前置条件
    参考【Nodejs开发环境与生产环境安装】安装nodejs;
    参考【基于coturn的webrtc iceserver搭建】自建iceserver服务;
    参考【通过apache2代理+Let’s Encrypt实现网站https与wss】配置网站的安全访问(浏览器有安全策略,除了127.0.0.1,其他需要配置SSL,页面才能调用本地摄像头与耳麦设备)。

二、开发配置

  1. 安装Node.js及npm环境(node版本推荐6.x以上的版本,如果使用4.x版本,此项目启动是会报错【EMPTY_BUFFER: Buffer.alloc(0)】,可以使用“nvm”安装需要的node版本)
  2. 下载源码(https://github.com/LingyuCoder/SkyRTC-demo)到本地,并解压缩
  3. 移动到解压后的目录下
  4. 使用命令npm install安装所需要的库
  5. 运行命令node server.js
  6. 访问http://localhost:3000#roomName查看效果,其中roomName为进入的房间名,不同房间的用户无法互相通信
  7. 进行浏览器兼容的开发工作

##功能说明 支持划分房间的在线音频、视频、文字聊天,提供房间内文件共享功能

三、部署配置

  1. 安装Node.js及npm环境
  2. 上传修改后的项目代码到目标服务器(不要带node_modules)
  3. 移动到解压后的目录下
  4. 使用命令npm install安装所需要的库
  5. 运行命令node server.js,建议配合forever
  6. 通过apache配置https与wss代理
  7. 访问https://公网ip#roomName查看效果,其中roomName为进入的房间名,不同房间的用户无法互相通信

四、优缺点分析

1.优点

部署运行简单

2.缺点

项目长久不维护,浏览器兼容性差。需要进行客户端js库的调整

对于新的技术如何做到从入门到放弃

从毕业一直从事IT行业,几年来主要专注于WEB技术领域,闲暇时间也看些项目管理与产品设计的杂书。不管对于“小白”还是“老司机”,不管是项目还是产品,学习新的技术是十分必要的。当然从职业生涯的角度来看,保持对新事物的敏感度与持续的学习能力是必不可少的基本素质。

说到技术,不仅仅是工程学科中的技能。从更广泛的范围来看,技术是战略层面下战术层面的具体技能,战术要服务于战略。这也就解释了在比较正规的IT公司,“技术服务于需求”的现象。一旦技术主导了产品,难免会出现因盲目追求新技术而造成产品无市场,或者因过度保守不思进取而引起产品滞后被淘汰的两个极端。

当然,有点扯远了。下面主要结合博主的工作经验,介绍一个尚不完全成型的学习模型。此学习模型类同与软件开发的敏捷模型,通过快速迭代更新不断完善行业知识体系并深入本职工作技能的理解。

第一级、学会发问

“闷骚”可能是技术男的通病。遇到问题不喜欢问,一味自己憋着。——可能与情商偏低有很大关系。这里说的问,不仅仅是问同事,还有更多的途径。

“内事不决问百度,外事不决问谷歌”。搜索引擎就是最常见的途径,也是最容易被人接受的方式。——至少不用与人打交道……

“先问自己,自己想问什么”。听起来有点像玄学,其实很简单:问别人问题前,先经过一番资料搜集,并初步形成自己对问题的初步看法;然后,明确哪些是困扰自己的核心问题,有目的的去寻找答案。之前在别人博客里,总是看到“会提问也是一种学问”的观点,的确:实现明确自己的问题,是对别人时间与精力的尊重。除非必要,不要指望别人一起来个头脑风暴。

“带着自己的初步看法,有礼貌地去请教他人”。这个他人可以是公司同事、本地同行、论坛成员、技术群的群友等。这些都是是真真正正的人,所以,请像对待人一样去对待他们,不管自己多牛,不管自己在公司地位多高。这也是很看一个人“为人处世”之道的。

第二级、查看官方文档

通过搜索或者请教,获取不少知识,对问题有了一定的理解。不过比较认真的人,难免有点心虚,感觉那是“野路子”。

可以登陆相关技术的官方网站(可能有一半会是英文网站),阅读下他们自己的介绍与看法,开放接口的文档,以及提供的官方DEMO

从技术的表面去了解这个新技术。就像做黑盒测试一样。

第三级、阅读源代码与专业理论 继续阅读对于新的技术如何做到从入门到放弃

2017遇见更好的自己

IT技术

(一)前端技术

推广并监督gulp在前端项目开发过程中的应用。

抽象并组织前端UI模块,并初步实现UI模块的复用性。

初步了解reactangular前端框架的使用场景与使用规范。

(二)后端技术

完善代码生成工具(codecoder)的易用性。

深入了解UMLRUP,并进行应用。

培养源于优秀源代码的习惯。

进一步了解并应用设计模式。

进一步了解jvm实现原理。

(三)自动化运维技术

初步了解自动化运维工具。

(四)互联网运营技术

了解提高流量转化率的方法。

(五)大数据处理技术

夯实大数据相关的数据基础。

了解马尔可夫算法、贝利叶算法与人工神经网络算法。

项目管理

(六)范围管理

初步掌握做需求分析的能力,能够根据需求进文档化与uml建模。

(七)时间管理

能够尽量准确的评估任务时间,并控制任务进度。

(八)质量管理

规范项目基本文档:需求分析文档、系统架构文档、系统部署文档、接口文档、工作分解结构。

规范java编程与前端编程的基本准则。

(九)人力资源管理

建设学习型知识分享型团队。

(十)沟通管理

交流做到“不卑不亢”。

能够与客户进行有效交流,了解到客户的真实需求。

团队内部做到平等无障碍的沟通。

个人能力

(十一)自我情绪调节能力

能够比较好的进行自我情绪调节。能够排解、转移不良情绪的影响。

(十二)自学能力

能够维持高效的自学能力,能静心学习并掌握理论基础知识。

(十三)沟通能力

能做到有效沟通、积极沟通、理智沟通。

(十四)写作能力

对工作与学习所掌握的知识,通过写作的形式进行归纳总结,并养成一定的写作风格。

javascript闭包与匿名自执行函数的演变原理

js的闭包特性,使得js弄出一套稀奇古怪的语法。而对于这些特殊的语法,已经有点js基础的同学看起来还是比较吃力甚至头疼。下面深入浅出的js“匿名自执行函数”的演变过程。啥,你还不知道什么是“匿名自执行函数”?我想(function(){})();这种语法,在各位同学阅读js库源码时多多少少碰见过。对,就是这家伙!

首先,我们看些正常的js函数定义方式:

//常规函数
function normalFun(){
console.log(“normalFun”);
}
normalFun();

//函数变量

var fun = function() {
console.log(“fun”);
};

fun();

以上两种函数定义的方式都有个共同特点:函数有个名字,通过函数名字调用函数。好了,下面奇葩的事就发生了~

继续阅读javascript闭包与匿名自执行函数的演变原理