0%

this 是什么

  1. 在 js 中,this 是一个指针型变量,它动态指向当前函数的运行环境。

  2. 在不同的场景中调用同一个函数,this 的指向也可能会发生变化,但是它永远指向其所在函数的真实调用者;如果没有调用者,就指向全局对象 window。

  3. 在全局作用域下,this 始终指向 window。


普通函数中的 this 指向

普通函数中的 this 的值是在函数被调用时指定的。

阅读全文 »

为什么要用 worker

因为 javascript 采用的是单线程模型,也就是所有的任务都只能在一个线程上执行,当解析到一个运算量较大的 js 的时候,后面的任务只能等前面的js解析完才能进行其他操作。所以就会出现”卡死“的状态。
Web Worker 它的作用就是解决以上问题。它可以通过加载一个脚本文件,进而创建一个独立工作的线程,在主线程之外运行。从而营造一个多线程的运行环境,充分利用 CPU 的资源,减轻主线程的负担。

阅读全文 »

在开发期间,后台服务使用的是 Flask 自带的 development server,该服务不支持 websocket 协议,只支持 pollling 协议。

在项目上线时,我们需要使用生产环境的 web server,如 gunicorn,uwsgi,以及能够支持 websocket 协议的网络库: eventlet 或 gevent。

阅读全文 »

切换摄像头可以通过改变 getMediaStream 的约束条件来实现。

前置摄像头:

1
2
3
4
5
6
constraints = {
audio: true,
video: {
facingMode: "user"
}
}

后置摄像头:

阅读全文 »

deepin/ubuntu 环境。

安装 coturn

先安装依赖:

1
apt-get install libssl-dev libevent-dev

然后下载 coturn:

1
git clone https://github.com/coturn/coturn.git
阅读全文 »

Python logging 模块定义了为应用程序和库实现灵活的事件日志记录的函数和类。

日志记录函数以它们用来跟踪的事件的级别或严重性命名。下面描述了标准级别及其适用性(从高到低的顺序):

critical > error > warning > info > debug

阅读全文 »

nginx 同时部署多个 vue 项目

假如现在有两个前端项目:chat、 admin。想要通过 ‘/‘ 访问 chat 项目,通过 ‘/admin’ 访问 admin 项目。

修改 publicPath

默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上,例如 https://www.my-app.com/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.my-app.com/my-app/,则设置 publicPath/my-app/

阅读全文 »

概述

Insertable Stream 可插入流是新的 WebRTC API,,可用来操作通过 RTCPeerConnection 传送的 MediaStreamTracks 中的每一个字节。它让上层应用能对 WebRTC 底层媒体进行访问,让以往 WebRTC 应用中许多不可能做的情况都成为可能了, 比如替换视频聊天时的背景,实时进行音视频处理(降噪,美颜,打水印,加特效等)。

最新的规范在这里 https://w3c.github.io/webrtc-encoded-transform/


webRTC 音视频处理流程

发送流程
  1. 从媒体设备/其他采集源中获得一帧一帧的数据
  2. 对原始数据进行编码
  3. <- 在这里插入自定义逻辑
  4. SRTP 加密
  5. 发送
接收流程
  1. 接收网络 RTP 包
  2. SRTP 解密
  3. RTP 组包
  4. <- 在这里插入自定义逻辑
  5. 解码数据
  6. 渲染数据
阅读全文 »

上一节讲了 webRTC 的原理,今天我们就来实践一下。

我们知道,webRTC 是点对点的连接,它不需要服务器的参与,但是需要一个信令服务器来传递信令,这样才能使双方建立起连接。

这里我们用 node.js 来充当信令服务器,通过 websocket(socket.io)来传递信令。

新建目录 demo,在 demo 下新建 index.js 文件(信令服务器)和 文件夹 public(存放静态文件)。在 public 下新建 index.html 和 main.js 文件。

阅读全文 »