当前位置: 首页 > news >正文

Gstreamer学习3----灌数据给管线之appsrc

参考资料

Basic tutorial 8: Short-cutting the pipeline

gstreamer向appsrc发送帧画面的代码_gst appsrc可变帧率-CSDN博客

在官网教程Basic tutorial 8: Short-cutting the pipeline

里面,讲了一个例子,push音频数据给管线,视频的例子更加直观一些,

主要步骤:

注册一个回调,

 g_signal_connect(appsrc, "need-data", G_CALLBACK(cb_need_data), NULL);

回调方法中,设置数据,再push进处理流程中

 g_signal_emit_by_name(appsrc, "push-buffer", buffer, &ret);

这个g_signal_emit_by_name(appsrc, "push-buffer", buffer, &ret);是个同步阻塞方法,因为ret作为入参,记录执行的情况。

#include <gst/gst.h>
#define VIDEO_WIDTH   384
#define VIDEO_HEIGHT  288
#define VIDEO_FORMAT  "RGB16"
#define PIXEL_SIZE    2static void cb_need_data(GstElement* appsrc, guint unused_size, gpointer user_data)
{static gboolean white = FALSE;static GstClockTime timestamp = 0;GstBuffer* buffer;guint size;GstFlowReturn ret;g_print("cb_need_data called\n");static unsigned char color = 0;size = VIDEO_WIDTH * VIDEO_HEIGHT * PIXEL_SIZE;buffer = gst_buffer_new_allocate(NULL, size, NULL);/* this makes the image black/white */// gst_buffer_memset(buffer, 0, white ? 0xFF : 0x00, size);gst_buffer_memset(buffer, 0, color, size);color += 10;// white = !white;GST_BUFFER_PTS(buffer) = timestamp;GST_BUFFER_DURATION(buffer) = gst_util_uint64_scale_int(1, GST_SECOND, 2);timestamp += GST_BUFFER_DURATION(buffer);g_signal_emit_by_name(appsrc, "push-buffer", buffer, &ret);gst_buffer_unref(buffer);if (ret != GST_FLOW_OK){/* something wrong, stop pushing *///  g_main_loop_quit(loop);}
}gint main(gint argc, gchar* argv[])
{GstElement* pipeline, * appsrc, * conv, * videosink;GMainLoop* loop;/* init GStreamer */gst_init(NULL, NULL);loop = g_main_loop_new(NULL, FALSE);/* setup pipeline */pipeline = gst_pipeline_new("pipeline");appsrc = gst_element_factory_make("appsrc", "source");conv = gst_element_factory_make("videoconvert", "conv");videosink = gst_element_factory_make("autovideosink", "videosink");/* setup */g_object_set(G_OBJECT(appsrc), "caps",gst_caps_new_simple("video/x-raw","format", G_TYPE_STRING, VIDEO_FORMAT,"width", G_TYPE_INT, VIDEO_WIDTH,"height", G_TYPE_INT, VIDEO_HEIGHT,"framerate", GST_TYPE_FRACTION, 0, 1,NULL), NULL);gst_bin_add_many(GST_BIN(pipeline), appsrc, conv, videosink, NULL);gst_element_link_many(appsrc, conv, videosink, NULL);/* setup appsrc */g_object_set(G_OBJECT(appsrc),"stream-type", 0,"format", GST_FORMAT_TIME, NULL);g_signal_connect(appsrc, "need-data", G_CALLBACK(cb_need_data), NULL);/* play */gst_element_set_state(pipeline, GST_STATE_PLAYING);g_main_loop_run(loop);/* clean up */gst_element_set_state(pipeline, GST_STATE_NULL);gst_object_unref(GST_OBJECT(pipeline));g_main_loop_unref(loop);return 0;
}

可以看到颜色变化的画面

相关文章:

Gstreamer学习3----灌数据给管线之appsrc

参考资料 Basic tutorial 8: Short-cutting the pipeline gstreamer向appsrc发送帧画面的代码_gst appsrc可变帧率-CSDN博客 在官网教程Basic tutorial 8: Short-cutting the pipeline 里面&#xff0c;讲了一个例子&#xff0c;push音频数据给管线&#xff0c;视频的例子更…...

【深度学习量化交易1】一个金融小白尝试量化交易的设想、畅享和遐想

关注我的朋友们可能知道&#xff0c;我经常在信号处理的领域出没&#xff0c;时不时会发一些信号处理、深度学习科普向的文章。 不过算法研究久了&#xff0c;总想做一些更有趣的事情。 比如用深度学习算法赚大钱。。毕竟有什么事情能比暴富更有意思呢。 一、神经网络与彩票…...

【0基础学爬虫】爬虫基础之自动化工具 DrissionPage 的使用

概述 前三期文章中已经介绍到了 Selenium 与 Playwright 、Pyppeteer 的使用方法&#xff0c;它们的功能都非常强大。而本期要讲的 DrissionPage 更为独特&#xff0c;强大&#xff0c;而且使用更为方便&#xff0c;目前检测少&#xff0c;强烈推荐&#xff01;&#xff01;&a…...

c++_0基础_讲解7 练习

这一讲我为大家准备了几道题目&#xff0c;大家试着独自做一下&#xff08;可能来自不同网站&#xff09; 整数大小比较 - 洛谷 题目描述 输入两个整数&#xff0c;比较它们的大小。若 x>yx>y &#xff0c;输出 > &#xff1b;若 xyxy &#xff0c;输出 &#xff…...

docker一些常用命令以及镜像构建完后部署到K8s上

docker一些常用命令以及镜像构建完后部署到K8s上 1.创建文件夹2.删除文件3.复制现有文件内容到新建文件4.打开某个文件5.查看文件列表6.解压文件&#xff08;tar格式&#xff09;7.解压镜像8.查看镜像9.删除镜像10.查看容器11.删除容器12.停止运行容器13.构建镜像14.启动容器15…...

在typora中利用正则表达式,批量处理图片

一&#xff0c;png格式 在 Typora 中批量将 HTML 图片标签转换为简化的 Markdown 图片链接&#xff0c;且忽略 alt 和 style 属性&#xff0c;可以按照以下步骤操作&#xff1a; 打开 Typora 并加载你的文档。按下 Ctrl H&#xff08;在 Windows/Linux 上&#xff09;或 Cmd…...

构建LangChain应用程序的示例代码:33、如何在LangChain框架中使用HumanInputChatModel来模拟人工输入的聊天模型教程

除了HumanInputLLM&#xff0c;LangChain还提供了一个伪聊天模型类&#xff0c;可以用于测试、调试或教育目的。这允许您模拟对聊天模型的调用&#xff0c;并模拟如果人类接收到这些消息会如何响应。 在这篇笔记中&#xff0c;我们将介绍如何使用这个模型。 我们首先在代理中…...

虚拟机使用桥接模式网络配置

1、获取本机的网络详细信息 windowr 输入cmd 使用ipconfig -all 一样即可 在自己的虚拟机中设置网络 虚拟机中的ip ---------192.168.36.*&#xff0c;不要跟自己的本机ip冲突 网关-----------192.168.36.254 一样即可 dns -----------一样即可&#xff0c;我多写了几个&am…...

韩顺平0基础学java——第24天

p484-508 System类 常见方法 System.arrycopy&#xff08;src&#xff0c;0&#xff0c;dest&#xff0c;1,2&#xff09;&#xff1b; 表示从scr的第0个位置拷贝2个&#xff0c;放到目标数组索引为1的地方。 BigInteger和BigDecimal类 保存大整数和高精度浮点数 BigInte…...

leecode N皇后

深度优先遍历&#xff0c;然后回溯 思考得到的技巧&#xff1a; 1.先思考怎么用学过的数据结构解题 2.回溯不只需要知道最后一步&#xff0c;还需要知道之前所走的每一步 3. 棋盘的生成&#xff0c;.join([]),可以变列表为字符串 看题解得到的技巧&#xff1a; 1.妙啊&#xf…...

2024050802-重学 Java 设计模式《实战模板模式》

重学 Java 设计模式&#xff1a;实战模版模式「模拟爬虫各类电商商品&#xff0c;生成营销推广海报场景」 一、前言 黎明前的坚守&#xff0c;的住吗&#xff1f; 有人举过这样一个例子&#xff0c;先给你张北大的录取通知书&#xff0c;但要求你每天5点起床&#xff0c;12点…...

UNIAPP-ADB无线调试

ADB下载 SDK 平台工具版本说明 | Android Studio | Android Developers (google.cn) 环境变量配置 ADB版本查看 adb version 手机使用数据线连接到电脑 手机需要授权adb调试(开发人员选项里面) CMD输入命令 adb tcpip 5555 到了这一步你手机已经启动了adb服务了&…...

【stm32-新建工程】

stm32-新建工程 ■ 下载相关STM32Cube官方固件包&#xff08;F1&#xff0c;F4&#xff0c;F7&#xff0c;H7&#xff09;■ 1. ST官方搜索STM32Cube■ 2. 搜索 STM32Cube■ 3. 点击获取软件■ 4. 选择对应的版本下载■ 5. 输入账号信息■ 6. 出现下载弹框&#xff0c;等待下载…...

写点什么吧,作为STM32系列的开篇……

自从本科毕业后&#xff0c;就再也没碰过单片机…… 自从研究生毕业后&#xff0c;就再也没碰过硬件…… 自以为以前单片机玩的熟得很&#xff0c;特别是ATMEGA系列的AVR单片机&#xff0c;由于老师的推荐&#xff0c;本科时花了好多精力在这个系列单片机上面…… 本科时STM…...

代码随想录算法训练营第十天| 232.用栈实现队列|225. 用队列实现栈|20. 有效的括号|1047. 删除字符串中的所有相邻重复项

232.用栈实现队列 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;栈的基本操作&#xff01; | LeetCode&#xff1a;232.用栈实现队列_哔哩哔哩_bilibili 知道要用两个栈实现&#xff0c;具体咋做忘了。队列的特性是先进先出&#xff0c;栈是先进后出&#xff0c;入队操…...

Pulsar 社区周报 | No.2024-06-07 | Apache Pulsar 新分支 3.3 版本发布

“ 各位热爱 Pulsar 的小伙伴们&#xff0c;Pulsar 社区周报更新啦&#xff01;这里将记录 Pulsar 社区每周的重要更新&#xff0c;每周发布。 ” 本期主题&#xff1a;Apache Pulsar 新分支 3.3 版本发布 Apache Pulsar 新分支 3.3 版本发布&#xff1a;Apache Pulsar 3.3.0[1…...

Go源码--sync库(3):sync.Pool(2)

回收 回收其实就是将 pool.local 置为空 可以让垃圾回收器回收 我们来看下 源码 func init() {// 将 poolCleanup 注册到 gc开始前的准备工作处理器中在 STW时执行runtime_registerPoolCleanup(poolCleanup) }这里注册了清理程序到GC前准备工作 也就是发生GC前需要执行这段代…...

Go如何在本地引用以及发布并引用自定义工具包

如何引用本地自定义工具包 我们首先要准备两个项目&#xff0c;分别为需要引入的工具包和当前项目。 myutils、myproject1. myutils为我们的项目1-工具包 package mypakgeimport "strings"func IsContains(s string) bool {if strings.Contains(s, "a")…...

使用了代理IP怎么还会被封?代理IP到底有没有效果

代理IP作为一种网络工具&#xff0c;被广泛应用于各种场景&#xff0c;例如网络爬虫、海外购物、规避地区限制等。然而&#xff0c;很多用户在使用代理IP的过程中却发现自己的账号被封禁&#xff0c;这让他们不禁产生疑问&#xff1a;使用了代理IP怎么还会被封&#xff1f;代理…...

在WSL2的Ubuntu中安装和使用Docker/Podman

在WSL2的Ubuntu中安装和使用Docker/Podman 0. 目的 当网络环境良好&#xff08;例如在公司&#xff0c;能直接访问Google等&#xff09;时&#xff0c; Docker/Podman 安装和使用不是问题。 当网络环境不佳&#xff08;例如在家里&#xff09;&#xff0c;要把 WSL2 的 Ubun…...

WindowResizer:突破Windows窗口限制的精准尺寸控制工具

WindowResizer&#xff1a;突破Windows窗口限制的精准尺寸控制工具 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 在Windows桌面环境中&#xff0c;应用程序窗口尺寸管理是影响工…...

【DL】信息注入

在多模态生成(如文生图、3D生成)和视觉语言模型(VLM/VLA)的架构设计中,如何将外部条件(如文本、音频、时间步、控制信号)优雅且高效地“注入”到主干网络(Backbone)中,是决定模型性能的核心。 以下是深度整合了底层张量维度差异的 5 大类主流信息注入方法全景指南:…...

SignalTap调试进阶:巧用约束与别名捕获FPGA优化后的关键信号

1. 为什么优化后的信号会"消失"&#xff1f; 很多FPGA工程师都遇到过这样的场景&#xff1a;明明在代码里明确定义了reg和wire信号&#xff0c;但在SignalTap里死活找不到它们的身影。这其实不是工具出了问题&#xff0c;而是Quartus的综合优化在"作怪"。…...

从Arduino到STM32:GRBL固件选型、下载与刷写全攻略(2024版)

从Arduino到STM32&#xff1a;2024年GRBL固件选型与刷写实战指南 在DIY激光雕刻机和CNC设备的构建过程中&#xff0c;控制器的选择与GRBL固件的配置往往是决定项目成败的关键环节。面对市场上琳琅满目的硬件平台——从经典的Arduino Uno到性能更强的STM32系列开发板&#xff0…...

从Buck电路到逆变器:手把手教你理解SPWM调制的本质与STM32实现误区

从Buck电路到逆变器&#xff1a;手把手教你理解SPWM调制的本质与STM32实现误区 电力电子领域最迷人的地方&#xff0c;在于不同拓扑结构背后隐藏着相通的底层逻辑。当我第一次看到Buck电路的PWM波形与逆变器的SPWM波形同时出现在示波器上时&#xff0c;突然意识到&#xff1a;…...

2026春招爆款!年薪40-200万!小白也能入行的智能体开发,收藏这篇超全学习指南!

本文详细介绍了智能体&#xff08;Agent&#xff09;的概念、核心能力及工作流程&#xff0c;分析了为何智能体开发成为2026年春招热门岗位&#xff0c;薪资可达40-200万。文章强调其转型门槛低、学习周期短&#xff0c;适合小白入行。同时&#xff0c;提供了智能体开发的核心技…...

Windows触控板革命:三指拖拽优化终极指南

Windows触控板革命&#xff1a;三指拖拽优化终极指南 【免费下载链接】ThreeFingersDragOnWindows Enables macOS-style three-finger dragging functionality on Windows Precision touchpads. 项目地址: https://gitcode.com/gh_mirrors/th/ThreeFingersDragOnWindows …...

直面2026检测算法:英文论文降AI实战,3款工具深度避坑盘点

赶稿季来临&#xff0c;英文长稿的AI率到底该怎么降&#xff1f;不少同学愁的头都要秃了&#xff0c;不要再一个词一个词的扣了&#xff0c;这不仅慢&#xff0c;还会把好好的学术英语改得支离破碎。 坦率的讲&#xff0c;真正聪明的降ai&#xff0c;绝对不是机械替换&#xf…...

AI Agent + 指纹浏览器:从0搭建MCP Server实现批量账号自动化管理

我是张大鹏&#xff0c;做了十多年人工智能&#xff0c;带过不少项目。说实话&#xff0c;AI Agent 最难的不是生成内容&#xff0c;是"动手干活"——大模型再强&#xff0c;如果只能输出文字而不能操控真实环境&#xff0c;自动化就永远差最后一公里。最近在研究 In…...

5G载波聚合(CA)技术解析:提升网络速度与容量的关键手段

5G载波聚合&#xff08;CA&#xff09;技术解析&#xff1a;提升网络速度与容量的关键手段 在5G通信技术不断演进的进程中&#xff0c;载波聚合&#xff08;Carrier Aggregation&#xff0c;简称CA&#xff09;作为一项重要技术&#xff0c;正逐渐成为提升网络性能、满足用户多…...