Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: caysee от Июль 14, 2017, 11:13



Название: Необъяснимое поведение QMediaPlayer в QThread
Отправлено: caysee от Июль 14, 2017, 11:13
Добрый день, столкнулся с такой проблемой, когда создаю объект QMediaPlayer сразу после запуска все работает, а когда в конструкторе, все падает
Код:
#include "worker.h"

Worker::Worker(QObject *parent) : QObject(parent)
{


}

void Worker::process(){

    mPlayer = new QMediaPlayer;
    QString radioString("http://bfm.hostingradio.ru:8004/fm64");
    mPlayer->setMedia(QMediaContent(QUrl(radioString)));
    mPlayer->setVolume(50);
    mPlayer->play();
}
а вот так вод падает
Код:
#include "worker.h"

Worker::Worker(QObject *parent) : QObject(parent)
{

 mPlayer = new QMediaPlayer;
}

void Worker::process(){

   
    QString radioString("http://bfm.hostingradio.ru:8004/fm64");
    mPlayer->setMedia(QMediaContent(QUrl(radioString)));
    mPlayer->setVolume(50);
    mPlayer->play();
}
Запуск потока стандартный
Код:
 thread = new QThread;
    worker = new Worker;
    worker->moveToThread(thread);
    QObject::connect(thread, &QThread::started, worker, &Worker::process);

    thread->start();
даже не знаю в какую сторону копать


Название: Re: Необъяснимое поведение QMediaPlayer в QThread
Отправлено: Apktyc от Июль 14, 2017, 11:18
Судя по всему, так и задумано: QMediaPlayer crashes when moved to thread (https://bugreports.qt.io/browse/QTBUG-47077)


Название: Re: Необъяснимое поведение QMediaPlayer в QThread
Отправлено: caysee от Июль 14, 2017, 11:25
Спасибо, а то я уже просто отчаялся.


Название: Re: Необъяснимое поведение QMediaPlayer в QThread
Отправлено: gil9red от Июль 14, 2017, 13:09
Спасибо, а то я уже просто отчаялся.

Кст, Yoann Lopes пишет что:
Цитировать
QMediaPlayer is neither thread-safe nor reentrant. It is not intended to be used from another thread, it already runs in its own thread on Windows.
т.е. QMediaPlayer уже в своем потоке запущен


Название: Re: Необъяснимое поведение QMediaPlayer в QThread
Отправлено: kuzulis от Июль 23, 2017, 15:52
И да, QtMM не очень хорошая вещь. Если есть возможность - то лучше использовать libVLC (https://github.com/vlc-qt/vlc-qt), ffmpeg (https://github.com/wang-bin/QtAV), DirectShow.