文章目录
- SRS transcode支持 h264_nvenc 硬件解码方案
- 1、修改文件
- 2、重新编译
- 3、使用
SRS transcode支持 h264_nvenc 硬件解码方案
SRS 是开源的流媒体服务,但在使用 GPU 服务器时,想要通过硬件加速,目前官方是不支持的,所以简单修改了源码,重新编译实现,以 SRS6.0release 为例,操作如下:
1、修改文件
-
编辑文件
#进入 SRS 核心目录 cd srs/trunkvim /src/app/srs_app_ffmpeg.cpp
-
定义变量
找到 39 行附近,新增一行内容(注意:行首“#”也需要带上):#define SRS_RTMP_ENCODER_VCODEC_H264NVENC "h264_nvenc"
-
执行修改
找到 129 行位置附近,内容为:if (vcodec != SRS_RTMP_ENCODER_VCODEC_LIBX264 && vcodec != SRS_RTMP_ENCODER_VCODEC_LIBX265 && vcodec != SRS_RTMP_ENCODER_VCODEC_H264QSV) {
注释、删掉、或改造为如下内容:
if (vcodec != SRS_RTMP_ENCODER_VCODEC_LIBX264 && vcodec != SRS_RTMP_ENCODER_VCODEC_LIBX265 && vcodec != SRS_RTMP_ENCODER_VCODEC_H264QSV && vcodec != SRS_RTMP_ENCODER_VCODEC_H264NVENC) {
保存并退出。
2、重新编译
重新编译安装即可:
cd srs/trunk#开启gb28181和ffmpeg配置
./configure --gb28181=on --ffmpeg-tool=on make && make install
编译安装完成后,重启 SRS 服务或第三步配置改完后重启服务。
3、使用
- 安装 ffmpeg 关键点
一般使用自己安装的 ffmpeg,需要启用硬件加速配置--enable-nvenc
如下图:
- srs.conf 解码配置:
cd srs/trunkvim conf/srs.conf
vhost defaultVhost { 内增加解码配置:
#转码transcode {enabled on;#ffmpeg /data/software/srs/trunk/objs/ffmpeg/bin/ffmpeg;#这里 ffmpeg 是自行安装的,不是 SRS 自带的ffmpeg /usr/local/bin/ffmpeg;engine ff {enabled on;vfilter {}#vcodec libx264;vcodec h264_nvenc;vbitrate 5000;vfps 25;vwidth 1280;vheight 720;vthreads 12;#high、main、baselinevprofile high;vpreset medium;vparams {b:v 5000k;}acodec libfdk_aac;abitrate 70;asample_rate 44100;achannels 2;aparams {}oformat flv;#这里 output 使用正常,按第三种方式会造成循环解码,直接给服务器干废了output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];#output rtmp://127.0.0.1:[port]/[app]/[stream];#output rtmp://127.0.0.1:[port]/[app]/[stream]_[engine]?vhost=[vhost];}}
重启 SRS 服务,推流即可自动解码。
注意:engine ff
是可以随意定义的,用解码地址拉流时,只需在后面拼接 _ff
即可,如果你定义的是 engine abc
,那么,你的推流访问地址后面拼接 _abc
即可,如:
RTMP 推流:
#非GPU硬件加速推流
ffmpeg -stream_loop -1 -re -i fly.mp4 -c:v libx264 -preset medium -tune zerolatency -b:v 5000k -maxrate 8000k -g 25 -c:a aac -b:a 128k -f flv rtmp://192.168.1.123/live/livestream#GPU硬件加速推流
ffmpeg -stream_loop -1 -re -i fly.mp4 -c:v h264_nvenc -preset medium -tune zerolatency -b:v 5000k -maxrate 8000k -g 25 -c:a aac -b:a 128k -f flv rtmp://192.168.1.123/live/livestream
ffplay 对 RTMP 拉流:
ffplay -fflags nobuffer -i rtmp://192.168.1.123/live/livestream
ffplay 对转码后的 RTMP 拉流:
ffplay -fflags nobuffer -i rtmp://192.168.1.123/live/livestream_ff