GStreamer非法硬件指令

3
我正在尝试学习GStreamer。我正在使用macOS 10.13-x86_64。
我开始使用这个教程进行工作。
最初,我安装了GStreamer的.pkg文件。
GStreamer被安装在/Library/Frameworks/GStreamer.framework中。
我成功编译并运行了教程,但我需要使用sudo来访问/Library/Frameworks/GStreamer.framework目录。
后来我发现我可以通过homebrew安装GStreamer。
所以,我手动删除了/Library/Frameworks/GStreamer.framework并运行了以下命令:
brew install gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav

不幸的是,这个教程现在会抛出运行时错误。
./basic-1
[1]    1873 illegal hardware instruction  ./basic-1

我尝试使用lldb调试错误(我对lldb非常陌生,几乎什么都不会)。
lldb basic-1
(lldb) target create "basic-1"
Current executable set to 'basic-1' (x86_64).
(lldb) run
Process 2129 launched: '/Users/aleksey/projects/media/gstreamer-dummy/basic-1' (x86_64)
Process 2129 stopped
* thread #14, stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
    frame #0: 0x00007fff3b0e3939 CoreFoundation`__CFRunLoopDeallocate + 537
CoreFoundation`__CFRunLoopDeallocate:
->  0x7fff3b0e3939 <+537>: ud2
    0x7fff3b0e393b <+539>: nopl   (%rax,%rax)

CoreFoundation`__CFRunLoopCleanseSources:
    0x7fff3b0e3940 <+0>:   pushq  %rbp
    0x7fff3b0e3941 <+1>:   movq   %rsp, %rbp
Target 0: (basic-1) stopped.

“我不知道该怎么处理这个。”
“我用编译器编译代码。”
gcc -Wall basic-tutorial-1.c -o basic-1 $(pkg-config --cflags --libs gstreamer-1.0)

我有以下配置。
$ pkg-config --cflags --libs gstreamer-1.0
-D_REENTRANT -I/usr/local/Cellar/gstreamer/1.12.3/include/gstreamer-1.0 -I/usr/local/Cellar/glib/2.54.1/include/glib-2.0 -I/usr/local/Cellar/glib/2.54.1/lib/glib-2.0/include -I/usr/local/opt/gettext/include -I/usr/local/Cellar/pcre/8.41/include -L/usr/local/Cellar/gstreamer/1.12.3/lib -L/usr/local/Cellar/glib/2.54.1/lib -L/usr/local/opt/gettext/lib -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -lintl -Wl,-framework -Wl,CoreFoundation

您能帮我吗?有什么问题吗?

你解决了这个问题吗?我现在也遇到了同样的问题。 - Alba Hoo
@AlbaHoo 说实话,我不记得我是否成功修复了它。我猜我没有修复它,但它对我来说变得无关紧要了。 - Aleksey
1个回答

3
我遇到了同样的问题,并在这里https://bugzilla.gnome.org/show_bug.cgi?id=790242)找到了一些答案。我正在https://github.com/sdroege/gstreamer-rs/issues/58等待一些额外的评论。
总结如下:

Remi Achard Apr 11, 2020; 7:55pmRe: Illegal hardware instructions when running basic-tutorial-1 on mac OS 10.15.2 / brew installation

看起来教程(至少是前几个)在 macOS 上已经无法使用了。

[Sebastian Dröge (slomo) 2017-11-12 12:41:44 UTC] 参见 https://github.com/sdroege/gstreamer-rs/issues/58,C教程也是一样的。问题在于osxvideosink和glimagesink需要在macOS的主线程上运行NSRunLoop。我们的修补过的GLib版本在运行GMainLoop时会这样做(上游GLib不会!),但示例仅使用gst_bus_timed_pop_filtered(),所以也无法帮助。使用GMainLoop会使教程变得更加复杂,需要引入更多API,总是需要回调等等。不确定该怎么办!
[Kornel 2017-11-12 13:34:16 UTC] 我已经成功地通过在一个线程上运行示例,并在主线程上调用CFRunLoopRun()来使简单的示例工作。它只需要与foundation.framework链接。
【更新01】我已经成功编译和运行了基础教程12:流式处理
[更新 02]

发件人:Sebastian Dröge [2020年12月29日上午11:53格林威治标准时间]

你不需要 GLib 主循环,但 macOS 要求你在主线程上运行 NSRunLoop 以使各种 macOS API 正确工作。 GStreamer 视频渲染器使用这些 API。 GLib 主循环(来自 GStreamer 二进制文件附带的 GLib 版本!)出于这个原因自己运行 NSRunLoop。 这是 macOS 上的限制,你必须想办法适应它,并且与 GStreamer 无关,这可能应该在 GStreamer 文档中更突出地提到。

更多信息:https://gitlab.freedesktop.org/gstreamer/gst-docs/-/issues/79


其他相关文章 1, 3, 4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接