• SRS Config 二 Stream Caster


    SRS StreamCaster

    1 官网简介

    Stream Converter侦听特殊的TCP/UDP端口,接受客户端连接和媒体流,并转成RTMP流,推送给SRS。

    简单来说,它将其他流转成RTMP流,工作流如下:

    Client ---PUSH--> Stream Converter --RTMP--> SRS --RTMP/FLV/HLS/WebRTC--> Clients
    

    Note: 有些流可能不止一个流,甚至有不同的传输通道。

    1.1 Build

    SRS默认开启Stream Converter的支持,不需要特别的编译参数。但某些协议可能需要特别的编译参数,请参考下面具体协议的使用介绍。

    1.2 Protocols

    目前Stream Converter支持的协议包括:

    • MPEG-TS over UDP: MPEG-TS裸流,基于UDP协议。
    • FLV by HTTP POST: FLV流,基于HTTP协议。
    • GB28181-2016: SIP和MPEG-PS流,基于TCP协议。

    1.3 Config

    Stream Converter相关的配置如下:

    # Push MPEGTS over UDP to SRS.
    stream_caster {
        # Whether stream converter is enabled.
        # Default: off
        enabled on;
        # The type of stream converter, could be:
        #       mpegts_over_udp, push MPEG-TS over UDP and convert to RTMP.
        caster mpegts_over_udp;
        # The output rtmp url.
        # For mpegts_over_udp converter, the typically output url:
        #           rtmp://127.0.0.1/live/livestream
        output rtmp://127.0.0.1/live/livestream;
        # The listen port for stream converter.
        # For mpegts_over_udp converter, listen at udp port. for example, 8935.
        listen 8935;
    }

    # Push FLV by HTTP POST to SRS.
    stream_caster {
        # Whether stream converter is enabled.
        # Default: off
        enabled on;
        # The type of stream converter, could be:
        #       flv, push FLV by HTTP POST and convert to RTMP.
        caster flv;
        # The output rtmp url.
        # For flv converter, the typically output url:
        #           rtmp://127.0.0.1/[app]/[stream]
        # For example, POST to url:
        #           http://127.0.0.1:8936/live/livestream.flv
        # Where the [app] is "live" and [stream] is "livestream", output is:
        #           rtmp://127.0.0.1/live/livestream
        output rtmp://127.0.0.1/[app]/[stream];
        # The listen port for stream converter.
        # For flv converter, listen at tcp port. for example, 8936.
        listen 8936;
    }

    # For GB28181 server, see https://github.com/ossrs/srs/issues/3176
    # For SIP specification, see https://www.ietf.org/rfc/rfc3261.html
    # For GB28181 2016 spec, see https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=469659DC56B9B8187671FF08748CEC89
    stream_caster {
        # Whether stream converter is enabled.
        # Default: off
        enabled off;
        # The type of stream converter, could be:
        #       gb28181, Push GB28181 stream and convert to RTMP.
        caster gb28181;
        # The output rtmp url.
        # For gb28181 converter, the typically output url:
        #           rtmp://127.0.0.1/live/[stream]
        # The available variables:
        #           [stream] The video channel codec ID.
        output rtmp://127.0.0.1/live/[stream];
        # The listen TCP/UDP port for stream converter.
        #       For gb28181 converter, listen at TCP/UDP port. for example, 9000.
        # @remark We always enable bundle for media streams at this port.
        listen 9000;
        # SIP server for GB28181. Please note that this is only a demonstrated SIP server, please never use it in your
        # online production environment. Instead please use [jsip](https://github.com/usnistgov/jsip) and there is a demo
        # [srs-sip](https://github.com/ossrs/srs-sip) also base on it.
        sip {
            # Whether enable embedded SIP server.
            # Default: on
            enabled on;
            # The SIP listen port, for both TCP and UDP protocol.
            # Default: 5060
            listen 5060;
            # The SIP or media transport timeout in seconds.
            # Default: 60
            timeout 60;
            # When media disconnect, the wait time in seconds to re-invite device to publish. During this wait time, device
            # might send bye or unregister message(expire is 0), so that we will cancel the re-invite.
            # Default: 5
            reinvite 5;
            # The exposed candidate IPs, response in SDP connection line. It can be:
            #       *           Retrieve server IP automatically, from all network interfaces.
            #       $CANDIDATE  Read the IP from ENV variable, use * if not set.
            #       x.x.x.x     A specified IP address or DNS name, use * if 0.0.0.0.
            # Default: *
            candidate *;
        }
    }

    1.4 Push MPEG-TS over UDP

    你可以推送MPEGTS UDP流到SRS,转换成其他的协议。

    首先,使用MPEGTS相关配置启动SRS:

    ./objs/srs -c conf/push.mpegts.over.udp.conf
    

    Note: 关于详细的配置,请参考Configmpegts_over_udp的部分。

    然后,使用编码器推流,比如用FFmpeg:

    ffmpeg -re -f flv -i doc/source.flv -c copy -f mpegts udp://127.0.0.1:8935
    

    现在,就可以播放流了:

    注意MPEGTS UDP是每个端口对应一个具体的RTMP流。

    Note: 关于开发的一些细节,请参考#250.

    1.5 Push HTTP FLV to SRS

    你可以推送HTTP FLV流到SRS,对于一些移动端设备,使用HTTP推流会很简单。

    首先,使用HTTP FLV相关配置启动SRS:

    ./objs/srs -c conf/push.flv.conf
    

    Note: 关于详细的配置,请参考Configflv的部分。

    然后,使用编码器推流,比如用FFmpeg:

    1. ffmpeg -re -f flv -i doc/source.flv -c copy \
    2. -f flv http://127.0.0.1:8936/live/livestream.flv

    现在,就可以播放流了:

    Note: 关于开发的一些细节,请参考#2611.

    1.6 Push GB28181 to SRS

    GB28181是国内安防摄像头基本都会支持的协议,属于国家标准,主要是摄像头主动连接到服务器的场景。 随着互联网的普及,安防摄像头有时候也需要接入互联网,比如慢直播,或者景区直播等。

    Note: 一般安防摄像头的典型场景,是通过RTSP从摄像头拉流,而不是摄像头主动推流,请参考#2304的描述。

    再次强调,SRS支持GB协议,其实并不是做安防场景,而只是支持了摄像头上互联网这个比较新也比较小的场景。当然如果有开发能力,也是完全能基于SRS做安防的流媒体服务器。

    首先,使用GB28181相关配置启动SRS:

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

    Note: 关于详细的配置,请参考Configgb28181的部分。

    然后,配置摄像头推流:

    Note: 音频请选择AAC编码,视频选择子码流,传输协议选择TCP,协议版本选择GB28181-2016。

    Note: 配置中CANDIDATE需要配置为摄像头能访问到的IP地址,详细请参考Protocol: GB28181: Candidate

    现在,就可以播放流了,请将设备ID换成你的设备:

    Note: 关于开发的一些细节,请参考#3176.

    2 应用场景

    常见的应用场景包括:

    • Push MPEG-TS over UDP, 通过UDP协议,将裸流MPEGTS推送到SRS,主要是一些编码器支持。
    • Push FLV by HTTP POST, 通过HTTP POST,将FLV流推送到SRS,主要是移动端支持。
    • Push GB28181 over TCP, 通过TCP协议,将摄像头的流推送到SRS,主要是监控摄像头支持。

    Note: FFmpeg支持推送MPEGTS和FLV流到SRS,可以用FFmpeg测试。

    3 转码服务

    SRS具有部署简单,提供了多种安装方案Docker镜像、K8s部署、可观测性日志和监控指标等,提供云SRS无门槛应用。SRS是高性能流媒体服务器,是同类服务器的2~3倍性能,提供非常完整的概念和一致性设计,实现高效的流媒体应用。

          实际项目中视频转码一般不建议与SRS的流媒体服务器在同一台设备上运行,这也是目前各种视频流媒体项目中的主流方案,转码交由专用的转码服务器来处理,流媒体只负责视频流的推流、拉流操作。SRS如何配置安装配置外置转码服务器呢?

    尽管流媒体服务中通常有单独的服务器支持转码部分,但SRS Stream Caster并不是多余的。SRS Stream Caster在流媒体处理中扮演着重要的角色,它可以将原始的RTMP流转换为其他协议的流媒体数据,如HLS、DASH等。在流媒体服务中,转码部分通常是将原始流媒体数据进行编码转换,使其适应不同的网络协议和设备类型。这种转码操作可以在单独的服务器上完成,以便减轻主服务器的负载并提高性能。但是,这种转码操作也需要消耗大量的计算资源和带宽。

    SRS Stream Caster的作用是在流媒体服务中提供分布式转码功能。它可以将转码任务分配给多个节点,这些节点可以是独立的服务器或者在集群中的节点。通过分布式转码,SRS Stream Caster可以大大提高转码效率,减少单点故障和负载压力。

    因此,尽管流媒体服务中通常有单独的服务器支持转码部分,SRS Stream Caster仍然是非常有用的。它可以提供分布式转码功能,提高转码效率和可靠性,并适应大规模流媒体处理的需求。

    SRS Stream Caster支持的转码功能有限,它主要支持将RTMP流转换为HLS、DASH等协议的流媒体数据。此外,SRS Stream Caster还支持将流媒体数据进行切片和录制等功能。但是,与专业的转码工具相比,SRS StreamCaster的转码功能可能还存在一些限制和不足之处。

    需要注意的是,SRS是一个开源的流媒体服务器项目,其功能和性能会不断地进行更新和改进。因此,如果您需要使用SRS进行流媒体转码处理,建议先查阅SRS的官方文档和最新版本,以了解其当前支持的转码功能和处理能力。同时,您也可以考虑使用其他专业的转码工具来满足您的需求。

    4 专用转码服务器

    4.1硬件设备转码

    如 PRN1600是一款高性能的集成了转码、融屏、协议转换的高性能转码服务器系统。可以广泛应用于各种视频转码需求的应用场景,如高清视频降低码率,不同视频协议间无法互通,视频融屏播放,视频录制等不同的应用场景。PRN1600转码服务器可以支持并发16路1080P视频实时转码,支持多路4K视频转码,支持容屏输出,支持视频编码格式调整,分辨率、帧率、码率调整,满足各种环境下的视频转码融合应用12。

    硬件设备转码并发能力有限,成本较高,一般不适合大规模高并发场景。一般应用在边端

    4.2 软件转码 部署到独立服务器

    一般通过ffmpeg处理转码,作为上游服务接入到srs,srs内部转码也是通过ffmpeg.

  • 相关阅读:
    统一消息分发中心设计
    笔记-Python lambda
    快速上手Linux核心命令(十一):Linux用户相关命令
    通过WebSocket实现实时系统通知,以后再也不能装作没看到老板的通知了~~
    一道北大强基题背后的故事(一)——从走弯路到看答案
    IPETRONIK数采与第三方软件集成
    ISO体系认证的流程 ISO认证需要的材料
    如何根据Explain执行计划对数据库查询语句进行优化
    SpringBoot 过滤器和拦截器的区别
    Linux基础操作
  • 原文地址:https://blog.csdn.net/TyearLin/article/details/133889545