现代H5浏览器产业链越来越丰富,http+websocket+webrtc+sip组合已经是一种非常成熟的web原生音视频通讯解决方案

FreeSWITCH是一个开源的电话软交换平台,早在SIP年代就非常有名,自从支持WebSocket传输sip信令后与Web结合玩法多了许多

WebRTC提供了音视频通讯的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台,但就是没有信令协议部分

Chrome、Firefox等浏览器为了从保护用户隐私绝对安全角度考虑,纷纷提高了Web原生应用访问摄像头、麦克风的门槛:如不是用https、wss安全协议则会有各种警告及确认甚至直接拒绝

WS、WSS其实就是HTTP、HTTPS的WebSocket协议名称,其使用方式及默认端口都完全一致

综上所述,如果都用同一个域名地址承载web sip相关服务方便用户使用,就需要在nginx上做一些优雅的配置

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}
 
server {
    listen       80;
    listen       443 ssl;
    root         /var/www/sip;
 
    proxy_read_timeout 3600;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
 
    location / {
        if ($scheme = 'http') {
            set $ws_port 5066;
        }
        if ($scheme = 'https') {
            set $ws_port 7443;
        }
        if ($http_upgrade = 'websocket') {
            proxy_pass    $scheme://$server_addr:$ws_port;
        }
    }
}

其对应freeswitch相关端口配置片断如下

 
1
2
3
4
5
6
7
8
9
<!-- Internal SIP Profile -->
<X-PRE-PROCESS cmd="set" data="internal_sip_port=5060"/>
<!-- RTP port range -->
<param name="rtp-start-port" value="16384"/>
<param name="rtp-end-port" value="32768"/>
<!-- for sip over websocket support -->
<param name="ws-binding"  value=":5066"/>
<!-- for sip over secure websocket support -->
<param name="wss-binding" value=":7443"/>

注:
sip和rtp端口不经nginx直连,但需要防火墙做相应的白名单
ws5066端口和wss7443端口间接通过nginx的http端口和https端口反向代理提供服务
nginx默认的http80端口和https443端口又用来提供webrtc前端相关资源访问

最新文章

  1. linq to entity 查询数据表是错误解决
  2. MySQL中distinct和group by性能比较[转]
  3. hadoop-spark-hive-hbase配置相关说明
  4. Java面试题-多线程
  5. SORT ORDER BY STOPKEY
  6. ArcGIS API for JavaScript 4.2学习笔记[13] Layer的弹窗(PopupTemplate)
  7. pip安装报错 解决办法
  8. tips:Jquery的attr和prop的区别
  9. socket.io不为人知的功能
  10. 20145320《WEB基础实践》
  11. 杭电多校第七场 1010 Sequence(除法分块+矩阵快速幂)
  12. 笔记:认识 head 标签 待 更新中……
  13. 再续session和cookie (网络整理)
  14. zsh: command not found: pip 解决方法
  15. URAL 1995 Illegal spices 贪心构造
  16. Hadoop体系结构之 HDFS
  17. 利用AdaBoost方法构建多个弱分类器进行分类
  18. Bellman_Ford算法(求一个点到任意一点的最短距离)
  19. 《Unity預計算即時GI》笔记:一、基本概念与一些设置
  20. [NEXT] 时间管理实践

热门文章

  1. python自动化之(自动生成测试报告)
  2. Rancher v1.6.29 Docker单节点部署
  3. Apache/Nginx/IIS日志记录的各个字段内容与含义
  4. noip13
  5. 有了Swagger2,再也不用为写Api文档头疼了
  6. flutter中修改键盘状态
  7. 【iKBC poker2】使用说明书(简体中文版)自用
  8. WPF日积月累之文件监测与DataGrid指定Row的颜色
  9. WPF---数据绑定之ValidationRule数据校验综合Demo(七)
  10. qt 中的画图