C++ 使用Raspberry Pi转换mp4文件并将其流式传输到查看器

C++ 使用Raspberry Pi转换mp4文件并将其流式传输到查看器,c++,raspberry-pi,gstreamer,omxplayer,C++,Raspberry Pi,Gstreamer,Omxplayer,提醒:我项目的目标是用Raspberry Pi 4取代常规Intel Core PC 我有一个在英特尔PC上运行得很好的摄像头模拟。它接受MP4文件并用jpeg ENC将其编码为jpeg。使用GStreamer及其插件,即avdec_h264和qtdemux,这一切都非常有效。 还可以选择使用vaapih264dec及其jpeg编码器。这是非常有用的,因为使用非硬件优化插件时CPU使用率非常高。i、 在Pi上,这个程序也可以工作,但是只有4个摄像头,我们在所有4个内核上的使用率都是100% 现在

提醒:我项目的目标是用Raspberry Pi 4取代常规Intel Core PC

我有一个在英特尔PC上运行得很好的摄像头模拟。它接受MP4文件并用jpeg ENC将其编码为jpeg。使用GStreamer及其插件,即avdec_h264和qtdemux,这一切都非常有效。 还可以选择使用vaapih264dec及其jpeg编码器。这是非常有用的,因为使用非硬件优化插件时CPU使用率非常高。i、 在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和stream omxdecoded片段,如果没有的话,我如何在我的程序上使用更少的CPU,这样我的RPi就不会消亡。

Raspberry Pi只支持1080p60 H.264高规格编码/解码。 您可以在PC中看到test.mp4配置文件,并运行此管道

gst-launch-1.0 filesrc location=/home/pi/test.mp4 ! qtdemux ! h264parse ! avdec_h264 ! autovideosink -v

Raspberry Pi仅支持1080p60 H.264高分辨率编码/解码。 您可以在PC中看到test.mp4配置文件,并运行此管道

gst-launch-1.0 filesrc location=/home/pi/test.mp4 ! qtdemux ! h264parse ! avdec_h264 ! autovideosink -v

我不完全清楚你想做什么。从您的gstreamer命令行——我猜:您想在Raspberry Pi上播放本地MP4文件和H.264视频。我在Pi上做一些视频相关的事情。主要是C++直接到OpenMAX(OMX)-目前我有麻烦在PI 4运行我的软件。我会在PI3B+上试用一个旧发行版。我会使用在Pi4发布之前制作的发行版。您应该能够在任何旧Pi上解码和查看1080p30 H.264。是和否。我正在尝试使用GPU在rpi上解码视频,然后通过udp发送。我知道你不能在gstreamer命令中看出这一点,但这是最终的意图。我使用autovideosink仅用于测试。事实上,我并不局限于pi 4,但拥有4个内核和4gig ram几乎是我能做的唯一一件事,我可以让程序在任何地方运行,就像我试图完成的那样。我假设你在pi上运行GUI?也许在水槽有帮助之前(自动)视频转换?当有疑问时,设置GST_DEBUG=3或4以检查cap协商错误。@Hardy_J-您可能喜欢Pi 4,因为它有4个内核。但是您只运行一个内核,即Linux内核,除非您运行的是某种VM。顺便说一句,Raspberry Pi 3型号B也有4个核。@FlorianZwoch这是我的GST_DEBUG 3输出,我不完全清楚你想做什么。从您的gstreamer命令行——我猜:您想在Raspberry Pi上播放本地MP4文件和H.264视频。我在Pi上做一些视频相关的事情。主要是C++直接到OpenMAX(OMX)-目前我有麻烦在PI 4运行我的软件。我会在PI3B+上试用一个旧发行版。我会使用在Pi4发布之前制作的发行版。您应该能够在任何旧Pi上解码和查看1080p30 H.264。是和否。我正在尝试使用GPU在rpi上解码视频,然后通过udp发送。我知道你不能在gstreamer命令中看出这一点,但这是最终的意图。我使用autovideosink仅用于测试。事实上,我并不局限于pi 4,但拥有4个内核和4gig ram几乎是我能做的唯一一件事,我可以让程序在任何地方运行,就像我试图完成的那样。我假设你在pi上运行GUI?也许在水槽有帮助之前(自动)视频转换?当有疑问时,设置GST_DEBUG=3或4以检查cap协商错误。@Hardy_J-您可能喜欢Pi 4,因为它有4个内核。但是您只运行一个内核,即Linux内核,除非您运行的是某种VM。顺便说一句,Raspberry Pi 3型号B也有4个核。@FlorianZwoch这是我的GST_调试3输出不幸的是,这是我的问题。我不想使用avdec_h264,因为它占用了大量CPU。这个管道在RPI上可以工作,但我想使用omx解码。如果你的test.mp4是用高调h264压缩的,没有办法用omxh264enc解码。不幸的是,这是我的问题。我不想使用avdec_h264,因为它占用了大量CPU。这个管道在RPI上可以工作,但我想使用omx解码。如果你的test.mp4是用高调h264压缩的,没有任何方法可以用omxh264enc解码,那么在Raspberry Pie上有什么方法可以做到这一点吗。