Qt 5, 6 и web-камеры
От: xcs Россия  
Дата: 11.07.23 17:22
Оценка:
Всем привет. Никто с этой темой не разбирался?
Есть web-камера, вещающая в формате H264. Нужно показать видео в Windows и Linux. Конкретнее, Windows 10 c Qt 6.4.0 и Astra Linux 1.7 с Qt 5.15. Под Linux завелось, правда, пока под Debian 10 32бита, просто виртуалка под рукой была без плясок с репозитариями. В Астре с пакетами разберусь, должно заработать. В Windows тот же код, с поправкой на версии, не работает — с nvidea вылетает
Attempted to call isFormatSupported() without a window set
Failed to create D3D11 swapchain: Error 0x80070057:
С интелом что-то с версиями шейдеров.
Ни локальный mpeg не проигрывает, ни по rtsp.

QtMultimedia основательно переработана в Qt6, но в linux хоть gstreamer как backend остался. А в Windows хаос — в qt6 оставили только wmf как backend, но уже пилят ffmpeg, судя по отзывам пока не очень.

Кто-то под Windows камеры показывает? Чем пользуетесь?
Re: Qt 5, 6 и web-камеры
От: Conductor СССР  
Дата: 11.07.23 21:24
Оценка:
Здравствуйте, xcs, Вы писали:

xcs>QtMultimedia основательно переработана в Qt6, но в linux хоть gstreamer как backend остался. А в Windows хаос — в qt6 оставили только wmf как backend, но уже пилят ffmpeg, судя по отзывам пока не очень.


xcs>Кто-то под Windows камеры показывает? Чем пользуетесь?


Используем gstreamer и там, и там. Но для источников (камеры у нас разные, у большинства rtsp отсутствует) используем gstreamer напрямую. Однако, используем qtmultimedia для записи (там отдельная песня) и воспроизведения из архива. В качестве backend тоже gstreamer и там, и там. Для работы c gstreamer под win qt, естественно, пришлось пропатчить. Как уже писал выше, QCamera... мы не используем, но ради интереса проверял qtmultimedia/examples/multimediawidgets/camera под win с gstreamer backend — работает.

Qt6 не используем и пока не собираемся.
Re: Qt 5, 6 и web-камеры
От: alpha21264 СССР  
Дата: 12.07.23 00:18
Оценка:
Здравствуйте, xcs, Вы писали:

xcs>Всем привет. Никто с этой темой не разбирался?

xcs>Есть web-камера, вещающая в формате H264. Нужно показать видео в Windows и Linux. Конкретнее, Windows 10 c Qt 6.4.0 и Astra Linux 1.7 с Qt 5.15. Под Linux завелось, правда, пока под Debian 10 32бита, просто виртуалка под рукой была без плясок с репозитариями.

Можешь поподробнее рассказать, что у тебя под Линуксом завелось?
Тоже интересуюсь темой, но пока до практических действий руки не дошли.

Течёт вода Кубань-реки куда велят большевики.
Re[2]: Qt 5, 6 и web-камеры
От: xcs Россия  
Дата: 12.07.23 08:25
Оценка: 4 (1)
Здравствуйте, alpha21264, Вы писали:

A>Здравствуйте, xcs, Вы писали:


xcs>>Всем привет. Никто с этой темой не разбирался?

xcs>>Есть web-камера, вещающая в формате H264. Нужно показать видео в Windows и Linux. Конкретнее, Windows 10 c Qt 6.4.0 и Astra Linux 1.7 с Qt 5.15. Под Linux завелось, правда, пока под Debian 10 32бита, просто виртуалка под рукой была без плясок с репозитариями.

A>Можешь поподробнее рассказать, что у тебя под Линуксом завелось?

A>Тоже интересуюсь темой, но пока до практических действий руки не дошли.

Да код простой, как в доках, основное — поставить gstreamer c зависимостями и его плагин под Qt. Полный список еще надо уточнить, что-то лишнее наверняка воткнул. Добиваешься, чтобы VLC картинку по url показывал, потом свой тест.
Виртуалка WMware Player 15, в настройках выставить 3d ускорение. VPN-соединение с офисом, смотрю на угол серверной.
Код
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMediaPlayer>
#include <QVideoWidget>
class MainWindow : public QMainWindow
{
  Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
public Q_SLOTS:
    void onErrorOccurred(QMediaPlayer::Error error);
    void onMediaStatusChanged(QMediaPlayer::MediaStatus status);
    void onVideoAvailableChanged(bool);
private:
    QMediaPlayer mp_;
    QVideoWidget *vw_;
};
#endif // MAINWINDOW_H
//============================================
#include <QDebug>
#include <QUrl>
#include <QMediaContent>
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent),mp_(this)
{
    vw_ = new QVideoWidget(this);
    setCentralWidget(vw_);
    QUrl src("rtsp://login:password@192.168.4.80/ISAPI/Streaming/Channels/101");
    connect(&mp_,SIGNAL(error(QMediaPlayer::Error)),this,SLOT(onErrorOccurred(QMediaPlayer::Error)));
    connect(&mp_,&QMediaPlayer::mediaStatusChanged,this,&MainWindow::onMediaStatusChanged);
    connect(&mp_,&QMediaPlayer::videoAvailableChanged,this,&MainWindow::onVideoAvailableChanged);

    mp_.setMedia(QMediaContent(src));
    mp_.setVideoOutput(vw_);
    vw_->show();
}

void MainWindow::onErrorOccurred(QMediaPlayer::Error error)
{
    qDebug() << "error" << error << mp_.errorString();
}
void MainWindow::onMediaStatusChanged(QMediaPlayer::MediaStatus status)
{
    if (status==QMediaPlayer::LoadedMedia) {
        qDebug() << mp_.mediaStatus() << mp_.errorString();
        mp_.play();
    }
}

void MainWindow::onVideoAvailableChanged(bool b)
{
    qDebug() << "onVideoAvailableChanged" << b;
}
Re[2]: Qt 5, 6 и web-камеры
От: xcs Россия  
Дата: 12.07.23 08:35
Оценка:
Здравствуйте, Conductor, Вы писали:

C>Здравствуйте, xcs, Вы писали:


xcs>>QtMultimedia основательно переработана в Qt6, но в linux хоть gstreamer как backend остался. А в Windows хаос — в qt6 оставили только wmf как backend, но уже пилят ffmpeg, судя по отзывам пока не очень.


xcs>>Кто-то под Windows камеры показывает? Чем пользуетесь?


C>Используем gstreamer и там, и там. Но для источников (камеры у нас разные, у большинства rtsp отсутствует) используем gstreamer напрямую. Однако, используем qtmultimedia для записи (там отдельная песня) и воспроизведения из архива. В качестве backend тоже gstreamer и там, и там. Для работы c gstreamer под win qt, естественно, пришлось пропатчить. Как уже писал выше, QCamera... мы не используем, но ради интереса проверял qtmultimedia/examples/multimediawidgets/camera под win с gstreamer backend — работает.


C>Qt6 не используем и пока не собираемся.


Спасибо. У нас SCADA, камеры — так, доп фича, если "из коробки" заработает, то включим, пока пробую. Под Win так не получилось, пример player при старте пишет ошибку инициализации контекста, разные для intel и nvidia. direct3d 11. Если проверка драйверов ничего не даст, то отложим до лучших времен, скорее всего, полно других задач.
Re[3]: Qt 5, 6 и web-камеры
От: Conductor СССР  
Дата: 12.07.23 12:22
Оценка:
Здравствуйте, xcs, Вы писали:

xcs>Да код простой, как в доках, основное — поставить gstreamer c зависимостями и его плагин под Qt.


Это который Bindings for Qt? Если да, то зачем? QtMultimedia напрямую gstreamer использует.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.