srs系列六——支持直播流转码

大致流程:通过FFMPEG对RTMP直播流转码,SRS在收到编码器推送的直播流后,可以对直播流进行转码,输出RTMP流到服务器(也可以到SRS自己)

一、srs配置

此处用srs3.0版本的即可实现,安装部署流程请参考前文。
ffmpeg的安装参考:ffmpeg安装部署–yum安装
srs配置如下:

listen              1935;
vhost __defaultVhost__ {
   # 对app为live并且流名称为livestream的流转码 可自定义
    transcode live/livestream {
        enabled     on;
        #  ffmpeg 的路径
        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
        # 此处可更改,转码出来的流即为rtmp://192.168.1.170:1935/live/livestream_ff
        engine ff{
            enabled         on;
            #  添加在iformat之前的参数。譬如指定rtsp的transport为tcp。
            perfile {
                re;
                rtsp_transport tcp;
            }
          
            iformat         flv;
            #添加在vcodec之前的滤镜参数。
            vfilter {
                v           quiet;
            }
            # 指定视频编码器
            vcodec          libx264;
            # 输出的视频码率
            vbitrate        1500;
            # 输出的视频帧率
            vfps            25;
            # 输出的视频宽度x高度,以及宽高比
            vwidth          768;
            vheight         320;
            # 编码线程数
            vthreads        12;
            #编码x264的profile
            vprofile        main;
            # 编码x264的preset
            vpreset         medium;
            # 添加在vcodec之后,acodec之前的视频编码参数。
            vparams {
                t               100;
                coder           1;
                b_strategy      2;
                bf              3;
                refs            10;
            }
            # a音频编码器
            acodec          libfdk_aac;
            # 音频输出码率。libaacplus:16-72k。libfdk_aac没有限制。
            abitrate        70;
            # 音频采样率
            asample_rate    44100;
            # 音频声道
            achannels       2;
            # 添加在acodec之后,-y之前的音频编码参数。
            aparams {
                profile:a   aac_low;
                bsf:a       aac_adtstoasc;
            }
            oformat         flv;
            #  [vhost] 输入流的vhost。譬如:dev
			# [port] 输入流的端口。譬如:1935
			# [app] 输入流的app。譬如:live
			# [stream] 输入流名称。譬如:livestream
			# [engine] 转码engine名称,engine后面就是名称。譬如:ff 注意:转码会使用自动检测,保证推送到自己的流不		会被再次# 转码。但转码推送到SRS自己的流可以被切片成HLS。譬如,若开启了HLS,上面的live/livestream,和转码出来的流live/livestream_ff都能观看HLS。
            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
        }
    }
}

推送流:rtmp://dev:1935/live/livestream
观看原始流:rtmp://dev:1935/live/livestream
观看转码流:rtmp://dev:1935/live/livestream_ff

二、转码720p实际应用配置

下面是我实际应用过程的一些配置,请参考:

 transcode cccc{
  enabled     on;
        ffmpeg      /usr/bin/ffmpeg;
        engine ff {
            enabled         on;
            vfilter {
                # -v quiet
                v           quiet;
            }
            vcodec          libx264;
            vbitrate        500;
            vfps            25;
            vwidth          1280;
            vheight         720;
            vthreads        12;
            vprofile        main;
            vpreset         medium;
            vparams {
            }
            acodec          copy;
            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
        }
    }

参考资料:https://github.com/ossrs/srs/wiki/v3_CN_FFMPEG

你可能感兴趣的:(srs直播,转码,ffmpeg,srs,ffmpeg,rtmp)