用SRS和FFMPEG进行直播流转码

WIKI:https://github.com/simple-rtmp-server/srs/wiki/v1_CN_FFMPEG

一、直播流转码配置及说明

listen              1935;

max_connections     1000;

#定义一个默认的vhost

vhost __defaultVhost__ {

}

#定义一个名为v.flyfn.com的vhost,这样只对v.flyfn.com这个vhost中所有流进行转码

vhost v.flyfn.com {

    transcode {

        enabled     on;     #开始实时转码

        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;   #ffmpeg的执行文件

        engine sd {      #这里通过engine定义转一个名为sd的转码引擎,这个名称在下面输出流的时候用到

            enabled         on;   #开始,设置为off就是关闭

            vfilter {     #对应ffmpeg中的滤镜参数,可以在这里写

                v           quiet;   #减少ffmpeg的输出日志

            }

            vcodec          libx264; #视频编码器

            vbitrate        500;   #视频比特率

            vfps            25;   #视频帧率

            vwidth          768;    #宽

            vheight         320;    #高

            vthreads        12;   #使用ffmpeg线程数

            vprofile        main;  #编码等级,high、main、baseline

            vpreset         medium;  #视频预设

            vparams {        #ffmpeg的其他视频参数

                g            100;  # 指定gop时长为4秒=100 / 25(vfps)

            }

            acodec          libfdk_aac;   #音频编码器

            abitrate        70;     #音频比特率

            asample_rate    44100;     #音频采样率

            achannels       2;    #声道

            aparams {    #ffmpeg中的其他音频参数

            }

           #转码后的流输出到那里,这里是输出到本机了。另外一种推流到vhost的方法:

            #rtmp://SRS_IP:[port]/[app]?vhost=[vhost]/[stream]

            #[vhost] 输入流的vhost

            #[port] 输入流的端口

            #[app] 输入流的app

            #[stream] 输入流的流名称

            #[engine] 转码引擎的名称

            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];

        }

        #可以定义多个engine

        engine ld {

            enabled         on;

            vfilter {

            }

            vcodec          libx264;

            vbitrate        300;

            vfps            25;

            vwidth          640;

            vheight         480;

            vthreads        12;

            vprofile        main;

            vpreset         medium;

            vparams {

            }

            acodec          libfdk_aac;

            abitrate        70;

            asample_rate    44100;

            achannels       2;

            aparams {

            }

            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];

        }

    }

}

二、用ffmpeg推流

./ffmpeg -re -i 'abc.rmvb' -f flv -y rtmp://v.flyfn.com:1935/live?vhost=v.flyfn.com/test


原始视频播放:rtmp://v.flyfn.com/live/test

转码流1(sd):rtmp://v.flyfn.com/live/test_sd

转码流2(ld):rtmp://v.flyfn.com/live/test_ld


三、推流到srs的vhost时的另一种方法

rtmp://SRS_IP:[port]/[app]?vhost=[vhost]/[stream]


四、如何对某一个app下的流都进行转码

listen 1935;

vhost v.flyfn.com {

    transcode live{          #对形如rtmp://srs_ip:1935/live下的流进行转码

        ......

    }

}

五、如何对某一路直播流进行转码

listen 1935;

vhost v.flyfn.com {

    transcode live/livestream {          #对形如rtmp://srs_ip:1935/live/livestream进行转码

        ......

    }

}

<think>我们需要回答用户的问题:SRS是否支持将RTMP流转换成SRT流? 根据之前的配置问题,我们知道SRS确实支持RTMP转SRT,但需要正确配置。 在之前的回答中,我们提供了通过转引擎(transcode)来实现RTMP到SRT的转换。 因此,回答是肯定的,SRS支持将RTMP流转换成SRT流。 但是,我们需要注意,SRS的RTMP转SRT并不是内置的自动转换,而是需要通过配置转引擎(engine)来实现。 接下来,按照要求,我们需要在回答后提出3-5个相关问题。 回答结构: 1. 直接回答问题:是的,SRS支持将RTMP流转换成SRT流。 2. 简要说明如何配置(可以引用之前的配置示例)。 3. 最后提出相关问题。 注意:最后必须输出“§§相关问题§§”开头,然后列出问题。 由于用户之前已经提供过配置,并且我们之前也回答过相关配置,这里可以简要说明。</think>### SRS 支持 RTMP 转 SRT 的能力说明 是的,SRS (Simple Realtime Server) **完全支持**将 RTMP 流转换为 SRT 流。这是 SRS 的核心功能之一,通过以下技术实现: #### 实现原理 1. **协议桥接机制** - RTMP 作为输入协议(推流端) - SRT 作为输出协议(拉流端) - SRS 在内部完成协议转换封装格式转换(FLV→TS) 2. **关键配置组件** ```conf vhost __defaultVhost__ { srt { enabled on; # 启用SRT服务 gop_cache on; # 解决首屏延迟 } transcode { # 转引擎 enabled on; engine rtmp_to_srt { # RTMP→SRT转换规则 iformat flv; oformat mpegts; output srt://[ip]:6666?streamid=...; } } } ``` #### 完整工作流程 ```mermaid graph LR A[RTMP推流] -->|rtmp://server/live/stream| B(SRS服务器) B --> C{协议转换} C -->|封装转换| D[FLV→MPEG-TS] C -->|协议转换| E[RTMP→SRT] B -->|srt://server:6666| F[SRT拉流端] ``` #### 配置要点 1. **流映射规则** - RTMP 流路径 `[app]/[stream]` 必须与 SRT 的 `streamid` 匹配 - 示例:`rtmp://server/live/mystream` → `srt://server:6666?streamid=#!::r=live/mystream,m=request` 2. **必要参数** ```conf srt_server { listen 6666; # SRT监听端口 recvlatency 200; # 网络抖动缓冲 peerlatency 100; # 对端延迟补偿 } ``` 3. **转引擎激活** - 必须显式启用 `transcode` 并指定 `ffmpeg` 路径 - 支持直接流转发(`copy`)或实时转 #### 验证方法 ```bash # 查看流状态 curl http://localhost:1985/api/v1/streams/ # 测试SRT拉流 srt-live-transmit srt://localhost:6666?streamid=#!::r=live/mystream,m=request file://test.ts ``` > **注意**:SRS 4.0+ 版本原生支持此功能,无需额外插件。若转换失败,通常因配置映射错误或TS封装问题导致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值