ffmpeg使用vaapi硬解出错
系统:deepin 15.9
ffmpeg 版本:4.1
vaifo:
libva info: VA-API version 1.1.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_0
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.1 (libva 2.1.0)
vainfo: Driver version: Intel i965 driver for Intel(R) Haswell Desktop - 2.0.0
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Simple : VAEntrypointEncSlice
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSlice
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSlice
VAProfileH264MultiviewHigh : VAEntrypointVLD
VAProfileH264MultiviewHigh : VAEntrypointEncSlice
VAProfileH264StereoHigh : VAEntrypointVLD
VAProfileH264StereoHigh : VAEntrypointEncSlice
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileNone : VAEntrypointVideoProc
VAProfileJPEGBaseline : VAEntrypointVLD
小弟使用希望使用ffmpeg的vaapi进行硬解。使用sudo ./configure --disable-static --enable-shared --enable-gpl --enable-version3 --enable-vaapi来编译ffmpeg源码,源码编译成功,并成功安装。然后想运行ffmpeg官方的有关硬解的例子进行学习。故编译了官方的例子vaapip_transcode.c hw_decode.c两个例子,也都编译通过.但是在运行两个例子的出现出现如下错误:
转换到源码中查看是由于下面的回调函数出问题。即*p != AV_PIX_FMT_VAAPI
static enum AVPixelFormat get_vaapi_format(AVCodecContext *ctx,
const enum AVPixelFormat *pix_fmts)
{
const enum AVPixelFormat *p;
for (p = pix_fmts; *p != AV_PIX_FMT_NONE; p++) {
if (*p == AV_PIX_FMT_VAAPI)
return *p;
}
fprintf(stderr, "Unable to decode this file using VA-API.n");
return AV_PIX_FMT_NONE;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(14)
那是兼容的,通常支持
后期硬解后也的确遇到您说的问题,不支持H264 baseline。想问是否有方式强制硬解呢?
回复
这个是api限制,绕不过去的,你查一下Intel GPU解码的文档,看一下哪个api版本支持baseline,是否升级或者降级驱动可以解决
已经解决了
你的文件视频编码Profile是baseline,level4.2, 但是你的intel卡不支持baseline, 只支持constrained baseline。
尽量不要贴图,直接复制出来文本容易看
回复
@Feng_Yu : 稍等哦,我把源码发下
General
ID : 32885 (0x8075)
Complete name : /home/gy/Test.mp4
Format : MPEG-TS
File size : 28.4 MiB
Duration : 1 min 1 s
Overall bit rate mode : Variable
Overall bit rate : 3 857 kb/s
FileExtension_Invalid : ts m2t m2s m4t m4s tmf ts tp trp ty
Video
ID : 69 (0x45)
Menu ID : 1 (0x1)
Format : AVC
Format/Info : Advanced Video Codec
Format profile : Baseline@L4.2
Format settings : 1 Ref Frames
Format settings, CABAC : No
Format settings, ReFrames : 1 frame
Codec ID : 27
Duration : 1 min 1 s
Bit rate : 3 634 kb/s
Width : 1 920 pixels
Height : 1 080 pixels
Display aspect ratio : 16:9
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Stream size : 26.6 MiB (94%)
Color range : Full
Color primaries : BT.709
Transfer characteristics : BT.709
Matrix coefficients : BT.709
Audio
ID : 68 (0x44)
Menu ID : 1 (0x1)
Format : MPEG Audio
Format version : Version 2
Format profile : Layer 2
Codec ID : 4
Duration : 1 min 1 s
Bit rate mode : Constant
Bit rate : 32.0 kb/s
Channel(s) : 1 channel
Sampling rate : 16.0 kHz
Frame rate : 13.889 FPS (1152 SPF)
Compression mode : Lossy
Delay relative to video : 89 ms
Stream size : 240 KiB (1%)
mediainfo 信息
回复
@Feng_Yu : vainfo 看到VAProfileH264ConstrainedBaseline: VAEntrypointVLD 应该说这个libva是支持baseline的吧
回复
是支持的,多找几个样本看看,编码参数应该都是一致的。如果只是个别现象,那么说明视频有问题,无法硬解。我个人不建议硬解的,因为支持度不够好,如果软解性能够的话,通常不建议使用硬解。转码的瓶颈一般在编码阶段,而不是解码阶段,硬解无法带来实质的性能提升,硬编码倒是有点意义。想追求效果和压缩率,就用软解+软编码
回复
@Feng_Yu : 现在软解的确是性能达不到,CPU利用率太高。硬解还需要再研究下,问什么不能硬解。
回复
你的视频有4K吗?以目前CPU的性能,软解1080p都不成问题,你可以测试一下你的视频软解能达到多少FPS?以我的i5-6200U的CPU测试结果来看,软解1080p的H.264视频也能达到100多FPS,是足够了。软解相对来说效果会好一些。你找一批同样的视频测试一下,如果只是极个别视频硬解失败那就是视频编码的问题了
回复
@Feng_Yu : 软解1路是没问题的,问题是要同时解码16路。而且不是在我电脑上,我这只是编译下,最终还是要在Intel3350上跑的,所以必须用的硬解,前几天就软解一路1080P Intel3350的cpu就干到了30%,16路就别提了呢,岂不是要卡死了。
把你的视频用mediainfo分析下,贴出文本分析结果看看。看看视频编码是否支持硬解?从你的vainfo输出结果看,你的intel显卡支持MPEG2, H.264, VC1这三种编码的硬解码。
EDIT: 把你的ffmpeg测试硬解的命令行贴出来,另外试试官方或者第三方编译的ffmpeg呢?比如ubuntu下可以试试这个ppa: https://launchpad.net/~jonathonf/+archive/ubuntu/ffmpeg-4/+packages
按照官方文档(官方文档关于vaapi部分见这里: https://trac.ffmpeg.org/wiki/Hardware/VAAPI),测试vaapi硬解的命令应为:
看看能正常硬解吗?如果官方或者第三方编译的ffmpeg可以正常硬解,那么应该是你的编译问题了