FreeSWITCH 显卡硬件测试视频编码性能

285 阅读1分钟

相较于传统音频通讯,视频通讯处理所占用的CPU资源较多,纯软编码的处理方式,可能不能完全满足生产要求

1. 准备测试环境

硬件为 i7-6700K 和 Nvidia 1070 显卡平台,操作系统 CentOS 7

# 驱动依赖
yum install -y tar bzip2 make automake gcc gcc-c++ pciutils elfutils-libelf-devel libglvnd-devel iptablesfirewalldvimbind-utilswget

# 官方源
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install -y yum-utils

# 安装驱动
distribution=rhel7
ARCH=$(/bin/arch)
yum-config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/$distribution/${ARCH}/cuda-$distribution.repo
yum install -y kernel-devel-$(uname -r) kernel-headers-$(uname -r)
yum clean expire-cache
yum install -y nvidia-driver-latest-dkms

# 检查硬件
modprobe -r nouveau
modprobe nvidia

ls -l /dev/nvidia*
ls -l /dev/nvidia*

# 开机启动
systemctl restart nvidia-persistenced
systemctl enable nvidia-persistenced

# 安装CUDA
wget <https://developer.download.nvidia.com/compute/cuda/12.2.1/local_installers/cuda-repo-rhel7-12-2-local-12.2.1_535.86.10-1.x86_64.rpm>
rpm -i cuda-repo-rhel7-12-2-local-12.2.1_535.86.10-1.x86_64.rpm
yum clean all
yum -y install nvidia-driver-latest-dkms
yum -y install cuda

2. 编译视频模块

# FreeSWIETCH视频需要依赖ffmpeg,编译在此省略,以下是编译中需要依赖FFMPEG的部分
yum install autoconf automake cmake freetype-devel gcc gcc-c++ git libtool make mercurial nasm pkgconfig zlib-devel
yum install x264-devel
yum install ffnvcodec-devel
git clone http://git.videolan.org/git/ffmpeg/nv-codec-headers.git
make && make install
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}
export PKG_CONFIG_PATH=/usr/share/pkgconfig
pkg-config --modversion ffnvcodec
yum -y install nv-codec-headers
git clone https://git.ffmpeg.org/ffmpeg.git
cd ffmpeg
./configure --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --enable-filter=drawtext --enable-libfreetype --enable-shared --enable-libx264 --enable-gpl --prefix=/usr/local/ffmpeg

3. 测试ffmpeg性能

以下是测试命令,测试视频时长10分钟

time ffmpeg -i test.mp4 -c:v h264_nvenc output1.mp4

中途可以通过以下命令,监控显卡状态

watch -n 1 nvidia-smi

测试结果

软编解码libx264

1路2分14秒

硬编解码h264_nvenc

1路 36秒

2路 48秒

3路 1分05秒

4路 1分22秒

5路 1分35秒

4. 测试FreeSWITCH性能

进入FreeSWITCH操作台,以下命令理解需要一些FreeSWITCH基础知识,配置步骤省略

# 模拟视频呼叫
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/150118116 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/150118117 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/150118118 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/150118119 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/150118120 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/150118121 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/150118122 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/150118123 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/150118124 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/150118125 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/150118126 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/150118128 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/150118129 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/150118130 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/150118131 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/150118132 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/1501181231 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/1501181241 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/1501181231 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/1501181241 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/1501181251 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/1501181261 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/1501181281 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/1501181291 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/1501181301 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/1501181311 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/1501181321 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/15011812312 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/15011812412 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/15011812312 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/15011812412 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/15011812512 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/15011812612 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/15011812812 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/15011812912 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/15011813012 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/15011813112 &playback(/root/1.mp4)
bgapi originate {absolute_codec_string=^^:PCMU:PCMA:H264}sofia/gateway/1003/15011813212 &playback(/root/1.mp4)

在 Dialplan XML 中添加下面类型的规则,实现录像,测试编码性能

<action application="record" data="{av_video_codec=h264_nvenc}av:///tmp/$1"/>

硬编码测试,40路视频,大概占用4G显存,CPU 500%

5. 总结

在一些特殊情况需要视频转码,可以使用显卡硬解,在i7-6700K和1070显卡平台,测试可以达到并发40 。如果是更好的硬件,至少可以达到50路以上并发