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())
成功标志
答疑记录:
- 如何获取时间戳完全对准的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 到推流的时间差?首帧数据上报