Не получается воспроизвести RTSP поток через QMediaPlayer
В общем, пытаюсь реализовать отображение 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.