- 博客(437)
- 资源 (28)
- 问答 (2)
- 收藏
- 关注
原创 QT 自定义Http客户端
1.Http客户端功能1.支持get,post请求方式.2.支持连接超时处理.3.支持网络错误,尝试重连.2.源码HttpClient.h//HttpClient.h#ifndef HTTPCLIENT_H#define HTTPCLIENT_H#include <QObject>#include <QNetworkAccessManager>#include <QNetworkReply>#include <QEv.
2020-09-23 10:08:53 2028 1
原创 搭建海思3559A-Qt4.8.7+Openssl开发环境
1.软件版本linux版本:ubuntu 16.04 LTSQt:4.8.7Openssl:1.0.1q2.安装交叉编译器①在ubuntu上解压 tar -zxf aarch64-himix100-linux.tgz②进入解压后的文件夹中,增加执行权限sudo chmod +xaarch64-himix100-linux.install③执行 ./aarch64-himix100-linux.install④执行source /etc/profile, 安装交叉编译..
2020-06-23 15:38:46 2645 1
原创 搭建QT+ffmpeg+Visual Studio开发环境
1.环境介绍本文使用的是版本 Qt5.9.2+VS2017+ffmpeg4.2.1,这里版本均使用32位版本2.Qt版本下载http://download.qt.io/archive/qt/3.下载ffmpeg打开https://ffmpeg.zeranoe.com/builds/,该网站中的FFMPEG分为3个版本:Static,Shared,Dev,都下载下来。...
2019-12-10 20:53:45 1255
原创 音视频开发基础知识
一. 颜色模式1.RGBRGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。①RGB24:RGB24使用24位来表示一个像素,RGB分量都用8位表示,取值范围为0-255。注意在内存中RGB各分量的排列顺序为:BGR BGR BGR…。②RGB32:RGB32使用32位来表示一个像素,RGB分量各用去8位表示,剩下...
2019-12-09 14:06:34 2077
原创 Qt设置QPushButton文字加图片
方法一: ui->pushButton->setIcon(QPixmap("D:/qtTest/untitled/clear.png")); ui->pushButton->setText("清理");方法二: ui->pushButton->setStyleSheet("qproperty-icon: url(D:/qtT...
2019-09-08 20:19:59 11420 3
原创 Qt设置字符串太长,使用省略号显示
widget.h#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QList>namespace Ui {class Widget;}class Widget : public QWidget{ Q_OBJECTpublic: explicit Wid...
2019-09-01 17:51:13 4279
原创 Qt实现QWebSocket客户端,断线重连
WebSocket简介1)、WebSocket是一种在单个TCP连接上进行全双工通信的协议。2)、WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。3)、WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。全双工:通信允许数据在两个方向上同时传输,全双工...
2019-08-27 21:25:27 5542 8
原创 Qt QStyle详解
QStyle类是 Qt 框架中用于控制应用程序界面元素外观的一个抽象基类。这个类提供了一种方式来定制窗口部件(widgets)的绘制和行为,可以通过改变主题或风格来更改应用程序的外观,而无需修改窗口部件本身的代码。Qt包含一组QStyle子类,这些子类模仿Qt支持的不同平台的样式(QWindowsStyle、QMacStyle等)。默认情况下,这些样式内置在Qt GUI模块中。样式也可以作为插件提供。Qt的内置widget使用QStyle来执行几乎所有的绘制,确保它们看起来与等效的本地小部件完全相同。
2024-04-15 22:49:20 1218
原创 libVLC Ubuntu编译详解
有时候,windows上开发不满足项目需求,需要移植到linux上,不得不自行编译libvlc,编译libvlc相对而言稍微麻烦一点。我使用的操作系统:Ubuntu20.04查看系统命令lsb_release -alibvlc版本: 3.0.18。
2024-04-15 21:39:46 666
原创 libVLC 视频界面分割
如果还是不懂的话,我讲解一下原理,其实就是在上面叠加透明窗口界面,在叠加的窗口上面调用。主界面重写绘图和窗体移动事件:我们需要在主窗体移动的时候,叠加窗体跟随着主窗体移动。其实视频界面分割很简单,看过叠加窗口的这篇文章,不难理解,如何分割。还是像之前的文章一样,先创建一个叠加界面,设置窗体无边框和透明。先看看分割后的界面吧,根据分割的数量,来分割视频画面。paintEvent绘制线条,很简单吧。界面源码如下,ui上面没有任何控件。
2024-04-11 22:53:09 534
原创 libVLC 视频窗口上叠加透明窗口
很多时候,我们需要在界面上画一些三角形、文字等之类的东西,我们之需要重写paintEvent方法,比如像这样。这里我叠加了一个Widget在上面,widget上放了两个控件,一个label和一个comboBox。重写绘图和窗体移动事件:我们需要在主窗体移动的时候,叠加窗体跟随着主窗体移动。但是现在我们需要在播放视频的界面上绘制窗体,像下面这样。首先我们需要定义一个叠加窗体类TopWidget,这个类很简单,设置了窗体无边框和透明。以下就是重写的代码。
2024-04-11 22:12:17 908
原创 libVLC 添加字幕文件
在观看视频文件的时候,偶尔会遇到有的视频文件缺少音频、有的没有字幕的问题,libVLC提供了很好的接口来帮我们添加字幕文件。使用libvlc_video_set_subtitle_file来加载字幕文件。运行结果: 可以看见字幕文件已经被加载上。根据自己已有的电影去下载相应的字幕文件。2.创建一个媒体播放器,加载媒体文件。1.初始化 VLC 实例。4.选择字幕文件加载。
2024-04-11 21:14:22 333
原创 Qt QProcess详解
QProcess提供了在 Qt 应用程序中启动外部程序的方法。通过QProcess,你可以启动一个进程,与它通信(发送输入和读取输出),检查它的状态,以及等待它完成。这个类在执行系统命令、运行其他程序或脚本时非常有用。
2024-04-11 18:47:03 1143
原创 VLC-Qt实现简单的视频播放器
要使用VLC-Qt,可以下载并编译它,或者使用官网上预编译的版本。VLC-Qt的使用相对简单,可以通过查看示例来学习如何使用。例如,可以下载示例代码,然后修改相关设置以适应自己的安装路径,从而实现播放本地视频或RTSP流等功能。VLC-Qt是一个结合了Qt应用程序和libVLC的免费开源库。由于集成了整个libVLC,VLC-Qt具备了libVLC的所有特性,修改 simple-player.pro中vlc-qt相关库内容,主要为最后两行。主要修改最后两行,以下是修改后的路径,按自己存放路径来。
2024-04-10 17:02:16 555
原创 libVLC 提取视频帧使用QGraphicsView渲染
4.创建QGraphicsScene场景对象,并设置矩形区域,QGraphicsView设置场景对象,然后在场景中添加一个。后面又讲解了使用OpenGL渲染每一帧视频数据,使用 OpenGL去绘制,利用 GPU 减轻 CPU 计算负荷。在前面章节中,我们讲解了如何使用QWidget渲染每一帧视频数据,这种方法对 CPU 负荷较高。5.提取视频帧数据,创建QImage对象,传入给ShowGraphicsItem显示。本章节介绍另一种方法来渲染视频,使用QGraphicsView来渲染。
2024-04-09 19:56:09 931
原创 libVLC 提取视频帧使用OpenGL渲染
由于我们不停的生成的是QImage对象,因此对 CPU 负荷较高。其实在绘制这块我们可以使用 OpenGL去绘制,利用 GPU 减轻 CPU 计算负荷,本节讲解使用OpenGL来绘制每一帧视频数据。opengl完全没有基础的同学,请先学习以下的几篇文章,我们只需要了解2D图像如何渲染就行。以下是封装好的WOpenGLWidget类,使用提升的方式,提升为以下这个类就行了。在上一节中,我们讲解了如何使用QWidget渲染每一帧视频数据。4.提取视频帧数据,回调给OpenGL显示。ui界面如下图所示。
2024-04-08 20:05:46 737
原创 libVLC 提取视频帧使用QWidget渲染
如果应用程序需要在视频渲染前对视频帧进行一些处理,那么可以在libvlc_video_lock_cb中进行这些处理,并将处理后的帧数据地址赋值给 *planes。这里介绍libvlc_video_set_callbacks的lock和unlock两个回调。在前面的文章中,我们使用libvlc_media_player_set_hwnd设置了视频的显示的窗口。以下是libvlc_video_unlock_cb声明。以下是libvlc_video_lock_cb声明。4.提取视频帧数据,创建QImage对象。
2024-04-08 19:03:26 802
原创 libVLC 提取视频帧
但如果你想要在自己的应用程序中处理视频帧(例如进行视频编辑、分析或其他自定义渲染),可以使用 libvlc_video_set_callbacks 来指定自定义的回调函数。如果应用程序需要在视频渲染前对视频帧进行一些处理,那么可以在libvlc_video_lock_cb中进行这些处理,并将处理后的帧数据地址赋值给 *planes。在前面的文章中,我们使用libvlc_media_player_set_hwnd设置了视频的显示的窗口。以下是libvlc_video_lock_cb声明。
2024-04-08 18:18:15 1083
原创 libVLC 音频立体声模式切换
在libVLC中,可以使用libvlc_audio_set_channel函数来设置音频的立体声模式。这个函数允许选择不同的音频通道,例如立体声、左声道、右声道、环绕声等。首先设置libvlc忽略鼠标事件libvlc_video_set_mouse_input(vlc_mediaPlayer, 0);返回值是一个整数,如果设置成功则返回 0,如果设置失败则返回一个负数。以下是VLC播放器中使用的视频裁剪,我们仿照这个做一个界面。设置鼠标右键弹出菜单:重写鼠标点击事件,弹出菜单。
2024-04-07 20:29:11 657
原创 libVLC 音频输出设备切换
在实际应用中,需要先使用 libvlc_audio_output_list_get获取音频输出模块,然后针对每个模块使用 libvlc_audio_output_device_list_get获取其下的设备列表,以便于用户选择和配置。libvlc_audio_output_list_get和libvlc_audio_output_device_list_get是libVLC 库中用于处理音频输出的两个函数。libvlc_audio_output_list_get用于获取音频输出模块的列表。
2024-04-07 19:30:38 931
原创 Qt 样式表详解(很全面,秒懂)
而我们在 c++ 代码中的窗口的 width 与 height 指的是整个盒子的宽度与高度, 这一点非常重要. 整个盒子的宽度应该等于: 左外边距 + 左边框 + 左内边距 + 内容宽度 + 右内边距 + 右边框 + 右外边距, 同理, 整个盒子的高度也是上下外边距,内边距,边框和内容高度的和。与背景相对应, 背景设置的是控件的最底层的颜色, 作为背景, 但 color 设置的前景色, 也就 是控件文字的颜色, color 属性是被所有 widget 都支持的。
2024-03-28 17:58:40 77
原创 libVLC 动态视频壁纸
在 Windows 上,你可能需要使用 Windows API 来设置壁纸,而在 Linux 上,你可能需要使用某种桌面环境特有的方法。在 macOS 上,这一功能可能受到限制。以下是一个简单的示例,说明了如何在 Windows 上使用 C++ 和 libVLC 库来实现这一功能。Progman 是一个系统进程,它是桌面管理器的名称。回调函数的原型如下:回调函数应该返回 TRUE 以继续枚举,或者返回 FALSE 以停止枚举。SHELLDLL_DefView 是桌面窗口视图的类名。
2024-03-27 21:24:00 932
原创 libVLC 视频抓图
libVLC 中通过libvlc_video_take_snapshot核心接口来截图。以下是VLC播放器中使用的截图界面,我们仿照这个做一个界面。首先,你需要初始化 libVLC 实例和媒体播放器对象。1. 初始化 libVLC 和媒体播放器。菜单添加action,并响应槽函数。生成目录下snap.png。
2024-03-27 19:58:00 743
原创 libVLC 设置滤镜
锐化滤镜可以增强图像的细节,而模糊滤镜可以减少图像的细节,使图像看起来更平滑。:这些滤镜可以改变图像的亮度、对比度、饱和度、色调等颜色属性。:这些滤镜可以突出图像中的边缘,常用于图像分析和特征提取。:扭曲滤镜可以改变图像的形状,例如鱼眼效果、波纹效果等。:这些滤镜用于减少或消除图像中的噪点,提高图像质量。:这些滤镜可以改变图像中的颜色分布,常用于创意效果。打开文件,看了一下滤镜相关的参数,有很多类型的滤镜。:这些工具可以改变图像的尺寸或裁剪掉图像的一部分。:这些滤镜用于创建平滑的图像或视频过渡效果。
2024-03-26 21:37:39 952
原创 libVLC 调节色温、色调、亮度、对比度、饱和度、高光
就是增加图片各种颜色的纯度。比如蓝色,增加纯度就是在蓝色上加蓝色,降低纯度就是加入蓝色的对比色,让它变灰色或者黑色。:描述的是像素数值与像素实际亮度之间的关系,没有伽玛,数字摄像机捕捉的颜色和人眼看到的大相径庭。:增加就是给图片所有色彩加白色,减少加黑色。:增加就是让白的更白,黑的更黑;减少就是白的不那么白,黑的不那么黑。首先我们查看VLC播放器中视频可以调节的效果如下图所示。,QSlider只能设置整型,出来的效果不好。然后链接槽函数,滑块改变值的时候,设置图像。首先我们在使用的时候需要先开启可调节。
2024-03-25 21:28:35 356
原创 libVLC 视频缩放
libvlc是一个常用的开源多媒体框架,它可以用来播放和处理各种类型的音频和视频文件。如果想要缩放视频,可以通过libvlc提供的API来实现。首先设置libvlc忽略鼠标事件libvlc_video_set_mouse_input(vlc_mediaPlayer, 0);以下是VLC播放器中使用的视频缩放,我们仿照这个做一个界面。设置鼠标右键弹出菜单:重写鼠标点击事件,弹出菜单。以下是做出来的效果图。
2024-03-25 20:41:41 490
原创 libVLC 捕获鼠标、键盘事件
在实现播放器的时候,我们需要捕获键盘、鼠标事件进行视频快进、快退,或者双击全屏/退出全屏窗口、鼠标右键弹出菜单栏。默认情况下,在使用libVLC库的时候,我们无法捕获这些事件,因为我们将Qt的视频窗口传递给了libVLC。首先打开文件的时候禁用鼠标、键盘事件,并且设置视频窗口为Qt的Widget控件,libvlc_media_player_set_hwnd。但是libVLC提供了两个接口,使得忽略了对鼠标键盘事件的处理,让事件返回到原始Qt的widget上。好了,知道了如何操作了之后,下面开始实现代码。
2024-03-25 20:09:37 658
原创 libVLC 视频裁剪
使用 libVLC 进行视频裁剪并不是直接支持的功能,因为 libVLC 主要是一个媒体播放库。然而,你可以通过调整播放窗口的大小和设置视频输出的区域来实现一种“视觉上的裁剪”。这个函数允许你指定一个裁剪区域,格式为 “NxN”(例如,“16:9”、“4:3” 等)或者像素值(例如 “640x480”)。如果你的目标是在播放时只显示视频的一部分,你可以通过设置视频输出的裁剪区域来实现。以下是VLC播放器中使用的视频裁剪,我们仿照这个宽高比例做一个界面。设置鼠标右键弹出菜单:重写鼠标点击事件,弹出菜单。
2024-03-25 19:29:50 469
原创 libVLC 设置视频宽高比
传统影视的宽高比是 4:3,宽屏幕电影的宽高比是 1.85:1,高清晰度电视是 16:9,全景式格式电影是 2.35:1。投影屏幕尺寸一般都按照对角线的大小来定义的。使用libvlc_video_set_aspect_ratio设置视频宽高比。以下是VLC播放器中使用的宽高比,我们仿照这个宽高比例做一个界面。宽高比是指视频图像的宽度和高度之间的比率。设置鼠标右键弹出菜单:重写鼠标点击事件。
2024-03-21 21:18:27 679
原创 libVLC 轨道信息
是一个流行的开源多媒体播放器框架,它提供了丰富的 API 用于开发视频播放相关的应用程序。获取轨道信息,是指获取当前媒体文件的音频、视频或字幕等轨道信息。媒体轨道信息结构存放在libvlc_media_track_t结构体中,如下所示。常见的视频文件一般都有音频和视频、特殊的会带有字幕文件。联合体:分别存放音频、视频、字幕数据。音频数据如下:通道数量、采样率。视频数据:存放宽、高等一些数据。
2024-03-21 20:25:43 385
原创 libVLC 添加图片和文本水印
使用libvlc_video_set_marquee_int和libvlc_video_set_marquee_string设置以上枚举类型。使用libvlc_video_set_logo_int和libvlc_video_set_logo_string设置上面的枚举。以下是libvlc_video_marquee_option_t类型。以下是libvlc_video_logo_option_t 枚举类型。以下是位置相关的枚举libvlc_position_t。添加图片:使用Logo相关的接口。
2024-03-21 19:55:15 469
原创 libVLC 元数据
创建媒体播放器:libvlc_media_player_new_from_media。媒体元数据(Metadata):包括媒体文件的基本信息,如标题、艺术家、专辑等。在libVLC中媒体的元数据类型由libvlc_meta_t表示。获取各种元数据:libvlc_media_get_meta接口。创建并初始化一个libvlc实例:libvlc_new。创建媒体:libvlc_media_new_path。解析:libvlc_media_parse。
2024-03-21 19:04:07 178
原创 libVLC 播放控制
libVLC 是 VLC 媒体播放器的开源库版本,允许在他们的应用程序中嵌入视频和音频播放功能。ui界面如下图所示:播放、暂停、停止、打开文件、控制播放速率、播放声音等。响应事件回调:显示播放进度,更新进度条。
2024-03-19 21:39:55 354
原创 libVLC 事件机制
libVLC是一个开源的多媒体框架,它提供了丰富的功能,其中包括一个灵活且强大的事件机制。在libVLC中,事件机制主要用于通知应用程序有关播放、媒体状态更改或其他重要事件的信息。libVLC的事件模型基于订阅-发布模式,主要包含以下关键组件:事件类型(libvlc_event_type_t):定义了一系列预定义的事件,如媒体打开、播放、暂停、停止、结束等。
2024-03-19 19:54:47 282
原创 libVLC windows开发环境搭建
LibVLC是一个强大的开源库,它构成了VLC媒体播放器的核心部分。LibVLC提供了一系列的功能接口,使得VLC能够处理流媒体的接入、音频和视频输出、插件管理以及线程系统等核心任务。跨平台性:VLC作为一个跨平台的多媒体播放器,可以运行在多种操作系统和计算机体系结构上。协议支持:LibVLC不仅支持播放本地视频文件,还支持播放基于各种流媒体协议(如RTMP、RTSP)的视频。API一致性。
2024-03-19 19:29:09 1070
原创 Qt+FFmpeg+opengl从零制作视频播放器-12.界面美化
使用分隔线和间距:在控件之间添加分隔线(QFrame)和调整间距(通过setSpacing和setContentsMargin方法),可以使界面看起来更加整洁和有条理。使用动画和过渡效果:Qt提供了QPropertyAnimation和QTransition类,可以用来为控件添加动画和过渡效果,使界面更加生动和有趣。使用图标和图片:在按钮、菜单项等控件上添加图标或图片,可以使界面更加直观和美观。使用自定义控件:如果Qt自带的控件无法满足你的需求,你可以创建自定义控件,以便实现特定的外观和功能。
2024-03-13 22:48:30 517
原创 Qt+FFmpeg+opengl从零制作视频播放器-15.音视频一些知识
本专栏只针对视频压缩数据为H.264的数据进行演示。H264解码后的原始数据主要包括。原始视频数据会被压缩成I帧、P帧和B帧三种不同类型的视频帧。I帧是关键帧,包含完整的画面信息,而P帧和B帧则分别参考前后的I帧或P帧,记录与前后帧的差异信息。解码的时间戳。显示的时间戳。对于音频来说,DTS和PTS是相同的;对于视频来说,考虑到 I帧、B帧、P帧,所以一般不同。GOP:两个I帧之间的一组图片,由一个I帧和多个B/P帧组成,是编解码器存取的基本单位。
2024-03-13 22:00:12 351
原创 Qt+FFmpeg+opengl从零制作视频播放器-14.程序Ubuntu移植
首先查看的是Linux系统的版本,我使用的是Ubuntu20.04.6LTS版本。回想一下,在之前的程序,我们都是在Windows上开发,仅仅使用Qt和ffmpeg,这里下载的是5.12.12版本,双击运行,然后安装好Qt。我按照上面的教程,已经整理好了编译所需要的脚本。去Qt官网下载Qt 的版本。完整的库地址目录和脚本目录。最后生成的库路径如下图所示。
2024-03-13 21:54:46 127
原创 Qt+FFmpeg+opengl从零制作视频播放器-13.打包为exe包发布软件
执行命令 ,直接先拖动windeployqt.exe到cmd中,然后再拖动VideoPlayer.exe到cmd中。然后将ffmpeg的动态库拷贝到上面这个路径下,双击程序可执行不缺少库,准备工作就已经完成了。我使用的编译器是msvc64位的编译器,所以可执行程序的使用的库也是msvc64的库。然后在卸载的脚本地方改一下,不然卸载程序,不会完全卸载。程序打包完成后,双击程序可能会找不到库的情况,如下。填写名称,版本号,其他的就不用填了,点击下一步。好了,添加好上面的语句之后,可以开始编译脚本了。
2024-03-13 21:37:08 293
原创 Qt+FFmpeg+opengl从零制作视频播放器-11.界面设计
我使用的是QMainWindow,因此包含了菜单栏、工具栏、状态栏,如下图所示,不需要的部分我们可以进行隐藏。动画效果:QPropertyAnimation类提供动画支持,改变geometry属性。,自定义的QPushButton类,提升为WImageButton。这个时候使用鼠标按住主界面是没有办法移动的,所以需要重写鼠标事件。鼠标移动的时候根据上、下、左、右的方向,进行整个窗口的移动。最后安装事件过滤器:通过鼠标进入和离开事件,触发动画效果。项目界面由Qt进行设计,界面主要由以下几个部分组成。
2024-03-13 21:24:37 229
Qt+opengl实现多种滤镜效果
2024-03-05
Qt+opengl实现分屏效果
2024-03-05
Qt+OpenGL 实现色温、色调、亮度、对比度、饱和度、高光
2024-03-04
Qt实现鼠标擦拭显示图片
2024-03-04
Qt+openglEs2加载3D模型,平移、旋转、拾取模型
2024-01-16
Qt+opengl加载各种类型的3D模型,.glb .obj 等;Qt+opengl加载各种类型的3D模型,.glb .obj
2024-01-15
Qt 系统托盘实现Qt 系统托盘实现Qt 系统托盘实现
2023-11-02
qt插件开发完整工程示例
2023-11-02
qwt QwtLegend示例
2023-10-27
QGis+qt实现缩略图工程源码,没有运行环境,需自己配置运行环境
2023-07-23
OpenGL+qt抗锯齿OpenGL+qt抗锯齿
2023-06-27
Qt+opengl实现爆破物体
2023-06-26
Qt+opengl模板测试,绘制物体轮廓
2023-06-25
qt+opengl实现帧缓冲
2023-06-25
opengl+qt实现模型旋转平移
2023-06-23
opengl+qt实现鼠标选中模型
2023-06-23
OpenGL 混合OpenGL 混合OpenGL 混合OpenGL 混合
2023-06-19
OpenGL深度测试OpenGL深度测试
2023-06-19
opengl+qt加载模型
2023-06-17
Qt+OpenGL摄像机,移动,放大缩小
2023-06-09
QML与C++交互QML与C++交互
2023-03-16
FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析FLV解析
2022-07-27
UDPServerUDPServerUDPServerUDPServerUDPServerUDPServerUDPServerU
2022-06-27
QValueAxis详解
2022-04-06
QLineSeries
2022-04-06
TA创建的收藏夹 TA关注的收藏夹
TA关注的人