Simple-RTMP-Server学习第一天

作者: 小王同学加油 | 来源:发表于2017-07-11 15:27 被阅读952次

SRS

SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码

1 概念

边缘edge服务器

    就是直播缓存服务器

上行Edge边缘服务器

湖南有个 电信ADSL用户要推流发布自己的直播流,要是直接推流到北京BGP可能效果不是很好,
可以在 湖南电信机房部署一个边缘,用户推流到湖南边缘,边缘转发给北京源站BGP
湖南机房就是边缘edge服务器

上行Edge特点:

  • 对流直接转发 不做任何处理

下行Edge边缘服务器

假设北京部署源站
在全国32个省每个省都部署了10台服务器,一共就有320台边缘,
每个省1台边缘服务器都有 2000用户观看,那么就有64万用户,每秒钟集群发送640Gbps数据;
而回源链接只有320个,
也就是说, 多个客户端连接到边缘时,只有一路回源
why why
当用户播放边缘服务器的流时,边缘服务器看有没有缓存,若缓存了就直接将流发给客户端
(有缓存直接播放 不从需要拉去操作不产生回源)
若没有缓存,则发起一路回源链接,从源站取数据源源不断放到自己的缓存队列。
也就是说, 多个客户端连接到边缘时,只有一路回源

日志:

  • 对于客户端连接没有产生回源

    RTMP client ip=127.0.0.1 
    source url=/live/, ip=127.0.0.1 , cache=1, is_edge=0, source_id=-1[-1]
    
  • 对于客户端连接产生回源
    RTMP client ip=127.0.0.1
    source url=/live/, ip=10.44.88.99, cache=1, is_edge=0, source_id=157[157]

  • srs服务发生中断 客户端流没有发生变化 更新汇源地址

[2017-07-10 11:30:29.972][trace][1095][172] RTMP client ip=10.69.56.169
[2017-07-10 11:30:30.264][trace][1095][172] client identified, type=Play, stream_name=, duration=-1.00
[2017-07-10 11:30:30.264][trace][1095][172] source url=/live/, ip=10.69.56.169, cache=1, is_edge=0, source_id=166[166]
[2017-07-10 13:57:57.609][trace][1095][178] update source_id=184[184]
```
下行边缘特点:
- 容错性
SRS的边缘可以指定多个源站, 
   在源站出现故障时会自动切换到下一个源站,不影响用户观看
   客户度流不发生改变 重新读取故障后的流

- 高并发
  >  多个客户端看同一视频, 只要产生一回源
    这说法错误 一个socket连接是不考虑里面传输具体内容的
   
 

###HLS边缘服务器
-----------------------------------------------------------------------
###什么是HLS
>HTTP Live Streaming(缩写是HLS)基于HTTP的流媒体网络传输协议。
它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些

HLS切片配置在源站,只有源站会在推流上来就产生HLS切片(上行推流端的不会产生)
边缘只有在访问时才会回源(这个时候 也会生成HLS)

也就是说,HLS的边缘需要使用WEB服务器缓存,
譬如nginx反向代理,squid,或者traffic server等。
why 不懂
The ngx_http_hls_module module provides HTTP Live Streaming (HLS) 

HLS边缘服务器根据hls协议进程切割流视频


## 2 流程图:

###上行边缘主要流程是:
- 客户端连接到SRS
- 开始推流到SRS。
- 开始转发到源站服务器

###下行边缘的主要流程是:
-   客户端连接到SRS
-  开始播放SRS的流
- 若流存在则直接播放。
- 若流不存在,则从源站开始取流。
其他其他流的功能,譬如转码/转发/采集等等。
核心原则是:
- 边缘服务器在没有流时,向源站拉取流。
- 当流建立起来后,边缘完全变成源站服务器,对流的处理逻辑保持一致。
- 支持回多个源站,错误时切换。这样可以支持上层服务器热备

### 源站
![中间节点.png](https://img.haomeiwen.com/i1837968/48934fd0a5d3b5dd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


##集群部署
-----------------------------------------------

下面举例说明如何配置一个源站和集群。

- 边缘配置参考edge.conf:
>listen              19360; //边缘服务器端口
max_connections     1000;
external_ip 10.112.78.192:19360; 
vhost __defaultVhost__ {
   mode            remote;
   origin          10.112.78.190:19350; //指定源站服务器地址和端口
}

- 源站配置,参考origin.conf:

>listen              19350;
pid                 objs/origin.pid;
srs_log_file        ./objs/origin.log;
vhost __defaultVhost__ {
}

./objs/srs -c conf/edge.conf

推流:

![image.png](https://img.haomeiwen.com/i1837968/329dcd368f7755d1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

播放:

![image.png](https://img.haomeiwen.com/i1837968/8bbc21c1fce2f37e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

说明:
- 推送边缘服务 播放源站服务  push --edg(10.112.78.33)--orig(10.112.78.99)--play
rtmp://10.112.78.33:19360/live
rtmp://10.112.78.99:19360/live

参考

1直播数据分析  http://www.chnvideo.com/blog-classic-data.html
2 项目日志文档:https://github.com/ossrs/srs/wiki/v1_CN_SrsLog
3 https://github.com/ossrs/srs/wiki/v1_CN_Edge

相关文章

网友评论

    本文标题:Simple-RTMP-Server学习第一天

    本文链接:https://www.haomeiwen.com/subject/gllmcxtx.html