Qt编写视频播放器(vlc内核)

在研究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:提供接口设置播放位置和音量及设置静音

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#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

  

posted @   飞扬青云  阅读(6467)  评论(1编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示