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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 公钥\私人 ssh避password登陆

    公钥\私人 ssh避password登陆

    2022年1月13日
    50
  • 成功解决500 : Internal Server Error问题

    成功解决500 : Internal Server Error问题成功解决500:InternalServerError问题目录解决问题解决思路解决方法解决问题500:InternalServerError解决思路内部服务器错误,说明你所浏览的服务器出现了故障解决方法可知出现的bug为AttributeError:module’tornado.web’hasnoattribute’asynchronous’参考文章:成功解决Attribu…

    2022年7月12日
    25
  • vfs_fsync[通俗易懂]

    vfs_fsync[通俗易懂]在Linux系统中,对文件系统上文件的读写一般是通过页缓存(pagecache)进行的(DirectIO除外),这样设计的可以延时磁盘IO的操作,从而可以减少磁盘读写的次数,提升IO性能。但是性能和可靠性在一定程度上往往是矛盾的,虽然内核中设计有一个工作队列执行赃页回写同磁盘文件进行同步,但是在一些极端的情况下还是免不了掉电数据丢失。因此内核提供了sync、fsync、fdatasync和msync系统调用用于同步,其中sync会同步整个系统下的所有文件系统以及块设备,而fsync和fdatasync只针

    2022年5月7日
    79
  • 可行性成本效益分析_经济可行性和技术可行性

    可行性成本效益分析_经济可行性和技术可行性净现值(NetPresentValue,NPV):说的是把未来期望收入的钱换算成现在的钱(跟算利息类似,不过是反向运算,例如明年你会赚110元,假设贴现率是10%,那么换算成现在的钱也就是110

    2022年8月4日
    6
  • double 转 BigDecimal 精度问题

    double 转 BigDecimal 精度问题请看图://double转BigDecimal精度测试@Testpublicvoida(){DoubleDou=5.56;BigDecimalbigDou1=newBigDecimal(Dou);BigDecimalbigDou2=BigDecimal.valueOf(Dou);…

    2022年6月4日
    72
  • String、StringBuffer和StringBuilder的区别

    String、StringBuffer和StringBuilder的区别String、StringBuffer和StringBuilder的区别:文章目录StringStringBufferStringBuilderStringBuffer是如何实现线程安全的呢?Java9的改进String  String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。  这个是String类的解释,之前小咸儿看…

    2022年6月28日
    30

发表回复

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

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