ffmpeg使用vaapi硬解出错

gspite 发布于 02/18 19:30
阅读 232
收藏 0

系统: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;
}


 

加载中
0
Feng_Yu
Feng_Yu

把你的视频用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 -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -i <你的mp4视频路径> -f null -

看看能正常硬解吗?如果官方或者第三方编译的ffmpeg可以正常硬解,那么应该是你的编译问题了

g
gspite
回复 @Feng_Yu : 软解1路是没问题的,问题是要同时解码16路。而且不是在我电脑上,我这只是编译下,最终还是要在Intel3350上跑的,所以必须用的硬解,前几天就软解一路1080P Intel3350的cpu就干到了30%,16路就别提了呢,岂不是要卡死了。
Feng_Yu
Feng_Yu
回复 @gspite : 你的视频有4K吗?以目前CPU的性能,软解1080p都不成问题,你可以测试一下你的视频软解能达到多少FPS?以我的i5-6200U的CPU测试结果来看,软解1080p的H.264视频也能达到100多FPS,是足够了。软解相对来说效果会好一些。你找一批同样的视频测试一下,如果只是极个别视频硬解失败那就是视频编码的问题了
g
gspite
回复 @Feng_Yu : 现在软解的确是性能达不到,CPU利用率太高。硬解还需要再研究下,问什么不能硬解。
Feng_Yu
Feng_Yu
回复 @gspite : 是支持的,多找几个样本看看,编码参数应该都是一致的。如果只是个别现象,那么说明视频有问题,无法硬解。我个人不建议硬解的,因为支持度不够好,如果软解性能够的话,通常不建议使用硬解。转码的瓶颈一般在编码阶段,而不是解码阶段,硬解无法带来实质的性能提升,硬编码倒是有点意义。想追求效果和压缩率,就用软解+软编码
g
gspite
回复 @Feng_Yu : vainfo 看到VAProfileH264ConstrainedBaseline: VAEntrypointVLD 应该说这个libva是支持baseline的吧
下一页
0
g
gspite

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 信息

g
gspite
回复 @Feng_Yu : 稍等哦,我把源码发下
Feng_Yu
Feng_Yu
尽量不要贴图,直接复制出来文本容易看
0
abelZ
abelZ

你的文件视频编码Profile是baseline,level4.2, 但是你的intel卡不支持baseline, 只支持constrained baseline。

g
gspite
已经解决了
abelZ
abelZ
回复 @gspite : 这个是api限制,绕不过去的,你查一下Intel GPU解码的文档,看一下哪个api版本支持baseline,是否升级或者降级驱动可以解决
g
gspite
后期硬解后也的确遇到您说的问题,不支持H264 baseline。想问是否有方式强制硬解呢?
g
gspite
回复 @Feng_Yu : 或者老哥是否方便加个qq?565831374
Feng_Yu
Feng_Yu
那是兼容的,通常支持
返回顶部
顶部