2025-09-25 16:56:53 +08:00
|
|
|
|
#ifndef HOMEWINDOW_H
|
|
|
|
|
|
#define HOMEWINDOW_H
|
|
|
|
|
|
|
|
|
|
|
|
#include <QMainWindow>
|
|
|
|
|
|
#include <QTimer>
|
|
|
|
|
|
#include "toast.h"
|
|
|
|
|
|
#include "ijkmediaplayer.h"
|
2025-09-25 23:53:23 +08:00
|
|
|
|
#include "setting.h"
|
2025-09-25 16:56:53 +08:00
|
|
|
|
namespace Ui
|
|
|
|
|
|
{
|
|
|
|
|
|
class HomeWindow;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class HomeWindow : public QMainWindow
|
|
|
|
|
|
{
|
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
explicit HomeWindow(QWidget *parent = 0);
|
|
|
|
|
|
~HomeWindow();
|
|
|
|
|
|
void initUi();
|
|
|
|
|
|
int InitSignalsAndSlots();
|
|
|
|
|
|
int message_loop(void *arg);
|
|
|
|
|
|
int OutputVideo(const Frame *frame);
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
virtual void resizeEvent(QResizeEvent *event);
|
|
|
|
|
|
void resizeUI();
|
|
|
|
|
|
void closeEvent(QCloseEvent *event);
|
|
|
|
|
|
signals:
|
|
|
|
|
|
// 发送要显示的提示信息
|
|
|
|
|
|
void sig_showTips(Toast::Level leve, QString tips);
|
|
|
|
|
|
void sig_updateAudioCacheDuration(int64_t duration);
|
|
|
|
|
|
void sig_updateVideoCacheDuration(int64_t duration);
|
|
|
|
|
|
void sig_updateCurrentPosition(long position);
|
|
|
|
|
|
void sig_updatePlayOrPause(int state);
|
|
|
|
|
|
|
|
|
|
|
|
void sig_stopped(); // 被动停止
|
|
|
|
|
|
void sig_troggleFull(bool);
|
2025-09-25 23:53:23 +08:00
|
|
|
|
public slots:
|
|
|
|
|
|
void on_bufDurationBox_currentIndexChanged(int index);
|
|
|
|
|
|
void on_jitterBufBox_currentIndexChanged(int index);
|
2025-09-25 16:56:53 +08:00
|
|
|
|
private slots:
|
|
|
|
|
|
void on_UpdateAudioCacheDuration(int64_t duration);
|
|
|
|
|
|
void on_UpdateVideoCacheDuration(int64_t duration);
|
|
|
|
|
|
// 打开文件
|
|
|
|
|
|
void on_openFile();
|
|
|
|
|
|
// 打开网络流,逻辑和vlc类似
|
|
|
|
|
|
void on_openNetworkUrl();
|
|
|
|
|
|
void on_listBtn_clicked();
|
|
|
|
|
|
void on_playOrPauseBtn_clicked(); // 播放暂停
|
|
|
|
|
|
void on_updatePlayOrPause(int state);
|
|
|
|
|
|
void on_stopBtn_clicked(); // 停止
|
|
|
|
|
|
// stop->play
|
|
|
|
|
|
bool play(std::string url);
|
|
|
|
|
|
bool stop();
|
|
|
|
|
|
|
|
|
|
|
|
// 进度条响应
|
|
|
|
|
|
// 拖动触发
|
2025-09-25 23:53:23 +08:00
|
|
|
|
// void on_playSliderValueChanged();
|
|
|
|
|
|
// void on_volumeSliderValueChanged();
|
2025-09-25 16:56:53 +08:00
|
|
|
|
void on_updateCurrentPosition(long position);
|
|
|
|
|
|
|
|
|
|
|
|
void onTimeOut();
|
|
|
|
|
|
|
|
|
|
|
|
void on_playSliderValueChanged(int value);
|
|
|
|
|
|
void on_volumeSliderValueChanged(int value);
|
|
|
|
|
|
void on_speedBtn_clicked();
|
|
|
|
|
|
|
|
|
|
|
|
void on_screenBtn_clicked();
|
|
|
|
|
|
void on_showTips(Toast::Level leve, QString tips);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void on_prevBtn_clicked();
|
|
|
|
|
|
|
|
|
|
|
|
void on_nextBtn_clicked();
|
|
|
|
|
|
|
|
|
|
|
|
void on_forwardFastBtn_clicked();
|
|
|
|
|
|
|
|
|
|
|
|
void on_backFastBtn_clicked();
|
|
|
|
|
|
|
|
|
|
|
|
void on_fullBtn_clicked();
|
|
|
|
|
|
|
2025-09-25 23:53:23 +08:00
|
|
|
|
void on_settingBtn_clicked();
|
|
|
|
|
|
|
2025-09-25 16:56:53 +08:00
|
|
|
|
private:
|
|
|
|
|
|
|
|
|
|
|
|
void startTimer();
|
|
|
|
|
|
void stopTimer();
|
|
|
|
|
|
// pause->play
|
|
|
|
|
|
bool resume();
|
|
|
|
|
|
// play->pause
|
|
|
|
|
|
bool pause();
|
|
|
|
|
|
// play/pause->stop
|
|
|
|
|
|
|
|
|
|
|
|
void resizeCtrlBar();
|
|
|
|
|
|
void resizeDisplayAndFileList();
|
|
|
|
|
|
int seek(int cur_valule);
|
|
|
|
|
|
|
|
|
|
|
|
int fastForward(long inrc);
|
|
|
|
|
|
int fastBack(long inrc);
|
|
|
|
|
|
// 主动获取信息,并更新到ui
|
|
|
|
|
|
void getTotalDuration();
|
|
|
|
|
|
|
|
|
|
|
|
// 定时器获取,每秒读取一次时间
|
|
|
|
|
|
void reqUpdateCurrentPosition();
|
|
|
|
|
|
void reqUpdateCacheDuration();
|
|
|
|
|
|
|
|
|
|
|
|
void initButtonIcon();
|
|
|
|
|
|
private:
|
|
|
|
|
|
Ui::HomeWindow *ui;
|
|
|
|
|
|
|
|
|
|
|
|
bool is_show_file_list_ = true; // 是否显示文件列表,默认显示
|
|
|
|
|
|
IjkMediaPlayer *mp_ = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
//播放相关的信息
|
|
|
|
|
|
// 当前文件播放的总长度,单位为ms
|
|
|
|
|
|
long total_duration_ = 0;
|
|
|
|
|
|
long current_position_ = 0;
|
|
|
|
|
|
int64_t pre_get_cur_pos_time_ = 0;
|
|
|
|
|
|
|
|
|
|
|
|
QTimer *play_time_ = nullptr;
|
|
|
|
|
|
|
|
|
|
|
|
int play_slider_max_value = 6000;
|
|
|
|
|
|
bool req_seeking_ = false; //当请求seek时,中间产生的播放速度不
|
|
|
|
|
|
|
|
|
|
|
|
bool req_screenshot_ = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 缓存统计
|
|
|
|
|
|
int max_cache_duration_ = 400; // 默认200ms
|
|
|
|
|
|
int network_jitter_duration_ = 100; // 默认100ms
|
|
|
|
|
|
float accelerate_speed_factor_ = 1.2; //默认加速是1.2
|
|
|
|
|
|
float normal_speed_factor_ = 1.0; // 正常播放速度1.0
|
|
|
|
|
|
bool is_accelerate_speed_ = false;
|
|
|
|
|
|
|
|
|
|
|
|
// 缓存长度
|
|
|
|
|
|
int64_t audio_cache_duration = 0;
|
|
|
|
|
|
int64_t video_cache_duration = 0;
|
|
|
|
|
|
int64_t pre_get_cache_time_ = 0;
|
|
|
|
|
|
int real_time_ = 0;
|
|
|
|
|
|
|
|
|
|
|
|
// 码率
|
|
|
|
|
|
int64_t audio_bitrate_duration = 0;
|
|
|
|
|
|
int64_t video_bitrate_duration = 0;
|
|
|
|
|
|
|
2025-09-25 23:53:23 +08:00
|
|
|
|
// setting dialog
|
|
|
|
|
|
Setting setting_wid_;
|
|
|
|
|
|
|
2025-09-25 16:56:53 +08:00
|
|
|
|
bool bIsFull;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif // HOMEWINDOW_H
|