Windows上ffmpeg使用GPU硬件加速多路rtsp转HLS直播流

项目需要接入20多路rtsp转hls视频流,机器的CPU为i9-10900,显卡为P2200。

CPU转码

最开始测试使用脚本:

start ./ffmpeg -i rtsp://<账号>:<密码>@:554/Streaming/Channels/101 -c:v libx264 -c:a copy -f hls -threads 8 -hls_time 5 -hls_list_size 8 -hls_wrap 8  db1.m3u8
  • -i 输入
  • -c:v libx264 使用h264编码
  • -c:a copy 拷贝所有流
  • -f hls 生成hls流。HTTP Live Streaming,是苹果出的一个基于HTTP的流媒体通信协议
  • -threads 8 以8个线程运行
  • -hls_time 5 设置TS切片时间为5
  • -hls_list_size 8 HLS播放的列表
  • -hls_wrap 8 hls_wrap则表示为最大的TS循环数,也就是每8个一个循环

使用多行start这样的脚本,发现当数量达到5~7路之后,视频质量下降,出现许多涂抹画面,根本没法看。原因是CPU已经满载,所以想支持更多路视频只能去找GPU加速的方法。

GPU加速转码

首先安装CUDA

个人理解的CUDA就是可供开发者调用显卡进行处理运算的通道。通过英伟达官网,下载对应系统、版本的安装程序进行安装。注意,不是所有的英伟达显卡、驱动版本都支持CUDA。

使用编译好的ffmpeg

使用已经编译好的ffmpeg,可以通过:

ffmpeg -decoders

ffmpeg -encoders

这两个命令行可以查看ffmpeg支持的解码器、编码器名称。其中包含“xxx_amf”,“xxx_nvenc”,"xxx_qsv"等就证明可以调用显卡
Windows上ffmpeg使用GPU硬件加速多路rtsp转HLS直播流_第1张图片

使用

start ./ffmpeg -i  rtsp://<账号>:<密码>@:554/Streaming/Channels/101 -vcodec h264_nvenc -c:a copy -f hls -threads 8 -hls_time 5 -hls_list_size 8 -hls_wrap 8 db1.m3u8

注意,这时-vcodec(与上面的-c:v相同)指定视频解码器为h264_nvenc

实测同时开启21路视频后,视频全部编码正常,CPU占用率极低,显卡3D性能占用月50%~60%

你可能感兴趣的:(ffmpeg,ffmpeg,gpu)