效果图:

核心代码:

VlcMutPlayer.h
#ifndef VLCMUTPLAYER_H
#define VLCMUTPLAYER_H
#include"vlc/vlc.h"
#include <QObject>
#include<QImage>class VlcMutPlayer : public QObject
{Q_OBJECT
public:explicit VlcMutPlayer(QObject *parent = 0);void play(QString filename);~VlcMutPlayer();
signals:void showImage(QImage img);
public slots:
private:libvlc_instance_t *vlcInstance;libvlc_media_player_t *mediaPlayer;libvlc_media_t *media;
};#endif // VLCMUTPLAYER_H

实现 VlcMutPlayer.cpp:

#include "VlcMutPlayer.h"
#include<QFile>
#include<QMutex>
#include<QDebug>// 定义输出视频的分辨率
#define VIDEO_WIDTH   800
#define VIDEO_HEIGHT  600QMutex g_mutex;
bool   g_isInit = false;char in_buffer[VIDEO_WIDTH*VIDEO_HEIGHT*4];
char out_buffer[VIDEO_WIDTH*VIDEO_HEIGHT*4];
VlcMutPlayer* _objInstance = NULL;
static void *lock(void *data, void **p_pixels)
{Q_UNUSED(data)g_mutex.lock();*p_pixels = out_buffer;  /*tell VLC to put decoded data to this buffer*/return 0; /* picture identifier, not needed here */
}static void unlock(void *data, void *id, void *const *p_pixels)
{Q_UNUSED(data)Q_UNUSED(id)Q_UNUSED(p_pixels)QImage image((unsigned char*)out_buffer,VIDEO_WIDTH,VIDEO_HEIGHT,QImage::Format_RGB32);emit _objInstance->showImage(image);g_mutex.unlock();
}static void display(void *data, void *id)
{/* do not display the video */(void) data;Q_UNUSED(id)
}VlcMutPlayer::VlcMutPlayer(QObject *parent) : QObject(parent)
{_objInstance = this;// 创建并初始化 libvlc 实例vlcInstance = libvlc_new(0, NULL);
}void VlcMutPlayer::play(QString filename)
{if (!QFile::exists(filename)) {qDebug()<<"file is not exist:"<<filename;return  ;}media = libvlc_media_new_path(vlcInstance, filename.toStdString().data());mediaPlayer = libvlc_media_player_new_from_media(media);libvlc_media_release(media);libvlc_video_set_callbacks(mediaPlayer, lock, unlock, display, 0);libvlc_video_set_format(mediaPlayer, "RV32", VIDEO_WIDTH, VIDEO_HEIGHT, VIDEO_WIDTH *4);libvlc_media_player_play(mediaPlayer);
}VlcMutPlayer::~VlcMutPlayer()
{if (mediaPlayer){libvlc_media_player_stop(mediaPlayer);    /*stop playing*/libvlc_media_player_release(mediaPlayer); /*Free the media_player*/mediaPlayer = NULL;}
}

完成工程代码:https://download.csdn.net/download/xzpblog/10612631

扩展阅读:Qt封装VLC接口播放视频

Qt使用vlc多窗口播放同一个视频相关推荐

  1. 360浏览器怎么设置html5播放,360浏览器如何开启小窗口播放网页视频

    有时候使用浏览器的时候不会只做一件事,很多时候,网游和看视频是可以同时进行的,那么要如何将视频小窗口播放呢,今天小编就为大家分享一个方法,让用户在玩网游的同事还可以使用小窗口播放视频,在生活娱乐的时候 ...

  2. Qt应用程序开发五:QMediaPlayer播放视频,提取视频帧,多窗口播放同一视频

    效果图: 方法一:QMediaPlayer+QVideoWidget (如果其他格式视频播放不出来,安装一个视频解码器可以解决) #include "QMutPlayer.h" # ...

  3. 【Qt学习】 FFmpeg 解码播放本地视频

    目录 一:效果展示 二:源码分享 一:效果展示 二:源码分享 videodecode.h .cpp [解码线程的封装] #ifndef VIDEODECODE_H #define VIDEODECOD ...

  4. VlC转推播放的视频到虚拟摄像头

    工具和方法参考: http://vlc2vcam.com/ MagicCamera和vlc+两个插件 原理: 给MagicCamera和vlc分别添加一个插件 将vlc的视频流输出到插件,MagicC ...

  5. 在浏览器中使用VLC插件实现播放RTSP流视频

    在浏览器中使用VLC插件实现播放RTSP流视频 一.安装VLC插件 二.编写测试html文件 三.生成一个测试用RTSP流视频 四.在浏览器中播放RTSP流视频 五.VLC插件知识扩展 1.VLC插件 ...

  6. VLC和Qt结合编写流媒体rtsp播放器

    VLC播放器是一款功能强大且小巧的播放器,它支持多种多样的音视频格式,比如MPEG1,2以及mp3等等.并且通过Qt和VLC的结合能让每个开发者写出自己的视频流媒体播放器. Qt与VLC结合编写流媒体 ...

  7. 在Windows下编译VLC并实现播放视频

    在Windows下编译VLC并实现播放视频 一.编译Win版的VLC真麻烦 二.获取VLC的SDK 1.下载VLC播放器 2.库文件 3.头文件 三.调用VLC实现播放视频 1.拷贝头文件和库文件 2 ...

  8. 在Ubuntu下编译VLC并实现播放视频

    在Ubuntu下编译VLC并实现播放视频 一.下载VLC源码 二.安装VLC依赖的库 三.VLC编译与安装 1.编译与安装 2.库文件 3.头文件 四.调用VLC实现播放视频 1.添加头文件.库路径 ...

  9. c++ vlc读取摄像头_Qt音视频开发1-vlc解码播放

    ## 一.前言 最开始接触视频监控这块的时候,用的就是vlc作为解码的内核,主要是因为vlc使用简单方便,直接传入一个句柄即可,简单几行代码就可以实现一个视频流播放,很适合初学者使用,也推荐初学者用q ...

最新文章

  1. vc遍历网页表单并自动填写提交
  2. dw_mysql】apache_怎么将dreamweaver与apache服务器连接
  3. “MSDN 开发论坛”大煞风景
  4. Random快速连续产生不相同随机数
  5. 关于vue.js 编程导航的使用:实现路由配置和跳转页面
  6. Junit5集成到SpringBoot工程
  7. 使用Android Studio 进行NDK开发和调试
  8. libevent源码深度剖析九
  9. 计算机系统应用系统,计算机系统应用.pdf
  10. python测试框架untest_Python测试框架之unittest和pytest
  11. [转载] Python数据分析与可视化学习笔记(一)数据分析与可视化概述
  12. java day47【redis概念 、下载安装 、 命令操作 、持久化操作 、使用Java客户端操作redis】...
  13. Java课程设计-随机密码生成器
  14. python读取word文件内容_[python]读取word文档中的数据,整理成excel表
  15. 乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第六节课笔记
  16. 计算机wifi无法打开,mac电脑wifi无法打开怎么解决-mac电脑wifi无法打开解决教程 - 河东软件园...
  17. AE(自动曝光)系统简介
  18. 桌面排版神器:Affinity Publisher
  19. VSCode JavaScript 代码格式化 美化 Beautify
  20. Java 处理资源的try语句 (try-with-resources, TWR)

热门文章

  1. 在 SAP BTP 上体验 SAP HANA Cloud 试用版本
  2. MySQL:关于排序order by limit值不稳定的说明(1)
  3. shell脚本中的export和PWD的作用
  4. 【论文阅读#1】Edge Computing: Vision and Challenges
  5. MASM32+Visual studio 2010写汇编程序入门(图文)
  6. 面向考研的数据结构板子
  7. HTML overflow: hidden 属性详解
  8. 什么是I/O寄存器的边际效应
  9. 2021年总结以及2022年的计划
  10. Flex Builder 3.0 开发环境