文档章节

Qt编写视频播放器(vlc内核)

飞扬青云
 飞扬青云
发布于 2018/07/20 12:33
字数 880
阅读 643
收藏 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:提供接口设置播放位置和音量及设置静音

#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

 

© 著作权归作者所有

飞扬青云
粉丝 53
博文 108
码字总数 219717
作品 0
徐汇
程序员
私信 提问
视频播放器--VLC media player

VLC Media Player (VideoLAN) 为 Windows、Linux、OS X、Android、iOS、Windows Phone 等平台提供一个视频播放器、解码器。它可以播放来自网络、摄像头、磁盘、光驱的文件,支持包括MPEG 1/...

匿名
2008/09/20
85.8K
3
VLC 2.2.1 "Terry Pratchett" 释出,跨平台播放器

VLC 2.2.1 "Terry Pratchett" 是针对 2.2.0 "WeatherWax" 的 bug 修复版本。这次 VLC 社区释出了针对多个操作系统的新版本 VLC。 主要修复了用户在使用过程中会遇到的一些崩溃问题 (FLAC, S...

开源中国真理部部长
2015/04/22
2.2K
9
GStreamer资料整理(包括摄像头采集,视频保存,远程监控,流媒体RTP传输)

1,gstreamer开发手册,gstreamer官网(这些都不用说了吧) 2,gst-launch的用法,这也不用说了吧。(白菜,鸡蛋,西红柿,砖头,鼠标……..) 3,http://blog.chinaunix.net/u/6646/showart16496...

nothingfinal
2011/04/24
0
0
C#开发可播放摄像头及任意格式视频的播放器

前言 本文主要讲述,在WPF中,借助Vlc.DotNet调用VLC类库,实现视频播功能,下面我们先来做开发前的准备工作。 准备工作 首先,我们创建一个项目WpfVLC,然后,进入Neget搜索Vlc.DotNet,得到...

kiba518
08/07
0
0
iOS 之VLC使用RTSP流做监控或者直播视频

先放demo 地址 https://github.com/ssj1314/iOS-VLC-RTSP- github 库太大,我传不上去。在网盘下载framework之后添加就行了。哪位大神教我一下。 百度网盘也能先凑活一下了。链接: http://pa...

五蕴盛
2016/11/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

作为一个(IT)程序员!聊天没有话题?试试这十二种技巧

首先呢?我是一名程序员,经常性和同事没话题。 因为每天都会有自己的任务要做,程序员对于其他行业来说;是相对来说比较忙的。你会经常看到程序员在发呆、调试密密麻麻代码、红色报错发呆;...

小英子wep
今天
12
0
【SpringBoot】产生背景及简介

一、SpringBoot介绍 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程,该框架使用了特定的方式来进行配置,从而使开发人员不再需要...

zw965
今天
4
0
简述并发编程分为三个核心问题:分工、同步、互斥。

总的来说,并发编程可以总结为三个核心问题:分工、同步、互斥。 所谓分工指的是如何高效地拆解任务并分配给线程,而同步指的是线程之间如何协作,互斥则是保证同一时刻只允许一个线程访问共...

dust8080
今天
6
0
OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
3.2K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部