|
|
@ -52,6 +52,11 @@ VideoWidget::~VideoWidget() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool VideoWidget::play(const QString &url, bool bSave) {
|
|
|
|
bool VideoWidget::play(const QString &url, bool bSave) {
|
|
|
|
|
|
|
|
if (this->getPlayStatus()) {
|
|
|
|
|
|
|
|
emit sendErrorMessageSignal("视频窗口已占用!", 2);
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (url.isEmpty()) return false;
|
|
|
|
if (url.isEmpty()) return false;
|
|
|
|
if (!m_pullFlag) {
|
|
|
|
if (!m_pullFlag) {
|
|
|
|
m_pullFlag = pullStream(url, bSave);
|
|
|
|
m_pullFlag = pullStream(url, bSave);
|
|
|
@ -73,7 +78,13 @@ bool VideoWidget::play(const QString &url, bool bSave) {
|
|
|
|
|
|
|
|
|
|
|
|
if (!bSave) {
|
|
|
|
if (!bSave) {
|
|
|
|
connect(decodeStreamer, &DecodeStream::updateVideoCurrentTime, this,
|
|
|
|
connect(decodeStreamer, &DecodeStream::updateVideoCurrentTime, this,
|
|
|
|
&VideoWidget::receiveVideoCurrentTime);
|
|
|
|
&VideoWidget::receiveVideoCurrentTime, Qt::UniqueConnection);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
connect(this, &VideoWidget::changePlaySpeedSignal, decodeStreamer,
|
|
|
|
|
|
|
|
&DecodeStream::changePlaySpeedSlot, Qt::UniqueConnection);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
connect(decodeStreamer, &DecodeStream::decodeEndSignal, this,
|
|
|
|
|
|
|
|
&VideoWidget::stopPlay, Qt::UniqueConnection);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
decodeStreamer->moveToThread(&decodeStreamThread);
|
|
|
|
decodeStreamer->moveToThread(&decodeStreamThread);
|
|
|
@ -92,6 +103,11 @@ bool VideoWidget::play(const QString &url, bool bSave) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool VideoWidget::udpPlay(QString ip, int port) {
|
|
|
|
bool VideoWidget::udpPlay(QString ip, int port) {
|
|
|
|
|
|
|
|
if (this->getPlayStatus()) {
|
|
|
|
|
|
|
|
emit sendErrorMessageSignal("视频窗口已占用!", 2);
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!m_pullFlag) {
|
|
|
|
if (!m_pullFlag) {
|
|
|
|
m_pullFlag = pullUDPStream(ip, port);
|
|
|
|
m_pullFlag = pullUDPStream(ip, port);
|
|
|
|
if (!m_pullFlag) {
|
|
|
|
if (!m_pullFlag) {
|
|
|
@ -229,6 +245,20 @@ double VideoWidget::getVideoDuration() {
|
|
|
|
return -1;
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool VideoWidget::seekToVideo(int64_t targetTime) {
|
|
|
|
|
|
|
|
if (readStreamer) {
|
|
|
|
|
|
|
|
readStreamer->seekToVideo(targetTime);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void VideoWidget::setPlaySpeed(double speed) {
|
|
|
|
|
|
|
|
if (decodeStreamer) {
|
|
|
|
|
|
|
|
decodeStreamer->changePlaySpeedSlot(speed);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
emit changePlaySpeedSignal(speed);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void VideoWidget::repaint(AVFrame *frame) {
|
|
|
|
void VideoWidget::repaint(AVFrame *frame) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
QMutexLocker locker(&m_mutex);
|
|
|
|
QMutexLocker locker(&m_mutex);
|
|
|
@ -585,8 +615,16 @@ bool VideoWidget::pullStream(const QString &url, bool bSave) {
|
|
|
|
if (url.isEmpty()) return false;
|
|
|
|
if (url.isEmpty()) return false;
|
|
|
|
if (!readStreamer) {
|
|
|
|
if (!readStreamer) {
|
|
|
|
readStreamer = new ReadStream;
|
|
|
|
readStreamer = new ReadStream;
|
|
|
|
connect(readStreamer, &ReadStream::startPullStreamSignal, readStreamer,
|
|
|
|
if (bSave) {
|
|
|
|
&ReadStream::startPullStream, Qt::UniqueConnection);
|
|
|
|
connect(readStreamer, &ReadStream::startPullStreamSignal,
|
|
|
|
|
|
|
|
readStreamer, &ReadStream::startPullStream,
|
|
|
|
|
|
|
|
Qt::UniqueConnection);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
connect(readStreamer, &ReadStream::startPullStreamSignal,
|
|
|
|
|
|
|
|
readStreamer, &ReadStream::startReadFileStream,
|
|
|
|
|
|
|
|
Qt::UniqueConnection);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
connect(readStreamer, &ReadStream::sendErrorMessageSignal, this,
|
|
|
|
connect(readStreamer, &ReadStream::sendErrorMessageSignal, this,
|
|
|
|
&VideoWidget::receiveErrorMessage, Qt::UniqueConnection);
|
|
|
|
&VideoWidget::receiveErrorMessage, Qt::UniqueConnection);
|
|
|
|
// connect(this, &VideoWidget::startPullSignal, readStreamer,
|
|
|
|
// connect(this, &VideoWidget::startPullSignal, readStreamer,
|
|
|
@ -662,7 +700,8 @@ void VideoWidget::receiveErrorMessage(QString message, int type) {
|
|
|
|
emit sendErrorMessageSignal(message, type);
|
|
|
|
emit sendErrorMessageSignal(message, type);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void VideoWidget::receiveVideoCurrentTime(int currentTime, int duration) {
|
|
|
|
void VideoWidget::receiveVideoCurrentTime(int64_t currentTime,
|
|
|
|
|
|
|
|
int64_t duration) {
|
|
|
|
emit updateVideoCurrentTimeSignal(currentTime, duration);
|
|
|
|
emit updateVideoCurrentTimeSignal(currentTime, duration);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|