0

我有一个在嵌入式 Linux 设备 (Arago) 上运行的 EGLFS 应用程序 (QT/C++)。此应用程序需要使用 gstreamer 播放 MP4 视频文件,使用 fbdevsink 视频接收器。

但出于某种原因,EGLFS 应用程序会覆盖视频,使其无法被看到。即,如果我从命令行运行 gstreamer,则视频在屏幕上可以正常播放。

gst-launch-1.0 playbin uri=file:///usr/bin/myApp/videos/myVid.mp4 video-sink=fbdevsink audio-sink=fakesink

但是,如果我也运行该应用程序,则无法再看到该视频。如果我关闭应用程序,它会再次显示视频。

我真正想要的是应用程序本身会播放视频,但这似乎给出了相同的结果,即如果我触发视频播放,我看不到它。但是,如果我关闭该应用程序,它会在“后面”显示视频的最后一帧,就好像它一直在播放一样。

QWidget vidWidget;
vidWidget.setStyleSheet( "color: rgb(0, 0, 0);" );
vidWidget.showFullScreen();

//Create a new dialog
hwTestDialog testDialog( &vidWidget, QString( "Video Test\n%1" ).arg( testType.at( i ) ) );
testDialog.showFullScreen();
qApp->processEvents(); //Update the GUI

//Play the media (external call)
QProcess systemCall( &vidWidget);

systemCall.start( QString( "gst-launch-1.0 playbin \
                             uri=file:///usr/bin/myApp/videos/myVid.mp4 \
                             video-sink=fbdevsink \
                             audio-sink=fakesink" ).toUtf8() );

所以,fbdevsink 显然直接写入帧缓冲区,但 EGLFS 应用程序不是吗?与显示该应用程序的任何位置一样,它在图形上是否具有比用于显示的帧缓冲区更高的优先级?(请原谅我对这个图形的工作原理不太了解)。

有趣的是,我有一个旧版本的 Arago 和旧版本的 fbdevsink,它没有这个问题。无论 EGLFS 应用程序是否正在运行,gstreamer 都会在其上写入屏幕。

fbdevsink 的较新版本是 1.8.3(即我遇到问题的地方)和 Arago 2017.12

旧版本(运行良好)是 fbdevsink 1.2.3 和 Arago 2015.05

我没有设置任何一个操作系统,所以可能存在配置差异,但我不知道在哪里寻找这个信息,这样信息也会有所帮助。

4

0 回答 0