dlink 多线程,修正回放线程

This commit is contained in:
2024-04-24 21:45:08 +08:00
parent 647c038957
commit 36ff21b430
9 changed files with 421 additions and 207 deletions
+60 -36
View File
@@ -1,4 +1,5 @@
#include "PlayThread.h"
#include "QApplication"
PlayThread::PlayThread(QObject *parent) : QObject(parent)
@@ -38,13 +39,11 @@ void PlayThread::run()
while(play_control)
{
while (FrameData.size() > 0) {
while (play_start) {
//for 不允许自加,需要后面逻辑判断增加
for (QList<QByteArray>::iterator i = FrameData.begin(); i != FrameData.end();)
{
//记录一下运行到延迟之前用了多少时间,需要减掉这部分时间
elapstimer.start();
CurrentProgress = FrameData.indexOf(*i);
@@ -100,19 +99,25 @@ void PlayThread::run()
frame.clear();
frame.append(data.mid(index));
qint64 time_gap = time.toMSecsSinceEpoch() - time_tick;
while((QDateTime::currentMSecsSinceEpoch() - currentTick) < (time_gap/times))
{
}
emit transmit(QHostAddress(ip),port,frame);
//延迟处理
qint64 time_gap = time.toMSecsSinceEpoch() - time_tick - (qint64)(elapstimer.nsecsElapsed()/ 1000000.0);
time_tick = time.toMSecsSinceEpoch();
if(time_gap > 0)
{
while((QDateTime::currentMSecsSinceEpoch() - currentTick) < (time_gap/times))
{
//等
QApplication::processEvents();
}
}
currentTick = QDateTime::currentMSecsSinceEpoch();
//中断播放,一般只有要播放新的文件才会出现这种情况
if(play_state == 0)
{
@@ -120,7 +125,8 @@ void PlayThread::run()
}
else if(play_state == 1)//正常播放
{
if(time_gap != 0)
/*
if(time_gap > 0)
{
qint64 time_count = time_gap/times;//ms
@@ -170,18 +176,19 @@ void PlayThread::run()
{
emit delaytime(time_gap/times,0);
}
*/
if(play_state == 1)//如果是正常计时,那么就加
CurrentProgress = FrameData.indexOf(*i);
emit progress(FrameData.size() - 1,CurrentProgress);
++i;
if(i == FrameData.end())
{
CurrentProgress = FrameData.indexOf(*i);
emit progress(FrameData.size() - 1,CurrentProgress);
++i;
if(i == FrameData.end())
{
play_state = 0;
break;
}
play_state = 0;
break;
}
}
else if(play_state == 2)//暂停
{
@@ -224,27 +231,53 @@ void PlayThread::run()
}
}
}
/*
//延迟处理
qint64 time_gap = time.toMSecsSinceEpoch() - time_tick - (qint64)(elapstimer.nsecsElapsed()/ 1000000.0);
if(time_gap > 0)
{
while((QDateTime::currentMSecsSinceEpoch() - currentTick) < (time_gap/times))
{
emit delaytime(time_gap/times,QDateTime::currentMSecsSinceEpoch() - currentTick);
}
}
else
{
}
emit transmit(QHostAddress(ip),port,frame);
time_tick = time.toMSecsSinceEpoch();
currentTick = QDateTime::currentMSecsSinceEpoch();
*/
//qDebug() << "play time:" << elapstimer.nsecsElapsed() / 1000000.0;
}
play_state = 0;
isChangedPos = false;
time_tick = 0;
FrameData.clear();
//FrameData.clear();
play_start = false;
break;//退出,结束播放
}
QThread::msleep(100);
QThread::msleep(1);
}
}
void PlayThread::resetData()
{
port_data.clear();
FrameData.clear();
time_tick= 0;
play_start = false;
play_state = 0;
}
@@ -268,23 +301,14 @@ void PlayThread::playData(QList<QByteArray> data,QMap<quint16,QList<QByteArray>>
}
void PlayThread::appendPlayData(QList<QByteArray> data,QMap<quint16,QList<QByteArray>> data2)
void PlayThread::appendPlayData(quint32 ip, quint16 port, QByteArray data)
{
//收到数据后对数据进行分类,重新生成子线程进行解析
//qDebug() << "PlayThread:" << QThread::currentThreadId();
port_data.clear();
port_data = data2;
FrameData.clear();
FrameData = data;
time_tick= 0;
play_state = 1;
emit progress(FrameData.size() - 1,0);
FrameData.append(data);
emit progress(size() - 1,0);
}