25 std::optional<QIODevice *> outputDevice)
28 m_session.setVideoFrameInput(&m_videoInput);
30 QObject::connect(&m_videoGenerator, &VideoGenerator::frameCreated,
31 &m_videoInput, &QVideoFrameInput::sendVideoFrame);
34 m_recorder.setAutoStop(
true);
35 m_videoGenerator.emitEmptyFrameOnStop();
40 m_session.setAudioBufferInput(&m_audioInput);
42 QObject::connect(&m_audioGenerator, &AudioGenerator::audioBufferCreated,
43 &m_audioInput, &QAudioBufferInput::sendAudioBuffer);
46 m_recorder.setAutoStop(
true);
47 m_audioGenerator.emitEmptyBufferOnStop();
53 QObject::connect(&m_videoInput, &QVideoFrameInput::readyToSendVideoFrame,
54 &m_videoGenerator, &VideoGenerator::nextFrame);
57 QObject::connect(&m_audioInput, &QAudioBufferInput::readyToSendAudioBuffer,
58 &m_audioGenerator, &AudioGenerator::nextBuffer);
61 m_session.setRecorder(&m_recorder);
62 m_recorder.setQuality(QMediaRecorder::VeryHighQuality);
65 m_recorder.setOutputDevice(*outputDevice);
67 if (!outputDevice && m_recorder.outputLocation().isEmpty()) {
70 if (!m_tempFile.open()) {
71 qWarning(
"Failed to open file: %s (%s)",
72 qPrintable(m_tempFile.fileName()), qPrintable(m_tempFile.errorString()));
76 m_recorder.setOutputLocation(QUrl::fromLocalFile(m_tempFile.fileName()));
86 m_session.setVideoSink(m_videoSink);