首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Qt编写视频播放器(vlc内核)[通俗易懂]

Qt编写视频播放器(vlc内核)[通俗易懂]

作者头像
全栈程序员站长
发布2022-09-19 21:13:17
发布2022-09-19 21:13:17
2K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

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

代码语言:javascript
代码运行次数:0
运行
复制
#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 

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/166595.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档