QMediaRecorder لا يعمل - غير قادر على التسجيل من كاميرا الويب

StackOverflow https://stackoverflow.com//questions/25061102

سؤال

لقد كنت أبحث في كل مكان عن حل لهذه المشكلة ورأيت بعض المواضيع هنا حول هذه المشكلة ولكن دون حل.

أحاول تسجيل مقطع فيديو من كاميرتي ويب مختلفتين موجودتين على جهاز الكمبيوتر الخاص بي.أنا قادر على عرض الفيديو لكليهما ولكن المشكلة هي التسجيل.عندما أحاول ذلك لا يحدث شيء.لا يتم حفظ أي ملف ولا تتغير الحالات أبدًا.لقد أرفقت أدناه الكود الذي يقوم بتحميل الكاميرات والكود الذي يقوم بتحميل QMediaRecorders.لقد حاولت أيضًا باستخدام إحدى الكاميرات وما زالت لا تعمل."الكاميرا" الخاصة بمثال QT لا تعمل بشكل جيد، ويتم دائمًا تعطيل خيار التسجيل.

void MainWindow::setCamera() {
    foreach (const QCameraInfo &cameraInfo, QCameraInfo::availableCameras()) {
        qDebug() << "Device Name: " + cameraInfo.deviceName();
        qDebug() << "Device Description: " + cameraInfo.description();
        if (cameraInfo.description() == "Integrated Camera")
            camera1 = new QCamera(cameraInfo);
        else if(cameraInfo.description() == "QuickCam for Notebooks Pro")
            camera2 = new QCamera(cameraInfo);
    }
    camera1->setViewfinder(ui->camScreen1);
    camera2->setViewfinder(ui->camScreen2);
    camera1->setCaptureMode(QCamera::CaptureVideo);
    camera2->setCaptureMode(QCamera::CaptureVideo);
    camera1->start();
    camera2->start();

    qDebug() << camera1->status();
    qDebug() << camera1->state();
    qDebug() << camera1->error();
}

void MainWindow::setVideoEncoding() {
    recorder1 = new QMediaRecorder(camera1);
    recorder2 = new QMediaRecorder(camera2);

    QVideoEncoderSettings settings = recorder1->videoSettings();
    settings.setCodec("video/mpeg2");
    settings.setQuality(QMultimedia::LowQuality);
    settings.setResolution(640,480);
    settings.setFrameRate(30.0);

    recorder1->setVideoSettings(settings);
    recorder2->setVideoSettings(settings);

    recorder1->setMetaData(QMediaMetaData::Title, QVariant(QLatin1String("Record1")));
    recorder2->setMetaData(QMediaMetaData::Title, QVariant(QLatin1String("Record2")));

    recorder1->setOutputLocation(QUrl::fromLocalFile(QCoreApplication::applicationDirPath() + "/" + "testvide1o.mp4"));
    recorder2->setOutputLocation(QUrl::fromLocalFile(QCoreApplication::applicationDirPath() + "/" + "testvideo2.mp4"));

    qDebug() << recorder1->status();
    qDebug() << recorder1->state();
    qDebug() << recorder1->error();
}

عندما أضغط على زر التسجيل:

void MainWindow::toggleRecord(bool startRecord) {
    if(startRecord) {
        recorder1->record();
        recorder2->record();
    }
    else {
        recorder1->stop();
        recorder2->stop();
    }

    qDebug() << recorder1->state();
    qDebug() << recorder1->status();
    qDebug() << recorder1->error();

    qDebug() << recorder2->state();
    qDebug() << recorder2->status();
    qDebug() << recorder2->error();
}

الحالة والحالة والخطأ هي كما يلي (في كل مرة أتصل بهم)

آلة تصوير:ولاية: QCamera::UnavailableStatus;حالة: QCamera::ActiveState;خطأ: QCamera::NoError.

مسجل:ولاية: QMediaRecorder::UnavailableStatus;حالة: QMediaRecorder::StoppedState;خطأ: QMediaRecorder::NoError.

شكرا مقدما على وقتك.

هل كانت مفيدة؟

المحلول

ويبدو أن المشكلة تكمن في أن التسجيل ما زال لا يعمل بالنسبة للويندوز، كما أوضحنا هنا

لقد اختبرت ذلك على جهاز Mac وكان يعمل بشكل جيد.لإصلاح هذا على النوافذ استخدمت مكتبة كيو تي ميل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top