GStreamer —— 2.18、Windows下Qt加载GStreamer库后运行 - “播放教程 6:音频可视化“(附:完整源码)

embedded/2025/3/12 23:57:31/
运行效果

在这里插入图片描述

介绍

     GStreamer 带有一组将音频转换为视频的元素。他们 可用于科学可视化或为您的音乐增添趣味 player 的本教程展示了:

          • 如何启用音频可视化

          • 如何选择可视化元素

     启用音频可视化实际上非常简单。设置相应的标志,当纯音频流为 found,它将实例化必要的元素来创建和显示可视化。

GStreamer_18">GStreamer相关运行库
INCLUDEPATH += D:/Software/GStreamer/1.0/mingw_x86_64/include/gstreamer-1.0/gst
INCLUDEPATH += D:/Software/GStreamer/1.0/mingw_x86_64/include
INCLUDEPATH += D:/Software/GStreamer/1.0/mingw_x86_64/include/gstreamer-1.0
INCLUDEPATH += D:/Software/GStreamer/1.0/mingw_x86_64/include/glib-2.0
INCLUDEPATH += D:/Software/GStreamer/1.0/mingw_x86_64/lib/glib-2.0/includeLIBS += D:/Software/GStreamer/1.0/mingw_x86_64/lib/gstreamer-1.0.lib
LIBS += D:/Software/GStreamer/1.0/mingw_x86_64/lib/glib-2.0.lib
LIBS += D:/Software/GStreamer/1.0/mingw_x86_64/lib/gobject-2.0.lib

源码
#include <gst/gst.h>/* playbin的flag */
typedef enum
{GST_PLAY_FLAG_VIS           = (1 << 3) /* 在没有视频流时启用可视化渲染。 */
} GstPlayFlags;/* 如果这是可视化元素,则返回TRUE */
static gboolean filter_vis_features (GstPluginFeature *feature, gpointer data)
{GstElementFactory *factory;if (!GST_IS_ELEMENT_FACTORY (feature))return FALSE;factory = GST_ELEMENT_FACTORY (feature);if (!g_strrstr (gst_element_factory_get_klass (factory), "Visualization"))return FALSE;return TRUE;
}int main(int argc, char *argv[])
{/* d初始化Streamer */gst_init (&argc, &argv);/* 获取所有可视化插件的列表 */GList *list = gst_registry_feature_filter (gst_registry_get (), filter_vis_features, FALSE, NULL);/* 打印他们的名字 */GstElementFactory *selected_factory = NULL;g_print("Available visualization plugins:\n");for (GList *walk = list; walk != NULL; walk = g_list_next (walk)){GstElementFactory *factory = GST_ELEMENT_FACTORY (walk->data);const gchar *name = gst_element_factory_get_longname (factory);g_print("  %s\n", name);if (selected_factory == NULL || g_str_has_prefix (name, "GOOM")){selected_factory = factory;}}if (!selected_factory) { g_print ("No visualization plugins found!\n"); return -1; }/* 我们现在已经为可视化元素选择了一个工厂 */g_print ("Selected '%s'\n", gst_element_factory_get_longname (selected_factory));GstElement *vis_plugin = gst_element_factory_create (selected_factory, NULL);if (!vis_plugin){return -1;}/* 构建管道 */GstElement *pipeline = gst_parse_launch ("playbin uri=http://radio.hbr1.com:19800/ambient.ogg", NULL);/* 设置可视化标志 */guint flags;g_object_get (pipeline, "flags", &flags, NULL);flags |= GST_PLAY_FLAG_VIS;g_object_set (pipeline, "flags", flags, NULL);/* 为playbin设置vis插件 */g_object_set (pipeline, "vis-plugin", vis_plugin, NULL);/* 开始播放 */gst_element_set_state (pipeline, GST_STATE_PLAYING);/* 等待直到错误或结束 */GstBus *bus = gst_element_get_bus (pipeline);GstMessage *msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, (GstMessageType)(GST_MESSAGE_ERROR | GST_MESSAGE_EOS));/* 释放资源 */if (msg != NULL){ gst_message_unref (msg); }gst_plugin_feature_list_free (list);gst_object_unref (bus);gst_element_set_state (pipeline, GST_STATE_NULL);gst_object_unref (pipeline);return 0;
}

关注

笔者 - jxd


http://www.ppmy.cn/embedded/172097.html

相关文章

通用人工智能(AGI):定义、挑战与未来展望

文章目录 引言AGI的定义与特征实现AGI的挑战AGI与ASI的区别AGI的潜在影响结语 引言 通用人工智能&#xff08;Artificial General Intelligence, AGI&#xff09;是人工智能领域的终极目标&#xff0c;代表着一种能够执行人类所有智力任务的系统。与当前的任务导向型人工智能&…

【软考-架构】2.3、设备管理-文件管理

✨资料&文章更新✨ GitHub地址&#xff1a;https://github.com/tyronczt/system_architect 文章目录 设备管理概述&#x1f31f;I/O软件设备管理技术&#x1f4af;考试真题文件管理概述✨索引文件结构&#x1f4af;考试真题文件目录&#x1f4af;考试真题文件存储空间管理位…

Excel 中如何实现数据透视表?

Excel 中如何实现数据透视表&#xff1f; 数据透视表&#xff08;PivotTable&#xff09;是 Excel 中强大的数据分析工具&#xff0c;能够快速汇总、分析和展示大量数据。本文将详细介绍如何在 Excel 中创建和使用数据透视表。 1. 数据透视表的基本概念 数据透视表是一种交互…

在Spring Boot项目中如何实现获取FTP远端目录结构

Java语言实现获取FTP远端目录结构的实现方式有多种,在Spring Boot 项目中,最简单和快速的方式就是使用Spring Integration 实现FTP相关的功能。 前言 本篇的示例和演示基于Windows 的FTP 服务,关于如何在Windows 开启FTP服务可以参考: Windows 如何开启和使用FTP服务 本…

javase集合框架List篇

一、Vector和ArrayList、LinkedList联系和区别&#xff0c;分别的使用场景 ArrayList&#xff1a;底层是数组实现&#xff0c;线程不安全&#xff0c;查询和修改非常快&#xff0c;但是增加和删除慢 LinkedList: 底层是双向链表&#xff0c;线程不安全&#xff0c;查询和修改…

PySide2是 Qt 库的 Python 绑定之一

PySide2 是 Qt 库的 Python 绑定之一,它为 Python 程序员提供了创建跨平台桌面应用程序的工具和功能。PySide2 是 Qt 5.x 系列的 Python 绑定,而 Qt 本身是一个跨平台的图形用户界面(GUI)框架,广泛用于开发各种类型的桌面应用程序,包括多种平台(Windows、Linux、macOS)…

【大模型】WPS 接入 DeepSeek-R1详解,打造全能AI办公助手

目录 一、前言 二、WPS接入AI工具优势​​​​​​​ 三、WPS接入AI工具两种方式 3.1 手动配置的方式 3.2 Office AI助手 四、WPS手动配置方式接入AI大模型 4.1 安装VBA插件 4.1.1 下载VBA插件并安装 4.2 配置WPS 4.3 WPS集成VB 4.4 AI助手效果测试 4.5 配置模板文…

如何在Ubuntu上直接编译Apache Doris

以下是在 Ubuntu 22.04 上直接编译 Apache Doris 的完整流程&#xff0c;综合多个版本和环境的最佳实践&#xff1a; 注意&#xff1a;Ubuntu的数据盘VMware默认是20G&#xff0c;编译不够用&#xff0c;给到50G以上吧 一、环境准备 1. 安装系统依赖 # 基础构建工具链 apt i…