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

Qt编写视频播放器(vlc内核)[通俗易懂]在研究qt+vlc的过程中,就想直接做个播放器用于独立的项目,vlc还支持硬件加速,不过部分电脑硬件不支持除外。用vlc的内核写播放器就是快,直接调用api就行,逻辑处理和ui展示基本上分分钟的事情,

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在研究qt+vlc的过程中,就想直接做个播放器用于独立的项目,vlc还支持硬件加速,不过部分电脑硬件不支持除外。用vlc的内核写播放器就是快,直接调用api就行,逻辑处理和ui展示基本上分分钟的事情,最好加点美化那就更加完美了,市面上很多播放器是vlc内核写的,或者ffmpeg写的。
执行文件下载:https://pan.baidu.com/s/1KHTsgQUvtzWa3rLB_Tmo7A Qt编写视频播放器(vlc内核)[通俗易懂]Qt编写视频播放器(vlc内核)[通俗易懂]Qt编写视频播放器(vlc内核)[通俗易懂]Qt编写视频播放器(vlc内核)[通俗易懂]

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

  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2022年8月1日 下午6:16
下一篇 2022年8月1日 下午6:36


相关推荐

  • 随机森林算法原理梳理

    随机森林算法原理梳理1 其他术语概念 前提 随机森林我们可以理解为多个决策树组成的模型 但是如何组合 组合的方式是什么 我们就得知道集成学习的思想 bootstraping bagging 的概念 集成学习思想 集成学习主要的作用是为了解决单个模型在运行时固有的缺陷 从而将多个单个模型组合到一起 取长补短 共同发挥功效 简单的理解人多力量大 随机森林就是这个思想下的产物 这里借用另一个博主的一张图可以更好的理解这

    2026年3月18日
    3
  • spring4.1 请求rest接口406问题解决(转换JSON)[通俗易懂]

    前文说明,本来项目使用的是springmvc的模式,然后接口都是使用的是@Controller+@ResponseBody配置json转换的代码是

    2022年4月9日
    86
  • React 路由详解(超详细详解)

    React 路由详解(超详细详解)ReactReact路由对SPA的理解1.单页Web应用(singlepagewebapplication,SPA)。2.整个应用只有一个完整的页面。3.点击页面中的链接不会刷新页面,只会做页面的局部更新。4.数据都需要通过ajax请求获取,并在前端异步展现。路由的理解1.什么是路由1.一个路由就是一个映射关系(key:value)2.key为路径,value可能是function或component2.路由分类1.后端路由:1)理解:value是fun

    2022年4月28日
    51
  • lm算法是什么算法_opencv图像处理算法

    lm算法是什么算法_opencv图像处理算法1.高斯牛顿法残差函数f(x)为非线性函数,对其一阶泰勒近似有:这里的J是残差函数f的雅可比矩阵,带入损失函数的:令其一阶导等于0,得:这就是论文里常看到的normalequation。2.LMLM是对高斯牛顿法进行了改进,在求解过程中引入了阻尼因子:2.1阻尼因子的作用:2.2阻尼因子的初始值选取:一个简单的策略就是:2.3阻尼因子的更新策略3.核心代码讲解3.1构建H矩阵void…

    2022年10月1日
    4
  • 定制SwipeRefreshLayout

    定制SwipeRefreshLayoutSwipeRefreshLayout大家都用过,google推出的,亲生儿子,兼容性自然最好!可是SwipeRefreshLayout只支持下拉刷新,没有上拉加载更多,这样是没办法满足我们的需要的,所以本文就对它进行一下定制,加上下拉刷新。首先贴用法:xml:

    2022年6月25日
    33
  • C++ 顶层 const

    C++ 顶层 const

    2021年12月2日
    388

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号