Не получается воспроизвести RTSP поток через QMediaPlayer

Рейтинг: 0Ответов: 0Опубликовано: 06.08.2023

В общем, пытаюсь реализовать отображение RTSP потока. Идея такая: Есть QMediaPlayer у которого в качестве источника выставлен QUrl с RTSP адресом. В качестве VideoOutput указан QVideoSink, который, в свою очередь, отображает картинку в QLabel через сигнал QVideoSink::videoFrameChanged.
Вот как это выглядит в коде:

void Camera::start() {
    out = new QLabel(); // Объявлен в заголовочном

    sink = new QVideoSink(); // Также объявлен в заголовочном
    connect(sink, &QVideoSink::videoFrameChanged, this, &Camera::frameUpdate);

    QMediaPlayer* rtspPlayer = new QMediaPlayer();
    rtspPlayer->setVideoOutput(sink);
    rtspPlayer->setSource(QUrl("rtsp://admin:admin@192.168.0.20:554/"));
    rtspPlayer->play();

}

void Camera::frameUpdate() {
    qDebug() << "Frame";
    
    QPixmap p;
    p = p.fromImage(sink->videoFrame().toImage());
    out->setPixmap(p);
    
}

После запуска метод frameUpdate не вызывается, о чём говорит то, что в консоль не печатается дебаг сообщение "Frame". RTSP адрес указан верно, так как я по нему смог подключиться к камере через VLC player. Почитал другие форумы, говорили что нужно установить FFMpeg в качестве бэкэнда. При попытке это сделать через qputenv("QT_MEDIA_BACKEND", "ffmpeg"); (до создания экземпляра приложения, конечно же) программа просто крашится с сообщениями:

could not load multimedia backend "ffmpeg"
QtMultimedia is not currently supported on this platform or compiler.

Хотя ffmpeg в системе установлен, спокойно запускается через терминал. QtMultimedia также залинкован (CMake):

cmake_minimum_required(VERSION 3.20)
project(RTSPViewer)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_AUTORCC ON)

find_package(Qt6 COMPONENTS Widgets Multimedia MultimediaWidgets REQUIRED)

add_executable(RTSPViewer main.cpp Camera.h Camera.cpp)

target_link_libraries(RTSPViewer PRIVATE Qt6::Widgets Qt6::Multimedia Qt6::MultimediaWidgets)

До этого по похожей схеме успешно запускал трансляцию с вебки (с помощью QCamera и QMediaCaptureSession), что подтверждает, что QtMultimedia работает. Как решить проблему с RTSP трансляцией — непонятно.

Система: macOS Ventura

Qt и FFMpeg устанавливались через homebrew.

Ответы

Ответов пока нет.