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

  

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 粒子群算法及其改进算法

    粒子群算法及其改进算法标准粒子群算法及其改进算法首先在这里介绍一下,这个里主要介绍粒子群算法以及一个改进的二阶振荡粒子群算法。原理粒子群优化(PSO)算法是Kennedy和Eberhart受鸟群群体运动的启发于1995年提出的一种新的群智能优化算法[1]。大概的意思就是一片森林里有一群鸟在找一块食物,它们不知道食物具体在哪,但是可以通过感官(例如嗅觉)去察觉到自己当前位置距离食物的远近。鸟可以记住自己走过的位置…

  • springboot启动方式_启动会启动仪式

    springboot启动方式_启动会启动仪式我想很多人已经在项目中使用SpringBoot做项目开发的工作了,创建SpringBoot和启动SpringBoot应用都会较简单一点,下面我以SpringBoot官网上的Demo来简单的分析一些SpringBoot的启动流程,我们的启动主类代码如下:@SpringBootApplicationpublicclassSpringBootAnalysisApplication{publ

  • java injector_java – Injector Hierarchy / Child Injector解释?「建议收藏」

    java injector_java – Injector Hierarchy / Child Injector解释?「建议收藏」Modules.override()在Stage.PRODUCTION中不起作用.您应该使用PrivateModule,其中绑定仅在私有模块内有效/可见,因此您可以将不同的实现类绑定到同一个接口.然后,您可以将Private模块安装到父模块,但是您必须显式公开()您希望其他模块可见的所有绑定.让我们说:DatabaseSearchModule.java(扩展PrivateModule)bind(P…

    2022年10月31日
  • 发送邮件常见出错代码及简单解决方法

    发送邮件常见出错代码及简单解决方法

  • Java内存结构和Java内存模型「建议收藏」

    Java内存结构和Java内存模型「建议收藏」Java内存结构部分摘抄自:https://www.jianshu.com/p/73df0ac60551首先Java内存结构其实是JVM内存结构我们都知道,我们的java代码其实是不能直接运行的,他要经过一系列的步骤。我们的java文件,首先要经过编程成为class文件,然后通过类装载器加载到jvm中去执行。这个jvm(红色虚线框起来的这部分)就是java运行时…

  • Flutter初步-第一个电视直播APP「建议收藏」

    Flutter初步-第一个电视直播APP「建议收藏」#Flutter介绍不介绍百度泛滥的,能搜到的,flutter对个人而言,易上手,业余人士也能迅速开发出一款跨平台APP,多么神奇啊。用的dart语言,scaffold脚手架迅速对app布局,路由功能,更好管理页面。还有动画。小白能做到的极限就是到UI的设计,要更深入还得用dio库,学习getpost使用,混编估计有点难,毕竟我连Java都没去了解过。#Flutter安装千篇一律,不多介…

发表回复

您的电子邮箱地址不会被公开。

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