• SRT服务端的搭建


    1.简介

    ​ 前面讲了SRT有三种模式,那么这节来说说Listener模式服务端的搭建。关于Listener模式之前在sample中的srt-file-transmit和srt-live-transmit就有简单用到,本章的Listener模式服务端,考虑到实际生产使用,就采用开源项目srs进行搭建。

    ​ SRS是一个开源的(MIT协议)简单高效的实时视频服务器,支持RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH和GB28181等协议。 SRS媒体服务器和FFmpeg、OBS、VLC、 WebRTC等客户端配合使用,提供流的接收和分发的能力,是一个典型的发布 (推流)和订阅(播放)服务器模型。 SRS支持互联网广泛应用的音视频协议转换,比如可以将RTMP或SRT, 转成HLS或HTTP-FLV或WebRTC等协议。

    ​ SRS提供了HTTP API开放接口,可以查询系统的状态和流状态。同时还支持HTTP Callback 支持回调能力,主动通知你的系统,并可以实现流的鉴权能力和业务定制(比如动态DVR)。SRS也支持官方的Prometheus Exporter 对接到云原生的监控系统,具备强大的可观测性。SRS支持会话级别可追踪日志,极大降低了系统维护成本。
    ​ SRS使用ANSI C++ (98)开发,只使用了基本的C++能力,可以在Linux、Windows、macOS等多个平台运行。

    2.下载SRS源码

    https://github.com/ossrs/srs.git

    3.编译源码

    cd srs/trunk
    ./configure --srt=on
    make
    make install
    
    • 1
    • 2
    • 3
    • 4

    4.编写SRS配置文件

    ​ 将以下内容保存为文件,譬如conf/srt.conf,服务器启动时指定该配置文件(srs的conf文件夹有该文件)。

    # conf/srt.conf
    listen              1935;
    max_connections     1000;
    daemon              off;
    srs_log_tank        console;
    srt_server {
        enabled on;
        listen 10080;
    }
    vhost __defaultVhost__ {
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    5.启动SRS

    ./objs/srs -c conf/srt.conf
    
    • 1

    6.推流测试

    1.借助FFMPEG产生一个UDP流,当然有其他方式也行:

    ffmpeg  -stream_loop  -1  -re  -i   /home/msatartup.mp3   -f   mpegts   udp://127.0.0.1:12001?pkt_size=1316
    
    • 1

    2.采用srt-live-transmit工具作为caller方进行推流

    srt-live-transmit udp://127.0.0.1:12001 'srt://127.0.0.1:10080?streamid=#!::r=live/livestream,m=publish'
    
    • 1

    3.采用srt-ffplay工具作为caller方进行推流

    srt-ffplay 'srt://127.0.0.1:10080?streamid=#!::r=live/livestream,m=request'
    
    • 1

    7.SRS对SRT的URL的格式要求

    ​ 因为srt是四层传输协议,所以无法确定对某个srt url操作是推流还是拉流。

    ​ 在srt官网中有对推/拉流实现方法的推荐:AccessControl.md 关键方法是通过streamid参数来明确url的作用,streamid的格式符合YAML格式。

    7.1.SRT URL no Vhost

    srt url举例:

    • 推流地址: srt://127.0.0.1:10080?streamid=#!::r=live/livestream,m=publish
    • 拉流地址: srt://127.0.0.1:10080?streamid=#!::r=live/livestream,m=request
    • 对应的rtmp拉流地址为:rtmp://127.0.0.1/live/livestream

    其中:

    • #!::
      • 开始标记,符合yaml格式标准
    • r
      • 映射到rtmp地址中的/app/stream;
    • m
      • publish表示推流。
      • request表示拉流。

    7.2.SRT URL for Vhost

    srt url举例:

    • 推流地址: srt://127.0.0.1:10080?streamid=#!::h=srs.srt.com.cn,r=live/livestream,m=publish
    • 拉流地址: srt://127.0.0.1:10080?streamid=#!::h=srs.srt.com.cn,r=live/livestream,m=request
    • 对应的rtmp拉流地址为:rtmp://127.0.0.1/live/livestream?vhost=srs.srt.com.cn

    其中:

    • h

      • 映射到rtmp地址中的vhost;

    8.问题

    ​ 前面我们知道SRT在网络传输层运行,它可以传输任何类型的视频格式、编解码器、分辨率或帧速率。

    ​ 但目前的SRS/4.0.265发布版本,在接收到SRT推流时,会将流自动转换为RTMP协议输出,导致对音视频编码格式有了要求,使用起来十分不方便。好在使用最新的SRT开发版本,已经在着手解决该问题。另外,也可以通过修改SRS的源码,暂时关闭SRS到RTMP的输出功能;

  • 相关阅读:
    Nginx监控模块
    chatgpt赋能python:Python文件大小:如何优化和管理您的文件大小
    信贷风控指南丨人工智能专家直播解析信贷评分卡模型
    xss基础
    Toxel 与 PCPC II
    CS231n课程笔记:Leture2 Image Classification
    LeetCode. 基本数据结构
    监控远程log4.net日志
    Oracle/PLSQL: Atan Function
    python调用win32api 拉起wps问题排查解决方案
  • 原文地址:https://blog.csdn.net/weixin_35804181/article/details/127809015