PS:学习地址Mac安装教程:https://testerhome.com/topics/25083
命令汇总
# 编译环境准备
brew install gcc meson doxygen nasm freetype pkg-config hdf5
brew install numpy scipy
# 下载源码
git clone https://github.com/Netflix/vmaf.git
cd vmaf
git submodule update --init --recursive
# 编译
make
# 下载 VMAF 并安装
cd python
pip3 install cython
pip3 install -r requirements.txt
pip3 install --user . # 此时,会出现各种报错
# 环境变量配置
vim ~/.bash_profile
source ~/.bash_profile
# 在 vmaf 根目录下,
./unittest
# PyCharm执行,
which python
python ./vmaf/script/run_vmaf.py yuv420p 576 324 test/resource/yuv/src01_hrc00_576x324.yuv test/resource/yuv/src01_hrc01_576x324.yuv --out-fmt json
报错汇总
# 编译环境准备时:
报错1:
Permission denied @ apply2files - /usr/local/lib/docker/cli-plugins
解决1:
sudo chown -R $(whoami) $(brew --prefix)/*
# 下载 VMAF 并安装:
报错2:
ninja: build stopped: subcommand failed.
解决2:其实不影响后续的执行,但是在最终运行的时候会报错。我是通过替换tools的文件解决的。
报错3:
vmaf/core/adm_dwt2_cy.c:634:10: fatal error: '../../../libvmaf/src/feature/adm.c' file not found
#include "../../../libvmaf/src/feature/adm.c"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
解决3:修改相关路径为绝对路径
# 文件路径:
/vmaf/python/vmaf/core
vim adm_dwt2_cy.pyx
# 重新执行
pip3 install -r requirements.txt
pip3 install --user .
报错4:
#warning "Using deprecated NumPy API, disable it with " \
^
In file included from vmaf/core/adm_dwt2_cy.c:636:
/Users/meizhuo/vmaf/libvmaf/src/feature/adm_tools.c:27:10: fatal error: 'mem.h' file not found
#include "mem.h"
^~~~~~~
解决4:
cd libvmaf/src/feature/
cp /Users/XXXX/vmaf/libvmaf/src/mem.h .
# 执行Python文件命令:
python ./vmaf/script/run_vmaf.py yuv420p 576 324 test/resource/yuv/src01_hrc00_576x324.yuv test/resource/yuv/src01_hrc01_576x324.yuv --out-fmt json
报错5:
ModuleNotFoundError: No module named 'vmaf'
解决5:
/vmaf/python/vmaf/script/run_vmaf.py
curpath = os.path.abspath(os.path.dirname(__file__))
root_path = os.path.split(os.path.split(curpath)[0])[0]
if root_path not in sys.path:
sys.path.append(root_path)
/vmaf/python/vmaf/svmutil.py
if VmafConfig.root_path() not in sys.path:
sys.path.append(VmafConfig.root_path())
成功标志![在这里插入图片描述](https://img-blog.csdnimg.cn/069b1c240af6420b82dc356331510ac9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAZGFybGluZ216,size_20,color_FFFFFF,t_70,g_se,x_16)
答疑记录
- 如何获取时间戳完全对准的yuv文件?
- 采集与编码-解码后的数据,帧数完全一致
- 格式:AVC?可转换成yuv文件
- 只能做上行-推流端的网络损失情况?
- 一个源文件(参照对象),通过SDK层的录制,进行不同网络下的对比流
- 原因:不能做下行的是因为获取接收端的流是经过损失的,与源流没有对比性。
- 播放端的延时自动获取?
- 原理:将时间戳打在关键帧/每一帧里,接收端进行解码解出时间戳,进行差值
- SCDN可用原因:秒/s级别的,RTC都是毫秒/ms级别的无法区分
- 问题记录:
- 视频打分(纯RTC)
VMAF工具(有参考)使用,不同丢包率下的打分变化不大
提供开播采集的视频频 + 编码后的视频 - 音频打分(所有SDK)
新工具(无参考)调研
可提供开播采集的音频 + 接收端的音频,日志上报? - 延时(所有SDK)
开启SEI, 存储在文件里,高丢包情况下的延时做参考
人工掐表,提供正常下的延时 - 视频丢包视频录制:(所有SDK)
rtc拉流 - 超低延时直播提供录制:(纯RTC)
rtc拉流
srt拉流
flv拉流 - 进房间成功率 + 时延
自动化跑1h、6h、1天,code = 200的统计
Joinroom 到推流的时间差?首帧数据上报