19 , _mediaPlayer(new QMediaPlayer(this))
20 , _captureSession(new QMediaCaptureSession(this))
21 , _mediaRecorder(new QMediaRecorder(this))
25 _captureSession->setRecorder(_mediaRecorder);
29 (void) connect(_mediaPlayer, &QMediaPlayer::playbackStateChanged,
this, [
this](QMediaPlayer::PlaybackState newState) {
30 if (newState == QMediaPlayer::PlaybackState::PlayingState) {
32 }
else if (newState == QMediaPlayer::PlaybackState::StoppedState) {
36 (void) connect(_mediaPlayer, &QMediaPlayer::mediaStatusChanged,
this, [
this](QMediaPlayer::MediaStatus status) {
38 case QMediaPlayer::MediaStatus::LoadingMedia:
39 _streamDevice = _mediaPlayer->sourceDevice();
45 (void) connect(_mediaPlayer, &QMediaPlayer::metaDataChanged,
this, []() {
50 (void) connect(_mediaPlayer, &QMediaPlayer::bufferProgressChanged,
this, [](
float filled) {
51 qCDebug(QtMultimediaReceiverLog) << Q_FUNC_INFO <<
"Buffer Progress:" << filled;
53 (void) connect(_mediaPlayer, &QMediaPlayer::errorOccurred,
this, [](QMediaPlayer::Error
error,
const QString &
errorString) {
55 case QMediaPlayer::Error::NetworkError:
61 qCDebug(QtMultimediaReceiverLog) << Q_FUNC_INFO <<
errorString;
67 _mediaRecorder->setVideoFrameRate(0);
68 _mediaRecorder->setVideoResolution(QSize());
69 (void) connect(_mediaRecorder, &QMediaRecorder::recorderStateChanged,
this, [
this](QMediaRecorder::RecorderState state) {
70 if (state == QMediaRecorder::RecorderState::RecordingState) {
71 emit recordingStarted(_mediaRecorder->actualLocation().toString());
73 emit recordingChanged(_mediaRecorder->recorderState() == QMediaRecorder::RecorderState::RecordingState);
75 (void) connect(_mediaRecorder, &QMediaRecorder::errorOccurred,
this, [](QMediaRecorder::Error
error,
const QString &
errorString) {
77 case QMediaRecorder::Error::OutOfSpaceError:
83 qCDebug(QtMultimediaReceiverLog) << Q_FUNC_INFO <<
errorString;
86 _frameTimer.setSingleShot(
true);
87 _frameTimer.setTimerType(Qt::PreciseTimer);
191 qCDebug(QtMultimediaReceiverLog) << Q_FUNC_INFO;
194 qCCritical(QtMultimediaReceiverLog) <<
"VideoSink is NULL";
200 qCWarning(QtMultimediaReceiverLog) <<
"VideoSink is already set";
204 qCWarning(QtMultimediaReceiverLog) <<
"VideoSizeConnection is already set";
212 if (frame.isValid()) {
221 qCDebug(QtMultimediaReceiverLog) <<
"Decoding";
247 qCDebug(QtMultimediaReceiverLog) << Q_FUNC_INFO;
250 qCWarning(QtMultimediaReceiverLog) <<
"Recording Unavailable";
257 _mediaRecorder->setMediaFormat(QMediaFormat::FileFormat::Matroska);
260 _mediaRecorder->setMediaFormat(QMediaFormat::FileFormat::QuickTime);
267 _mediaRecorder->setMediaFormat(QMediaFormat::FileFormat::UnspecifiedFormat);
271 _mediaRecorder->setOutputLocation(QUrl::fromLocalFile(videoFile));
275 qCDebug(QtMultimediaReceiverLog) <<
"Recording";
293 qCDebug(QtMultimediaReceiverLog) << Q_FUNC_INFO;
296 qCWarning(QtMultimediaReceiverLog) <<
"Video Sink is NULL";
301 const QVideoFrame frame =
_videoSink->videoFrame();
302 if (!frame.isValid() || !frame.isReadable()) {
303 qCWarning(QtMultimediaReceiverLog) <<
"Screenshot Frame is Invalid";
313 QSharedPointer<QQuickItemGrabResult> screenshot =
_videoOutput->grabToImage(targetSize);
317 screenshot->saveToFile(imageFile);
319 qCDebug(QtMultimediaReceiverLog) <<
"Screenshot";