VLC 不能正常播放 MP4 v2 [ISO 14496-14] 视频,Kaffeine 却可以。

相关信息:

[terry@pc:~/Videos]  一 8 月 03 - 15:28:03]
1009 => $ file openSUSE\ 桌面介绍:KDE\ 等离子桌面基础 _ 标清.mp4
openSUSE 桌面介绍:KDE 等离子桌面基础 _ 标清.mp4: ISO Media, MP4 Base Media v1 [IS0 14496-12:2003]

[terry@pc:~/Videos]  一 8 月 03 - 15:28:08]
1010 => $ file 美國海軍核子動力航空母艦.mp4
美國海軍核子動力航空母艦.mp4: ISO Media, MP4 v2 [ISO 14496-14]

上次 `zypper dup’ 之前是 VLC 是正常的,现在可以播放 MP4 Base Media v1 [IS0 14496-12:2003] 格式的 .mp4,播放 MP4 v2 [ISO 14496-14] 格式却只有声音没有图像;Kaffeine 播放这两种格式都可以。VLC 命令行有以下报错信息:

[terry@pc:~/Videos]  一 8 月 03 - 15:25:05]
1005 => $ vlc 美國海軍核子動力航空母艦.mp4
VLC media player 2.2.1 Terry Pratchett (Weatherwax) (revision 2.2.1-0-ga425c42)
[00000000007b50d8] core libvlc: 正在以默认界面运行 vlc。使用“cvlc”可以无界面模式使用 vlc。
service is "org.kde.StatusNotifierItem-20803-1"
Registering a client interface to the KStatusNotifierWatcher
[VS] Software VDPAU backend library initialized
libva info: VA-API version 0.37.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib64/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_37
libva info: va_openDriver() returns 0
[00007f7a6cf84078] avcodec decoder: Using OpenGL/VAAPI/libswscale backend for VDPAU for hardware decoding.
[h264 @ 0x7f7a6cf98ca0] hardware accelerator failed to decode picture
[h264 @ 0x7f7a6d024d00] hardware accelerator failed to decode picture
[h264 @ 0x7f7a6d06c480] hardware accelerator failed to decode picture
[h264 @ 0x7f7a6d0b3be0] hardware accelerator failed to decode picture
[00007f7a48001268] vdpau_display vout display error: video mixer surface width capabilities query failure: VDP_STATUS_NO_IMPLEMENTATION
[h264 @ 0x7f7a6cf98ca0] hardware accelerator failed to decode picture
[VS] error (vdpVideoSurfaceGetBitsYCbCr): not implemented conversion VA FOURCC  -> VDP_YCBCR_FORMAT_YV12
[00007f7a488f00b8] vdpau_chroma filter error: video surface export failure: VDP_STATUS_INVALID_Y_CB_CR_FORMAT
[VS] error (vdpVideoSurfaceGetBitsYCbCr): not implemented conversion VA FOURCC  -> VDP_YCBCR_FORMAT_YV12
[00007f7a488f00b8] vdpau_chroma filter error: video surface export failure: VDP_STATUS_INVALID_Y_CB_CR_FORMAT
[h264 @ 0x7f7a6d024d00] hardware accelerator failed to decode picture
……

系统版本是 openSUSE 20150714 Tumbleweed,VLC 相关版本如下:

[terry@pc:~/Videos]  一 8 月 03 - 15:49:14]
1012 => $ zypper se --detail /vlc\|libvdpau\|libx265/ | grep ^i
i | libvdpau1                          | 软件包   | 1.1-1.2             | x86_64 | repo-oss
i | libvdpau_nouveau                   | 软件包   | 10.6.2-117.1        | x86_64 | repo-oss
i | libvdpau_r300                      | 软件包   | 10.6.2-117.1        | x86_64 | repo-oss
i | libvdpau_r600                      | 软件包   | 10.6.2-117.1        | x86_64 | repo-oss
i | libvdpau_radeonsi                  | 软件包   | 10.6.2-117.1        | x86_64 | repo-oss
i | libvdpau_va_gl1                    | 软件包   | 0.3.4-5.2           | x86_64 | repo-oss
i | libvlc5                            | 软件包   | 2.2.1-286.3         | x86_64 | packman
i | libvlccore8                        | 软件包   | 2.2.1-286.3         | x86_64 | packman
i | libx265-10                         | 软件包   | 0.10hg20140324-5.6  | x86_64 | (系统软件包)
i | libx265-32                         | 软件包   | 0.32hg20140928-2.10 | x86_64 | (系统软件包)
i | libx265-43                         | 软件包   | 1.5-1.7             | x86_64 | (系统软件包)
i | libx265-51                         | 软件包   | 1.6-1.6             | x86_64 | (系统软件包)
i | libx265-59                         | 软件包   | 1.7-1.6             | x86_64 | packman
i | vlc                                | 软件包   | 2.2.1-286.3         | x86_64 | packman
i | vlc-codecs                         | 软件包   | 2.2.1-286.3         | x86_64 | packman
i | vlc-gnome                          | 软件包   | 2.2.1-286.3         | x86_64 | packman
i | vlc-noX                            | 软件包   | 2.2.1-286.3         | x86_64 | packman
i | vlc-noX-lang                       | 软件包   | 2.2.1-286.3         | noarch | packman
i | vlc-qt                             | 软件包   | 2.2.1-286.3         | x86_64 | packman

2 个视频文件的详细信息如下:

[terry@pc:~/Videos]  一 8 月 03 - 15:50:17]
1013 => $ ffmpeg -i openSUSE\ 桌面介绍:KDE\ 等离子桌面基础 _ 标清.mp4 
ffmpeg version 2.7.1 Copyright (c) 2000-2015 the FFmpeg developers
  ……
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'openSUSE 桌面介绍:KDE 等离子桌面基础 _ 标清.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.22.103
  Duration: 00:08:34.69, start: 0.085333, bitrate: 370 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 512x288 [SAR 1:1 DAR 16:9], 296 kb/s, 15 fps, 15 tbr, 15360 tbn, 30 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 24000 Hz, stereo, fltp, 69 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
At least one output file must be specified

[terry@pc:~/Videos]  一 8 月 03 - 15:55:10]
1014 => $ ffmpeg -i 美國海軍核子動力航空母艦.mp4
ffmpeg version 2.7.1 Copyright (c) 2000-2015 the FFmpeg developers
  ……
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '美國海軍核子動力航空母艦.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2013-12-06 04:40:13
  Duration: 00:45:21.17, start: 0.000000, bitrate: 547 kb/s
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 640x360, 448 kb/s, 29.97 fps, 29.97 tbr, 60k tbn, 59.94 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 96 kb/s (default)
    Metadata:
      creation_time   : 2013-12-06 04:41:07
      handler_name    : IsoMedia File Produced by Google, 5-11-2011
At least one output file must be specified

临时解决办法:
参考链接 [1] 里说有可能是 `libvdpau_va_gl1’ 的问题,不关 VLC 什么事。于是就打开 VLC -> 工具 -> 偏好设置,(快捷键:Ctrl-P)切换到「输入 / 编解码器」,在「硬件加速解码」的下拉菜单选择「VA-API 视频解码器,通过 X11」、「VA-API 视频解码器,通过 DRM」或者「关闭」都可以看到图像,保存选项以后不需要重启 VLC,先停止播放视频后,再点击播放即可。「dummy 视频解码器」花屏也不能看。

那位高人有更彻底的办法,还请多多指教,顺便也科普下「VDPAU 视频解码器」和前面的解码器的区别,填补一下我在多媒体方面的空白!

参考链接:
[packman] [PM] vlc 2.2.0-261.1 (openSUSE 13.2/x86_64) [Bug: No video on VLC 2.2]](http://lists.links2linux.de/pipermail/packman/2015-March/013491.html)
How to identify video formats from command line on Linux

把 libav* 开头的软件包切换到 pacman 的版本就好了吧。

能否贴一下完整的包名字,libav 开头的包有点多?

看这个帖子。

建议:
1. vlc 相关的包(包括依赖包比如上面提到的 ffmpeg 相关的包)统一采用 vlc 官方源中的,不建议 packman 中的包
2. 千万不要有的包来自 packman,有的包来自 vlc 官方源
3. 要装 vlc-codecs 包

我只说 pacman 版本的解决方法好了。

搜索 ffmpeg 或者 libav,安装以下软件包的 pacman 版本:

!](http://i.imgur.com/BnuYBVR.png)

搜索 vlc,安装以下软件包的 pacman 版本:

!](http://i.imgur.com/BDeVrvK.png)