我正在使用Qt Creator 4.5.2(Qt 5.9.5,GCC 7.3.0 64位)并在Ubuntu 18.04上运行,我只是想从IP摄像机获取实时视频流。我使用了“QGraphicsView”,“QGraphicsScene”,“QGraphicsVideoItem”和QMediaPlayer方法。

现在,视频流源是一个IP摄像机,我正在将“QMediaPlayer”与“RTSP”配合使用来获取实时视频,并且可以正常工作。但是,出于性能和其他原因,我需要更改为gstreamer类型的命令,例如“gst-launch-1.0”,以获取实时视频。我在获取正确的“gst pipe”字符串时遇到了麻烦。需要帮助。

在“QMediaPlayer”文档中,该文档指出:自Qt 5.12.2起,URL方案gst-pipeline为GStreamer后端提供了自定义管道。
我的版本是5.9.5,所以我认为GStreamer类型命令应该可以工作。

相关代码和注释:

   // Setup GraphicsScene
   mpView = ui->gvCam;
   mpView->setVisible(true);
   mpScene = new QGraphicsScene;
   mpView->setScene(mpScene);
   mpScene->setSceneRect(0, 0, mpView->width(), mpView->height());
   mpView->setSceneRect(QRectF());
   // Setup IP camera
   mpPlayer1 = new QMediaPlayer;
   mpVideoItem1 = new QGraphicsVideoItem;
   mpPlayer1->setVideoOutput(mpVideoItem1);

   //The following line works and I got the live stream.
   mpPlayer1->setMedia(QUrl("rtsp://20.0.2.118:8554/0"));

   //However, I need to use GST type command, like:
   //gst-launch-1.0 rtspsrc location=rtsp://20.0.2.118:8554/0 ! decodebin ! videoscale \
               ! 'video/x-raw, width=480, height=270, format=I420' \
               ! xvimagesink sync=false force-aspect-ratio=false;

   //The above GST command worked if I issued from the terminal and I got the live stream.
//But, I don't know how to put it as a 'gst pipeline' string as a parameter for  'setMedia' call.

   mpScene->addItem(mpVideoItem1);
   QSizeF qf1(mpView->width(), mpView->height());
   mpVideoItem1->setSize(qf1);
   mpVideoItem1->setAspectRatioMode(Qt::IgnoreAspectRatio);
   mpPlayer1->play();

最佳答案

如果您的Qt版本是5.12.2之前的版本,那么自定义管道将不适用于QMediaPlayer,因为改用了playbin

09-17 19:29