teleport/client/tp-player/thr_data.h

110 lines
3.7 KiB
C
Raw Normal View History

2019-10-31 17:45:17 +00:00
#ifndef THR_DATA_H
#define THR_DATA_H
2019-09-16 05:53:27 +00:00
#include <QThread>
2019-10-31 17:45:17 +00:00
#include <QQueue>
#include <QMutex>
#include <QNetworkReply>
#include <QFile>
2019-11-01 18:12:48 +00:00
#include <QEventLoop>
2019-10-31 17:45:17 +00:00
#include "update_data.h"
#include "record_format.h"
2019-11-03 19:34:11 +00:00
#include "thr_download.h"
2019-09-16 05:53:27 +00:00
/*
4MB
tp-rdp.tpr
2019-10-31 17:45:17 +00:00
tp-rdp.tpk (v3.5.1)
2019-09-16 05:53:27 +00:00
tp-rdp-1.tpd, tp-rdp-2.tpd, tp-rdp-3.tpd, ...
线
线
.tpk
tp-rdp.tpk.tmp, tp-rdp.tpk.len
tp-rdp-1.tpd.tmp, tp-rdp-1.tpd.len, ...
*/
2019-10-31 17:45:17 +00:00
typedef struct KEYFRAME_INFO {
uint32_t time_ms; // 此关键帧的时间点
uint32_t file_index; // 此关键帧图像数据位于哪一个数据文件中
uint32_t offset; // 此关键帧图像数据在数据文件中的偏移
}KEYFRAME_INFO;
2019-09-16 05:53:27 +00:00
2019-10-31 17:45:17 +00:00
typedef std::vector<KEYFRAME_INFO> KeyFrames;
class MainWindow;
// 下载必要的文件解析文件数据生成图像数据QImage*),将数据包放入待显示队列中,等待 ThrPlay 线程使用
// 注意无需将所有数据解析并放入待显示队列此队列有数量限制例如1000个避免过多占用内存
class ThrData : public QThread {
Q_OBJECT
2019-09-16 05:53:27 +00:00
public:
2019-10-31 17:45:17 +00:00
ThrData(MainWindow* mainwin, const QString& url);
~ThrData();
2019-09-16 05:53:27 +00:00
virtual void run();
void stop();
void restart(uint32_t start_ms); // 重新从指定时间开始播放
2019-10-31 17:45:17 +00:00
bool have_more_data();
UpdateData* get_data();
2019-09-16 05:53:27 +00:00
private:
2019-11-01 18:12:48 +00:00
void _run();
2019-10-31 17:45:17 +00:00
bool _load_header();
bool _load_keyframe();
2019-11-03 19:34:11 +00:00
void _clear_data();
2019-10-31 17:45:17 +00:00
void _prepare();
void _notify_message(const QString& msg);
void _notify_error(const QString& err_msg);
signals:
void signal_update_data(UpdateData*);
private:
MainWindow* m_mainwin;
QQueue<UpdateData*> m_data;
QMutex m_locker;
2019-11-03 19:34:11 +00:00
ThrDownload m_thr_download;
2019-09-16 05:53:27 +00:00
bool m_need_stop;
2019-10-31 17:45:17 +00:00
bool m_need_download;
QString m_res;
2019-11-03 19:34:11 +00:00
QString m_data_path_base;
2019-10-31 17:45:17 +00:00
QString m_url_base;
QString m_sid;
QString m_rid;
2019-11-03 19:34:11 +00:00
QString m_data_path;
2019-10-31 17:45:17 +00:00
TS_RECORD_HEADER m_hdr;
KeyFrames m_kf;
bool m_need_restart;
bool m_wait_restart;
bool m_need_show_kf;
uint32_t m_file_idx;
uint32_t m_offset;
bool m_xxx;
int m_restart_kf_idx;
2019-09-16 05:53:27 +00:00
};
2019-10-31 17:45:17 +00:00
#endif // THR_DATA_H