mdk-sdk
mdk-sdk copied to clipboard
4k av1 播放卡顿
4k分辨率av1编码的文件, 播放画面明显一顿一顿,不流畅.
无论mft:d3d=0还是mft:d3d=11 均是如此
1080p av1 是可以流畅播放的
MDK 0.13.0 (git bea9310)
相同环境用ffplay和potplayer均很流畅,尽管是用的不支持硬解av1的显卡
log如下
log-hard.txt
log-soft.txt
log里看不出什么原因,加上环境变量MDK_LOG_STATUS=1会打印时间信息。用DecodeFps.exe -c:v MFT:d3d=11 ...可以看看解码能达到多少。mft的软解性能很差,会卡不意外。你可以找个libdav1d.dll放进来然后-c:v dav1d看看解码效果。potplayer是用硬解吗?
你也可以对比不设置解码器,会调用ffmpeg,ffmpeg好像会自动调用av1的硬解。另外ffplay的日志也可以发一下
log里看不出什么原因,加上环境变量MDK_LOG_STATUS=1会打印时间信息。用DecodeFps.exe -c:v MFT:d3d=11 ...可以看看解码能达到多少。mft的软解性能很差,会卡不意外。你可以找个libdav1d.dll放进来然后-c:v dav1d看看解码效果。potplayer是用硬解吗?
环境变量不知设置在哪里,无论设置在系统还是主程序都没看见什么时间信息 DecodeFps.exe 不知为什么只能看见cpu占用提高,并不能显示出什么信息 potplayer应该是软解,我的显卡并不支持硬解av1 拿vlc的libdav1d.dll来用会直接闪退 logdav1d.txt 不设置解码器的情况下24帧率文件卡顿较轻微肉眼不易察觉,60帧率文件依旧肉眼可见卡顿. 并且主动设置解码器为FFmpeg会直接崩溃.崩溃日志如下 log10.txt ffplay正常日志 ffplay.log 测试用的4k av1 60帧视频下载自https://www.youtube.com/watch?v=xmESOGcXjmI 这种剧烈运动的视频与potplayer对比卡顿尤为明显
我测了下这里下载的libdav1d.dll没问题 https://code.videolan.org/videolan/dav1d/-/pipelines
ffplay检测到不支持硬解会使用dav1d。我这边后面改下,默认不设解码器的话也自动使用dav1d
decodefps 输出:
$ ./DecodeFps -c:v dav1d /d/v/wanderers.mp4
MDK 0.13.0 (git 33a29de) - Multimedia Development Kit. Copyright (c) 2016-2022 WangBin(QtAV author) <wbsecg1 at gmail.com>
Build for: Windows0x0600 x86_64; MSVC1930; MSVCRT14.30.30705.0/msvcp140.dll; 16:30:32 Jan 9 2022
usage: D:\install\mdk-sdk\bin\x64\DecodeFps.exe [-c:v DecoderName] [-from milliseconds] file
decoded: 273, elapsed: 667, fps: 409.3/450.7409.3/450.7, fmt: 1019212016
invalid frame. eof?
frame count: 273, render count: 274
最新的包支持不设置解码器时自动回退到dav1d(libdav1d.dll要存在)
最新的包支持不设置解码器时自动回退到dav1d(libdav1d.dll要存在)
经测试MDK 0.13.0 (git ba413b6)
不设置时仍旧是有人眼能感知到的跳帧感
log13.txt
日志中两个Error也不知有没有联系
但主动将解码器设置为dav1d时则完全流畅,毫无卡顿跳帧感
日志也能看到是直接调用dav1d而非ffmpeg
且cpu与gpu占用均比不设置解码器时低10-20个百分点
decodefps.exe确实毫无信息,只能看见它把cpu占高了,但framereader.exe有fps跳动的信息,不清楚是不是平台的原因
从log看并没有调用dav1d也没解码出画面,log发错了?
从log看并没有调用dav1d也没解码出画面,log发错了?
是发错了,那个是主动设置解码器为FFMPEG时日志,只有声音没有画面 不设置解码器的日志 01-19 19-58-14.txt
你这个是调了MFT:d3d=11,默认什么解码器都不设会走dav1d。你是用哪个程序测的?对了,你是什么显卡?你用dxvachecker看下你的显卡是否支持av1硬件,不能硬解的话MFT:d3d=11没报错我倒是第一次碰到,行为跟硬解一样。framereader用各解码器给出的帧率是多少?
显卡是Radeon Graphics(Renoir),amd的核显.测下来不支持av1硬解
测试程序是qt示例qmdkplay,qt msvc 6.2.2,win11
dav1d解码
decoded: 13844/1, elapsed: 164122, fps: 84.4/207.8
decoded: 13844/1, elapsed: 159769, fps: 86.7/227.0
MFT:d3d=11解码
decoded: 13844/1, elapsed: 208358, fps: 66.4/146.8
MFT:d3d=0解码
decoded: 13844/1, elapsed: 195266, fps: 70.9/180.8
不设置解码器
decoded: 13844/1, elapsed: 159119, fps: 87.0/219.2
FFmpeg、D3D11、DXVA解码器均报invalid frame.
不报错的原因好像是我装了微软商店的av1videoextension, dxvachecker可以直接调用这个av1decodermft_store.dll播放, 但它的cpu占用比dav1d还低,应该效率比dav1d还要高,完全不跳帧 不清楚问题出在哪里
你的显卡应该支持av1硬解的。可以运行framereader -c:v MFT:d3d=11 a.mp4 然后看任务管理器gpu使用率变化

你这边卡顿有可能和opengl渲染有关,你用d3d11渲染试试,glfwplay.exe -c:v MFT:d3d=11 -d3d11 a.mp4,或者运行install.bat,然后文件右键选择glfwplay播放
-c:v D3D11也可以试试,如果能硬解的话这个也可以解码
-c:v D3D11 无法播放,它的MFT:d3d=11 播放能力确认来自AV1 Video Extension ,把这个插件卸载后MFT:d3d=11也无法播放 gpu占用只有12% ,cpu却达到60%,是软解无疑 d3d11渲染感觉差别不大,仍旧有轻微跳帧感,特别是有移动镜头长画面时,dav1d解码明显是连贯顺畅的,MFT:d3d=11则有些许不连贯跳帧感,但谈不上严重卡顿 但dxvachecker调用AV1 Video Extension的av1decodermft_store.dll播放,则很顺滑与glfwplay调dav1d表现相同.
glfwplay加上参数-fps -1会以最快的速度解码和渲染,你看看有没有卡顿,如果没有的话应该是我音视频同步的问题
glfwplay加上参数
-fps -1会以最快的速度解码和渲染,你看看有没有卡顿,如果没有的话应该是我音视频同步的问题
在MDK 0.13.0 (git 8f7983f)测试, MFT:d3d=11加这个参数反而加剧了这种现象,且音频完全不同步了 后来意识到之前表述其实是不准确的,其实是一种帧率略快而跳帧的快进感而非卡顿感 因为dav1d加上这个参数与MFT:d3d=11现象是类似的
奇怪的是MFT:d3d=11下player_->mediaInfo().video[0].codec.frame_rate得到的帧率也是正确的 更怪的是手动setFrameRate()为该文件正确帧率,没有快进感了,但画面速度反而过慢了,当然音频也不同步了
另外问下为何mediainfo要播放几秒才能获取,setmedia之后立即获取,它的几个属性值均为0?
你用最新的dll再发个完整log
glfwplay加上参数-fps -1会以最快的速度解码和渲染,你看看有没有卡顿,如果没有的话应该是我音视频同步的问题
在MDK 0.13.0 (git 8f7983f)测试, MFT:d3d=11加这个参数反而加剧了这种现象,且音频完全不同步了
-fps -1 是尽可能快地解码和渲染,不管音视频同步
后来意识到之前表述其实是不准确的,其实是一种帧率略快而跳帧的快进感而非卡顿感
跳帧 应该不至于
奇怪的是MFT:d3d=11下player_->mediaInfo().video[0].codec.frame_rate得到的帧率也是正确的
这个是视频的固有信息,和播放状态没关系
另外问下为何mediainfo要播放几秒才能获取,setmedia之后立即获取,它的几个属性值均为0?
要在视频加载完成时去读取,可以参考 https://github.com/wang-bin/mdk-examples/blob/master/Native/MediaInfoReader.cpp#L23 、https://github.com/wang-bin/mdk-examples/blob/master/Native/offscreen.cpp#L43 、https://github.com/wang-bin/mdk-examples/blob/master/Native/offscreen.cpp#L23
你用最新的dll再发个完整log
MDK 0.14.0 (git f7623f2)logs.txt 这版本MFT:d3d=11音视频完全不同步了😎画面比声音慢好多
也没改相关的代码,挺奇怪的。我这边测了一台能硬解av1的机子,glfwplay -c:v MFT:d3d=11 -d3d11 播放8k 10bit hdr 60fps 在全屏模式下(F键切换)是流畅的,非全屏一卡一卡,但解码速度和渲染速度是没问题的,这个也不清楚为什么。