我在使用 omxplayer 时遇到了一个错误,通常是ffmpeg 错误
当我发出命令时omxplayer -info movie.mkv
出现以下错误:
[matroska,webm @ 0xbc9450] max_analyze_duration 0 reached at 0 microseconds
Aborted
通常 max_analyze_duration 要高得多,比如 5004000,这是什么意思,我应该如何调试它?下面我包含了 的输出ldd omxplayer
。另外,请注意,我在我的 ubuntu 机器上交叉编译了 omxplayer。
/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so (0xb6f69000)
libWFC.so => /opt/vc/lib/libWFC.so (0xb6f31000)
libGLESv2.so => /opt/vc/lib/libGLESv2.so (0xb6f14000)
libEGL.so => /opt/vc/lib/libEGL.so (0xb6ee2000)
libbcm_host.so => /opt/vc/lib/libbcm_host.so (0xb6ec8000)
libopenmaxil.so => /opt/vc/lib/libopenmaxil.so (0xb6eba000)
libfreetype.so.6 => /usr/lib/arm-linux-gnueabihf/libfreetype.so.6 (0xb6e38000)
libvchiq_arm.so => /opt/vc/lib/libvchiq_arm.so (0xb6e2a000)
libvcos.so => /opt/vc/lib/libvcos.so (0xb6e18000)
libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0xb6df9000)
libavutil.so.52 => /lib/arm-linux-gnueabihf/libavutil.so.52 (0xb6da7000)
libavcodec.so.54 => /lib/arm-linux-gnueabihf/libavcodec.so.54 (0xb620d000)
libavformat.so.54 => /lib/arm-linux-gnueabihf/libavformat.so.54 (0xb611e000)
libavdevice.so.54 => /lib/arm-linux-gnueabihf/libavdevice.so.54 (0xb6115000)
libavfilter.so.3 => /lib/arm-linux-gnueabihf/libavfilter.so.3 (0xb60f2000)
libswscale.so.2 => /usr/lib/arm-linux-gnueabihf/libswscale.so.2 (0xb60bc000)
libswresample.so.0 => /lib/arm-linux-gnueabihf/libswresample.so.0 (0xb60a2000)
libstdc++.so.6 => /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 (0xb5fd5000)
libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb5ea6000)
/lib/ld-linux-armhf.so.3 (0xb6f76000)
libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0xb5e7e000)
libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0xb5e72000)
librt.so.1 => /lib/arm-linux-gnueabihf/librt.so.1 (0xb5e63000)
libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0xb5df2000)
libz.so.1 => /lib/arm-linux-gnueabihf/libz.so.1 (0xb5dd4000)
libbz2.so.1.0 => /lib/arm-linux-gnueabihf/libbz2.so.1.0 (0xb5dba000)
libavutil.so.51 => /usr/lib/arm-linux-gnueabihf/libavutil.so.51 (0xb5d93000)
编辑:
ffmpeg 到底是什么?我之所以问这个问题,是因为当我交叉编译 omxplayer 时,我得到了两个版本的 ffmpeg,一个叫做 ffmpeg,另一个叫做 ffmpeg_compiled,而且只有 ffmpeg 有库(即 libavutil.so、libavcodec.so……)。现在,在传输 omxplayer shell 脚本和 omxplayer.bin 二进制文件(我将在这里将它们重命名为 omxplayer-cross-compiled)后,查看输出,ldd omxplayer-cross-compiled.bin
我发现缺少一些库,因此我也将它们复制到 raspi,并将它们存储在 /lib/arm-linux-gnueabihf/ 目录中。这让我回到我最初的问题,因为我从未真正复制过名为 ffmpeg 的二进制程序,那么 ffmpeg 是什么?我的编译过程中是否出了问题,导致无法为我构建 ffmpeg?
编辑:
这是的输出ffmpeg -i clip.mp4
。我应该提到我有两个版本的 omxplayer,原始版本可以运行,而我交叉编译的版本(omxplayer-cross-compiled)则出现了这种奇怪的行为。
ffmpeg version 0.8.6-6:0.8.6-1+rpi1, Copyright (c) 2000-2013 the Libav developers
built on Mar 31 2013 13:58:10 with gcc 4.6.3
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x195440] max_analyze_duration reached
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'media/video/clips/1.mp4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: isommp41avc1
creation_time : 2009-02-19 18:49:05
Duration: 00:00:08.00, start: 0.000000, bitrate: 3141 kb/s
Stream #0.0(eng): Video: h264 (Main), yuv420p, 1024x576 [PAR 1:1 DAR 16:9], 3009 kb/s, 25 fps, 25 tbr, 600 tbn
Metadata:
creation_time : 2009-02-19 18:49:05
Stream #0.1(eng): Audio: aac, 44100 Hz, stereo, s16, 128 kb/s
Metadata:
creation_time : 2009-02-19 18:49:05
Stream #0.2(eng): Data: mp4s / 0x7334706D, 0 kb/s
Metadata:
creation_time : 2009-02-19 18:49:05
Stream #0.3(eng): Data: mp4s / 0x7334706D, 0 kb/s
Metadata:
creation_time : 2009-02-19 18:49:05
At least one output file must be specified
答案1
我觉得自己真的很蠢(如果我没有真正解决这个问题,我会觉得自己更蠢,我只是因为我思考我修复了这个问题)但我认为发生的事情是,我认为可以重命名omxplayer
为其他任何名称,例如omxplayer-cross-compiled
。我最初的意图是,如果交叉编译的版本不起作用,则不要覆盖 omxplayer。但是,我意外地(谢天谢地)用我的交叉编译版本覆盖了 omxplayer,结果发现程序名称很重要。但是,我仍然无法摆脱 linux 在捉弄我的感觉。这正是 Ubuntu 希望我认为的,一切都很好,然后 BAM,我从健身房回来,程序突然不起作用了......