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 |
分类:
Qt/C++视频监控
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!