大致流程:通过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