注意:我的项目的目标是用 Raspberry Pi 4 替换常规的 Intel Core PC
我有一个在英特尔 PC 上运行良好的相机模拟。它需要 MP4 文件并使用 jpegenc 将它们编码为 jpeg。使用 GStreamer 及其插件,即 avdec_h264 和 qtdemux,效果很好。还可以选择使用 vaapih264dec 及其对应的 jpeg 编码器。这很有用,因为使用非硬件优化插件的 CPU 使用率非常高。即在 Pi 上,这个程序也可以工作,但只有 4 个摄像头,我们在所有 4 个内核上的使用率为 100%。
现在我已经进行了很多研究,第一个答案是使用 omxh264dec,因为这是 RPi 的 vaapi 对应物(或者我假设)。我无法让它工作,每次我尝试任何不同的东西时,管道都不会构建。
我努力了 :
-交换解复用器
- 更改解码器和编码器(除了使用 CPU 的其他组合似乎有效)
- 在 GStreamer 论坛上提问(只是被告知它不能那样工作,但不知道从哪里开始寻找其他地方)
- 甚至尝试在没有整个程序的情况下构建管道,但即使这样似乎也不适用于 omxh264
管道:
gst-launch-1.0 filesrc location=/home/pi/test.mp4 ! qtdemux ! h264parse ! omxh264dec ! autovideosink
给出这个错误:
Leitung wird auf PAUSIERT gesetzt ...
Leitung läuft vor …
FEHLER: Von Element /GstPipeline:pipeline0/GstQTDemux:qtdemux0: Internal data s$
Zusätzliche Fehlerdiagnoseinformation:
qtdemux.c(6073): gst_qtdemux_loop (): /GstPipeline:pipeline0/GstQTDemux:qtdemux$
streaming stopped, reason not-negotiated (-4)
所以我的问题真的是:是否可以以某种方式使用 Gstreamer 并流式传输 omxdecoded 的素材,如果不是,我如何仍然可以在我的程序上使用更少的 CPU,这样我的 RPi 就不会最终死亡。