This commit is contained in:
2025-09-25 16:56:53 +08:00
parent e44678d519
commit 1d9da56656
88 changed files with 18171 additions and 0 deletions

146
homewindow.h Normal file
View File

@@ -0,0 +1,146 @@
#ifndef HOMEWINDOW_H
#define HOMEWINDOW_H
#include <QMainWindow>
#include <QTimer>
#include "toast.h"
#include "ijkmediaplayer.h"
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);
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();
// 进度条响应
// 拖动触发
// void on_playSliderValueChanged();
// void on_volumeSliderValueChanged();
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_bufDurationBox_currentIndexChanged(int index);
void on_jitterBufBox_currentIndexChanged(int index);
void on_prevBtn_clicked();
void on_nextBtn_clicked();
void on_forwardFastBtn_clicked();
void on_backFastBtn_clicked();
void on_fullBtn_clicked();
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;
bool bIsFull;
};
#endif // HOMEWINDOW_H