文章目錄
- 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