Я пытаюсь создать приложение, которое будет воспроизводить бездействующее видео, и когда оно получит пакет TCP, оно начнет воспроизводить видео по пути, указанному в пакете TCP. Теперь все это работает, но когда приложение получает пакет и начинает воспроизводить видео, оно запускается в новом окне. Это означает, что сейчас воспроизводятся 2 видео одновременно, и это вызывает проблемы с производительностью.
В основном у меня есть класс Server и класс MediaPlayer. Когда я вызываю функцию для запуска видео из MediaPlayer, она запускается нормально, но когда я вызываю функцию с сервера, она запускается в новом окне.
mediaplayer.h:
class MediaPlayer : public QWidget
{
Q_OBJECT
public:
MediaPlayer()
//public functions
void startVideo(QString contentLink);
private:
Phonon:MediaObject m_MediaObject;
};
class Server : public QDialog
{
Q_OBJECT
public:
explicit Server(QWidget *parent = nullptr);
public slots:
void readAll();
void onNewConnection();
void onSocketStateChanged(QAbstractSocket::SocketState socketState);
private:
QTcpSocket *tcpSocket = nullptr;
}
mediaplayer.cpp:
MediaPlayer::MediaPlayer() :
ui(nullptr), m_AudioOutput(Phonon::VideoCatergory),
m_videoWidget(new MediaVideoWidget(this))
{}
void MediaPlayer::startVideo(QString contentLink);
{
qDebug() << "startVideo initiated...";
if (QFile::exists(contentLink) != true) {
m_MediaObject.stop();
m_MediaObject.setCurrentSource(noContent); //noContent is extracted from a config file
m_MediaObject.play();
qDebug() << "No video!, " << contentLink;
} else {
m_MediaObject.stop();
m_MediaObject.setCurrentSource(contentLink);
m_MediaObject.play();
m_MediaObject.enqueue(contentLink);
qDebug() << "Video!, " << contentLink;
}
}
Server::Server(QWidget *parent) :
QDialog(parent), tcpServer(nullptr), networkSession(nullptr)
{
tcpSocket = new QTcpSocket(this);
connect(tcpServer, SIGNAL(newConnection()), this, SLOT(onNewConnection()));
}
void Server::onNewConnection()
{
qDebug() << "onNewConnection";
tcpSocket = tcpServer->nextPendingConnection();
connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readAll()));
connect(tcpSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(onSocketStateChanged(QAbstractSocket::SocketState)))
}
void Server::onSocketStateChanged(QAbstractSocket::SocketState socketState)
{
if (socketState == QAbstractSocket::UnconnectedState)
{
QTcpSocket *sender = static_cast<QTcpSocket*>(QObject::sender());
if (sender == tcpSocket)
{
sender->deleteLater();
}
}
}
void Server::readAll()
{
qDebug() << "readAll initiated...";
MediaPlayer *contentPlayer = new MediaPlayer;
if (tcpSocket->bytesAvailable())
{
QString contentLink = tcpSocket->readAll();
qDebug() << contentLink;
contentPlayer->startVideo(contentLink);
}
}
Теперь я попытался добавить hide (); или close (); функции startVideo () , но затем она вызвала функцию startVideo () , и я увидел сообщения qDebug () , но видео не запустилось. Он просто продолжал проигрывать простое видео, которое зацикливается при запуске. Я также пытался сделать это с MediaPlayer contentPlayer и contentPlayer.startVideo (contentLink); в функции readAll () , но тогда он даже не вызывает Функция startVideo () .
Я работаю с Qt Creator 4.8.2 на Raspberry Pi Model 4 под управлением Raspbian.