|
| 1 | + 思路图 |
1 | 2 | ## 流媒体系统搭建
|
2 | 3 |
|
3 | 4 | * 一、推流设备必须提前填写进后台数据库中
|
4 | 5 |
|
5 |
| - * 概述:device_domain,也就是设备的负载均衡的地址 |
| 6 | + > 概述:device_domain,也就是设备的负载均衡的地址 |
6 | 7 |
|
7 | 8 | * 二、OBS推流
|
8 | 9 |
|
9 |
| - * 流程: |
10 |
| - > OBS=========>>>>>推流=========>>>>>Device_SLB |
| 10 | + > 流程: |
| 11 | + >> OBS=========>>>>>推流=========>>>>>Device_SLB |
11 | 12 |
|
12 |
| - * 概述:OBS推流到设备负载均衡服务 |
| 13 | + > 概述:OBS推流到设备负载均衡服务 |
13 | 14 |
|
14 | 15 | * 三、Device_SLB 设备负载均衡
|
15 | 16 |
|
16 |
| - * 流程: |
17 |
| - > Device_SLB=========>>>>>负载分发到=========>>>>>DeviceServerRtmp |
| 17 | + > 流程: |
| 18 | + >> Device_SLB=========>>>>>负载分发到=========>>>>>DeviceServerRtmp |
18 | 19 |
|
19 | 20 | > 概述:设备负载均衡服务器根据转发策略分发到后端多台 ECS 设备流媒体服务器
|
20 | 21 |
|
21 | 22 |
|
22 | 23 | * 四、具体设备流媒体服务器用FFmpeg拉流到 URL_Stream 负载均衡服务器
|
23 | 24 |
|
24 |
| - * 流程: |
25 |
| - > DeviceRtmp=========>>>>>FFmpeg拉流=========>>>>>URL_Stream 负载均衡 |
| 25 | + > 流程: |
| 26 | + >> DeviceRtmp=========>>>>>FFmpeg拉流=========>>>>>URL_Stream 负载均衡 |
26 | 27 |
|
27 | 28 | > 概述:设备流媒体服务器将根据RTMP执行一个shell脚本在Redis获取该设备号对应的 URL_Stream 推流负载均衡(116.62.182.199),通过FFmpeg把本地的流copy到该负载均衡去。URL_Stream负载均衡服务器根据转发策略分发到后端多台
|
28 | 29 | 设备负载均衡上去( 我自己配置的Nginx负载均衡)
|
29 | 30 |
|
30 | 31 | * 五、URL_Stream 负载均衡分发到具体的URL_Stream后端服务器
|
31 | 32 |
|
32 |
| - * 流程: |
33 |
| - > URL_Stream负载均衡服务器=========>>>>>负载分发到=========>>>>>URL_Stream后端服务器 |
| 33 | + > 流程: |
| 34 | + >> URL_Stream负载均衡服务器=========>>>>>负载分发到=========>>>>>URL_Stream后端服务器 |
34 | 35 |
|
35 |
| - * 概述:URL_Stream负载均衡服务器根据转发策略分发到后端多台 ECS URL_Stream流媒体服务器 |
| 36 | + > 概述:URL_Stream负载均衡服务器根据转发策略分发到后端多台 ECS URL_Stream流媒体服务器 |
36 | 37 |
|
37 | 38 | * 六、URL_Stream后端服务器分发到LiveNodeSLB负载均衡
|
38 | 39 |
|
39 |
| - * 流程: |
40 |
| - > URL_Stream后端服务器========>>>>>具体分发到=========>>>>>LiveNodeSLB节点负载均衡 |
| 40 | + > 流程: |
| 41 | + >> URL_Stream后端服务器========>>>>>具体分发到=========>>>>>LiveNodeSLB节点负载均衡 |
41 | 42 |
|
42 | 43 | > 概述:注意:在这里的URL_Stream后端服务器分发分发的是一个数组有"|"分割的多个IP地址(该地址也就是LiveNodeSLB节点负载均衡)
|
43 | 44 |
|
44 | 45 | * 七、LiveNodeSLB节点负载均衡分发到具体的LiveNode
|
45 | 46 |
|
46 |
| - * 流程: |
47 |
| - > LiveNodeSLB=========>>>>>负载分发=========>>>>>LiveNode |
| 47 | + > 流程: |
| 48 | + >> LiveNodeSLB=========>>>>>负载分发=========>>>>>LiveNode |
48 | 49 |
|
49 | 50 | > 推流概述:节点负载均衡服务器LiveNodeSLB根据转发策略分发到后端多台 ECS 节点流媒体服务器,至此,流的推流、转发、分发到此结束!
|
50 | 51 |
|
51 | 52 | * 八、CDN_proxy节点代理服务器
|
52 | 53 |
|
53 |
| - * 流程: |
54 |
| - > 客户端请求M3U8播放=========>>>>>CDN_proxy节点代理=========>>>>>具体直播节点LiveNode |
| 54 | + > 流程: |
| 55 | + >> 客户端请求M3U8播放=========>>>>>CDN_proxy节点代理=========>>>>>具体直播节点LiveNode |
55 | 56 |
|
56 | 57 | > 推流概述:客户端请求播放一个M3U8文件,如:http://CDN_proxy_host/hls/tinwyan123.m3u8 , 其中“tinwyan123” 表示推流名称,CDN_proxy通过虚拟服务地址执行一个LUA脚本,在该Lua脚本中
|
57 | 58 | 执行一个Redis查询,查询条件的就是方才提到的“tinwyan123”(重要),根据流名称获取该流名称的直播节点LiveNode 的内网地址,返回给Nginx的Location 然后Nginx执行一个proxy_pass反向代理该具体的
|
58 | 59 | LiveNode直播节点,返回该流的播放地址
|
59 | 60 |
|
60 | 61 | * 九、总结
|
61 | 62 |
|
62 |
| - * 该流路径只有推流(OBS推流地址)和播流地址是外网(CDN_proxy),其余的一律使用内网走(据说不消耗流量) |
| 63 | + > 该流路径只有推流(OBS推流地址)和播流地址是外网(CDN_proxy),其余的一律使用内网走(据说不消耗流量) |
63 | 64 |
|
64 | 65 |
|
0 commit comments