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