Qt編寫視訊播放器(vlc核心)
阿新 • • 發佈:2019-02-03
在研究qt+vlc的過程中,就想直接做個播放器用於獨立的專案,vlc還支援硬體加速,不過部分電腦硬體不支援除外。用vlc的核心寫播放器就是快,直接呼叫api就行,邏輯處理和ui展示基本上分分鐘的事情,最好加點美化那就更加完美了,市面上很多播放器是vlc核心寫的,或者ffmpeg寫的。
可執行檔案下載:https://pan.baidu.com/s/1KHTsgQUvtzWa3rLB_Tmo7A
1:多執行緒實時播放rtsp視訊流
2:支援windows+linux+mac
3:多執行緒顯示影象,不卡主介面
4:自動重連網路攝像頭
5:可設定邊框大小即偏移量和邊框顏色
6:可設定是否繪製OSD標籤即標籤文字或圖片和標籤位置
7:可設定兩種OSD位置和風格
8:可設定是否儲存到檔案以及檔名
9:可播放本地視訊檔案,支援設定幀率
10:支援h265視訊流+rtmp等常見視訊流
11:可暫停播放和繼續播放
12:支援回撥模式和控制代碼兩種模式
13:自動將當前播放位置和音量大小是否靜音以訊號發出去
14:提供介面設定播放位置和音量及設定靜音
#ifndef VLCTHREAD_H #define VLCTHREAD_H #include <QThread> class QLabel; class libvlc_instance_t; class libvlc_media_t; class libvlc_media_player_t; class VlcThread : public QThread { Q_OBJECT public: enum VlcState { VlcState_NothingSpecial = 0, VlcState_Opening = 1, VlcState_Buffering = 2, VlcState_Playing = 3, VlcState_Paused = 4, VlcState_Stopped = 5, VlcState_Ended = 6, VlcState_Error = 7 }; explicit VlcThread(QObject *parent = 0); ~VlcThread(); protected: void run(); private: bool stopped; //停止執行緒標誌位 bool isPlayVideo; //開始播放標誌位 bool isPauseVideo; //暫停播放標誌位 bool isStopVideo; //停止播放標誌位 bool isReadPosition; //讀取當前位置標誌位 QLabel *lab; //顯示播放視訊標籤 QString fileName; //檔名稱 QString suffix; //檔案拓展名 libvlc_instance_t *vlcInst; libvlc_media_t *vlcMedia; libvlc_media_player_t *vlcPlayer; public: //獲取檔名稱 QString getFileName() const; //獲取拓展名 QString getSuffix() const; private slots: //讀取檔案長度 void readLength(); //獲取當前位置 void readPosition(); //開始播放 void playVideo(); //暫停播放 void pauseVideo(); //停止播放 void stopVideo(); signals: //開始播放訊號 void playStart(); //停止播放訊號 void playStop(); //暫停播放訊號 void playPause(); //當前播放時長 void filePositionReceive(uint position, bool isPlay); //總時長 void fileLengthReceive(uint length); //音量大小 void fileVolumeReceive(int volume, bool mute); public slots: //設定要播放的載體 void setWidget(QLabel *lab); //設定檔案 void setFileName(const QString &fileName); //設定vlc引數 void setOption(const QString &args); //設定快取時長,單位毫秒 void setDelayTime(int delayTime); //設定保存錄像檔案 void save(const QString &videoFilePath); //設定視訊寬高比例 void setWidthHeight(int width, int height); //設定顯示圖片 void setImage(QLabel *lab, const QString &fileName, int width, int height); //播放 void play(); //暫停 void pause(); //停止 void stop(); //停止執行緒 void stopAll(); //儲存快照 void snapshot(const QString &imageFilePath); //檢測是否活著 bool getIsPlaying(); //獲取當前狀態 VlcState getStatus(); //獲取長度 uint getLength(); //獲取當前播放位置 uint getPosition(); //設定播放位置 void setPosition(int position); //獲取靜音狀態 bool getMute(); //設定靜音 void setMute(bool mute); //獲取音量 int getVolumn(); //設定音量 void setVolumn(int volumn); //獲取音軌 int getTrack(); //獲取音軌數量 int getTrackCount(); //設定音軌 void setTrack(int track); }; #endif // VLCTHREAD_H