zoukankan      html  css  js  c++  java
  • FFmpeg学习(七)流媒体服务器搭建

    一:音视频直播架构介绍

    (一)直播产品种类

    泛娱乐化直播:大规模直播(没有互动),多为观看,可以使用该架构。支持rtmp、hls、http/flv
    实时互动直播:使用了RTP协议,与目前的学习协议不同;常用webrtc

    (二)泛娱乐化直播架构

    1.主播端发送信令到信令服务器,创建房间,返回房间地址 。
    2.主播向获取的房间地址推流
    3.也是主播端,同1,只是协议不同
    4.同2
    5.观众端要观看节目,也需要发送信令给信令服务器。获取到主播节目的媒体流的地址。
    6.观众端获取了主播节目流地址,就可以去流媒体云中去拉流。赞赏、聊天,发送给信令服务器处理。

    (三)实时互动直播架构

    左互动(内部用户互动)
    右收听(提供大规模用户直播架构)

    (四)直播客户架构

     

    (五)流媒体服务搭建介绍

    1.有多种搭建方式:下面介绍3种

    1.使用Nginx搭建本地流媒体服务器
    2.通过SRS搭建RTMP server;实现流媒体服务器网络集群
    3.CDN网络(现成的,商业化的),自己会扩容

    2.介绍Nginx

    二:本机搭建Nginx RTMP服务

    (一)下载资源

    1.nginx源码:http://nginx.org/en/download.html

    tar -xvf nginx-1.19.10.tar.gz

    2.下载ginx-rtmp-module:https://github.com/arut/nginx-rtmp-module

    git clone https://github.com/arut/nginx-rtmp-module.git

    (二)RTMP环境搭建 

    ./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module

    prefix指定安装路径,add-module添加新模块。

    make -j 4

    -j开启多进程编译。

    sudo make install

    (三)配置环境

    修改nginx下的配置文件nginx.conf 

    #rtmp服务
    rtmp {
        server {
            #指定服务端口
            listen 1935;
            chunk_size 4000; #RTMP协议中需要
            #指定流应用:名称自定义
            application mytv {
                live on;  #直播
                allow play all;  #允许直接进行播放
            }
        }
    }

    (四)启动服务

    sudo ./sbin/nginx -c conf/nginx.conf

    (五)推/拉流测试

    1.监听频道,进行拉流

    ffplay rtmp://localhost/mytv/room01  #mytv是起的流应用名称;room01是自定义频道

    也可以保存:

     ffmpeg -i rtmp://localhost/mytv/room01 -c copy out2.flv

    2.进行推流

    ffmpeg -re -i ./out.flv -c copy -f flv rtmp://localhost/mytv/room01

    注意:在直播系统中不可能直接让用户知道视频流地址,所以需要一个信令服务器进行资源管理!!

    三:SRS流媒体服务

    (一)SRS介绍 

    github地址:https://github.com/ossrs/srs

    (二)单机部署SRS服务器

    1.下载源码

    git clone https://gitee.com/winlinvip/srs.oschina.git srs &&
    cd srs/trunk && git remote set-url origin https://github.com/ossrs/srs.git && 
    git checkout 3.0release && git pull

    2.配置与编译

     ./configure --prefix=/usr/local/srs 
    make -j 4

    3.安装

    sudo make install

    conf:存放配置信息,比如srs.conf、origin.cluster.edge.conf边缘结点配置
    etc:存放脚本(可以设置自动启动)
    objs:编译好的程序,也有日志

     

    srs.conf

    # main config for srs.
    # @see full.conf for detail config.
    
    listen              1935;  #侦听端口
    max_connections     1000;  #支持最大连接数
    srs_log_tank        file;  #日志输出形式
    srs_log_file        ./objs/srs.log; #日志存放位置
    daemon              on;
    http_api {            
        enabled         on;
        listen          1985;
    }
    http_server {
        enabled         on;
        listen          8080;
        dir             ./objs/nginx/html;
    }
    stats {
        network         0;
        disk            sda sdb xvda xvdb;
    }
    vhost __defaultVhost__ {
        hls {
            enabled         on;
        }
        http_remux {
            enabled     on;
            mount       [vhost]/[app]/[stream].flv;
        }
    }

    origin.cluster.edge.conf:配置边缘节点与源站之间的关系 

    edge.conf:配置边缘节点

    # the config for srs origin-edge cluster
    # @see https://github.com/ossrs/srs/wiki/v1_CN_Edge
    # @see full.conf for detail config.
    
    listen              1935;
    max_connections     1000;
    pid                 objs/edge.pid;
    vhost __defaultVhost__ {
        cluster {
            mode            remote;
            origin          127.0.0.1:19350;  #配置源站信息
        }
    }

    4.启动

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

    5.测试(同前面的nginx测试) 

    (三)RTMP中的URL与VHOST

    1.RTMP URL

    标准RTMP URL指的是最大兼容的RTMP URL,基本上所有的服务器和播放器都能识别的URL,和HTTP URL其实很相似,例如:

    HTTPSchemaHostPortAppStream
    http://192.168.1.10:80/players/srs_player.html http 192.168.1.10 80 players srs_player.html
    rtmp://192.168.1.10:1935/live/livestream rtmp 192.168.1.10 1935 live livestream

    其中:

    • Schema:协议头,HTTP为HTTP或HTTPS,RTMP为RTMP/RTMPS/RTMPE/RTMPT等众多协议,还有新出的RTMFP。
    • Host:主机,表示要连接的主机,可以为主机DNS名称或者IP地址。商用时,一般不会用IP地址,而是DNS名称,这样可以用CDN分发内容(CDN一般使用DNS调度,即不同网络和地理位置的用户,通过DNS解析到的IP不一样,实现用户的就近访问)。
    • Port:端口,HTTP默认为80,RTMP默认为1935。当端口没有指定时,使用默认端口。
    • Path:路径,HTTP访问的文件路径。
    • App:RTMP的Application(应用)名称,可以类比为文件夹。以文件夹来分类不同的流,没有特殊约定,可以任意划分。
    • Stream:RTMP的Stream(流)名称,可以类比为文件

    2.Vhost

    RTMP的Vhost和HTTP的Vhost概念是一样的:虚拟主机。详见下表(假设域名demo.srs.com被解析到IP为192.168.1.10的服务器):

    HTTPHostPortVhost
    http://demo.srs.com:80/players/srs_player.html 192.168.1.10 80 demo.srs.com
    rtmp://demo.srs.com:1935/live/livestream 192.168.1.10 1935 demo.srs.com

    Vhost主要的作用是:

    • 支持多用户:当一台服务器需要服务多个客户,譬如CDN有cctv(央视)和wasu(华数传媒)两个客户时,如何隔离他们两个的资源?相当于不同的用户共用一台计算机,他们可以在自己的文件系统建立同样的文件目录结构,但是彼此不会冲突。
    • 域名调度:CDN分发内容时,需要让用户访问离自己最近的边缘节点,边缘节点再从源站或上层节点获取数据,达到加速访问的效果。一般的做法就是Host是DNS域名,这样可以根据用户的信息解析到不同的节点。
    • 支持多配置:有时候需要使用不同的配置,考虑一个支持多终端(PC/Apple/Android)的应用,PC上RTMP分发,Apple和Android是HLS分发,如何让PC延迟最低,同时HLS也能支持,而且终端播放时尽量地址一致(降低终端开发难度)?可以使用两个Vhost,PC和HLS;PC配置为最低延迟的RTMP,并且将流转发给HLS的Vhost,可以对音频转码(可能不是H264/AAC)后切片为HLS。PC和HLS这两个Vhost的配置肯定是不一样的,播放时,流名称是一样,只需要使用不同的Host就可以。
    listen              1935;
    vhost show.cctv.cn {
        chunk_size 128;
    }
    vhost show.wasu.cn {
        chunk_size 4906;
    }

    nginx配置虚拟主机vhost的方法详解

    (四)SRS集群部署

    1.部署图

    源节点:

    两个边缘节点:

    开启集群:

    sudo ./objs/srs -c conf/origin.conf
    sudo ./objs/srs -c conf/edge.conf
    sudo ./objs/srs -c conf/edge2.conf

    推流/拉流测试:

    ffmpeg -re -i ./out.flv -c copy -f flv rtmp://127.0.0.1:1935/mytv/room01

    ffplay rtmp://127.0.0.1:1936/mytv/room01

    四:CDN了解

    (一)CDN

    (二)阿里云架构

  • 相关阅读:
    SPSS简单数据分析之分类汇总数据
    如何使用思维导图软件MindManager培养英语能力
    iMindMap画图技巧有哪些
    思维导图MindManager给我们的工作生活带来哪些便利
    bt下载器Folx智能标签系统可以用来做什么
    Beyond Compare文件夹同步详解
    RayFire Voronoi放射型破碎法相关属性详解
    怎么使用ABBYY FineReader 14填写表格
    详解MindMapper查看视图
    软件工程课程总结
  • 原文地址:https://www.cnblogs.com/ssyfj/p/14684510.html
Copyright © 2011-2022 走看看