Команда GST (gstreamer) в команде QMediaPlayer - PullRequest
0 голосов
/ 10 октября 2019

Я использую Qt Creator 4.5.2 (Qt 5.9.5, GCC 7.3.0 64-bit) и работаю в 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();

1 Ответ

0 голосов
/ 11 октября 2019

Если ваша версия Qt до 5.12.2, тогда пользовательский конвейер не будет работать с QMediaPlayer, потому что вместо него используется playbin.

...