gstreamer 配置+解析编解码

news2025/1/11 7:42:20

一. 安装gstreamer

1.1 Windows下安装

官网链接:https://gstreamer.freedesktop.org/download/#windows
在这里插入图片描述
两个都要下载。安装的时候,在custom选择安装路径。然后返回上一步选择complete完全安装,两个安装方式一样。
请添加图片描述

1.2 配置环境

将 D:\gstreamer\1.0\msvc_x86_64\bin 添加至环境变量

在vs工程中使用:

  1. 在c/c++ -------常规--------附加包含目录 增加如下目录

D:\gstreamer\1.0\msvc_x86_64\include\gstreamer-1.0
D:\gstreamer\1.0\msvc_x86_64\include\glib-2.0
D:\gstreamer\1.0\msvc_x86_64\include\libxml2
D:\gstreamer\1.0\msvc_x86_64\include

  1. 链接器----常规----附加库目录,增加 如下目录

D:\gstreamer\1.0\msvc_x86_64\lib

  1. 链接器----输入-----附加依赖性 增加

gobject-2.0.lib;glib-2.0.lib;gstreamer-1.0.lib

  1. 调试----环境

path=%path%;F:\gstreamer\1.0\x86\bin

1.3 Ubuntu下安装

首先更新系统的软件包

sudo apt-get update
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio

安装完成后,检查GStreamer是否安装正确。

gst-inspect-1.0 --version

显示版本说明成功安装。

二. 测试

2.1 命令行测试

gst-launch-1.0.exe -v playbin uri=file:/C:\\Users\\26366\\Desktop\\宣传片成片.mp4

输出视频即为成功。

2.2 c++测试

// GstreamerHelloWorld.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>

#include <gst/gst.h>
#include <glib.h>

int main(int  argc, char* argv[]) {
	GstElement* pipeline;
	GstElement* source, * filter, * sink;

	//init
	gst_init(&argc, &argv);

	//creat pipeline
	pipeline = gst_pipeline_new("my-pipline");

	create elements
	source = gst_element_factory_make("fakesrc", "source");
	filter = gst_element_factory_make("identity", "filter");
	sink = gst_element_factory_make("fakesink", "sink");

	//将元组添加到管道中
	gst_bin_add_many(GST_BIN(pipeline), source, filter, sink, NULL);

	//连接
	if (!gst_element_link_many(source, filter, sink, NULL)) {
		g_warning("failed to link elements\n");
		std::cout << "failed to link elements!\n";
	}
	else
	{
		std::cout << "Hello GStreamer!\n";
	}
	/*在链接不同的组件之前,你需要确保这些组件都被加在同一个箱柜中,
	因为将一个组件加载到一个箱柜中会破坏该组件已存在的一些链接关系。
	同时,你不能直接链接不在同一箱柜或管道中的组件。*/

	return 0;
}

输出Hello GStreamer!即为配置成功。

三.应用

3.1 例一:udp裸流,未使用RTP封装

编码:

gst-launch-1.0 filesrc location=C:\\Users\\26366\\Desktop\\宣传片成片.mp4 ! qtdemux ! avdec_h264 ! x264enc ! udpsink host=192.168.0.105 port=5600

对应解码:

gst-launch-1.0 udpsrc port=5600 ! h264parse ! avdec_h264 ! videoconvert ! autovideosink

c++解码:

// GstreamerHelloWorld.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>

#include <gst/gst.h>
#include <glib.h>


static GstElement* pipeline = nullptr;
static GstBus* bus = nullptr;
static GstMessage* msg = nullptr;

// 回调函数,用于处理 GStreamer 消息
static gboolean  on_message(GstBus* bus, GstMessage* msg, gpointer data) {
	GError* err;
	gchar* debug_info;

	switch (GST_MESSAGE_TYPE(msg)) {
	case GST_MESSAGE_ERROR:
		gst_message_parse_error(msg, &err, &debug_info);
		g_printerr("Error received from element %s: %s\n", GST_OBJECT_NAME(msg->src), err->message);
		g_printerr("Debugging information: %s\n", debug_info ? debug_info : "none");
		g_clear_error(&err);
		g_free(debug_info);
		g_main_loop_quit((GMainLoop*)data);
		break;
	default:
		break;
	}
	return TRUE;
}

int main(int  argc, char* argv[]) {
	gst_init(&argc, &argv);
	gst_debug_set_active(TRUE);
	gst_debug_set_default_threshold(GST_LEVEL_DEBUG);

	GMainLoop* loop = g_main_loop_new(NULL, FALSE);

	// 创建 GStreamer 管道
	pipeline = gst_parse_launch("udpsrc port=5600 ! h264parse ! avdec_h264 ! videoconvert ! autovideosink", NULL);
	bus = gst_element_get_bus(pipeline);
	gst_bus_add_watch(bus, on_message, loop);
	gst_object_unref(bus);

	// 开始播放
	gst_element_set_state(pipeline, GST_STATE_PLAYING);

	// 运行主循环
	g_print("Playing stream...\n");
	g_main_loop_run(loop);

	// 清理
	gst_element_set_state(pipeline, GST_STATE_NULL);
	gst_object_unref(pipeline);
	g_main_loop_unref(loop);

	return 0;
}

3.2 例二,使用RTP封装

编码

gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! 'video/x-raw,format=(string)NV12,width=640,height=480,framerate=(fraction)30/1' ! queue ! x264enc  ! udpsink host=127.0.0.1 port=5000 sync=false

解码:

gst-launch-1.0 udpsrc port=5000 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' \
    ! rtpjitterbuffer latency=200 \
    ! rtspsrc ! avdec_h264 ! videoconvert ! autovideosink

参数解释:

  • udpsrc port=5000:设置 GStreamer 从 UDP 端口 5000 接收数据。(可替换:rtspsrc ,filesrc ,v4l2src)
  • caps:设置接收数据的属性,包括媒体类型(video)、时钟频率(90000,对应于 90 kHz的时钟,常用于视频)、编码名称(H264)。
  • rtpjitterbuffer:用于处理网络抖动,latency参数设置为缓冲区的延迟时间(单位为纳秒)。
  • rtspsrc:使用 RTP 流,需要使用 rtspsrc 而不是 udpsrc
  • avdec_h264:H.264 视频解码器。
  • videoconvert:用于转换视频到显示设备支持的格式。
  • autovideosink:自动选择一个合适的视频渲染器(例如,X 服务器或 GL 渲染器)用来展示视频。

gst-launch-1.0 udpsrc port=14556 caps=“application/x-rtp, media=(string)video, clock-rate=(int)90000, enc
oding-name=(string)H264” ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosink

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1959898.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python3 pyside6图形库学习笔记及实践(二)

目录 前言常用控件下拉框(QComboBox)复选框(QCheckBox)单选框(QRadioButton)文本框(QTextEdit和QPlainTextEdit)滑块(QSlider) 布局常见布局控件示例布局的好处 对话框消息框(QMessageBox)输入对话框(QInputDialog)文件对话框(QFileDialog)字体对话框(QFontDialog)颜色对话框(Q…

一文精通Python print函数的N种玩法

文末赠免费精品编程资料~~ 今天我们要探索的是编程世界中最常被忽略的英雄——print函数。别看它简单&#xff0c;其实藏着不少有趣的玩法和高级技巧&#xff0c;能让你的代码更加灵活和高效。准备好了吗&#xff1f;让我们一起深入这个看似平凡却又不凡的功能。 基础篇&…

SuperGlue网络+FPN+SIFT(特征匹配)

SuperGlue网络+FPN+SIFT(特征匹配) 摘要1. FPNFPN具体实现思路2. SIFT2.1 尺度空间极值检测2.1.1 尺度空间2.1.2 高斯金字塔2.1.4 局部极值检测2.2 精确的关键点定位2.2.1 消除边缘响应2.2.2 确定关键点(极值点)方向2.3 关键点描述2.4 关键点匹配2.5 SIFT代码实现2.6 SIFT的…

贪心算法-买卖股票问题

贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最好或最优的算法。贪心算法并不保证总是能得到全局最优解&#xff0c;但它通常能得到不错的解…

新版PyTorch:AI任务加速与Intel GPU集成

--->更多内容&#xff0c;请移步“鲁班秘笈”&#xff01;&#xff01;<--- 最近的Pytorch 2.4 推出AI任务加速&#xff0c;提供对Intel GPU的支持。为了进一步加速 AI任务&#xff0c;PyTorch 2.4现在为Intel数据中心GPU Max系列提供支持&#xff0c;该系列将Intel GPU…

Java答题系统练习模拟考试系统

&#x1f4dd;【学霸秘籍】答题系统模拟考试系统&#xff0c;你的提分神器来啦&#xff01;&#x1f680; &#x1f4da; 开篇引入&#xff1a;学习路上的得力助手 嘿&#xff0c;小伙伴们&#xff01;是不是又在为即将到来的考试焦头烂额&#xff1f;&#x1f623; 是不是觉…

二分查找(多版本)

1.基础版 public class erfenchazhao {public int test(int arr[],int target){int i 0; //定义左指针int j arr.length-1;//定义右指针int m; //定义中间值while(i<j){ //判断条件m (ij)>>>1;if(target < arr[m]){ //目标值在左边j m - 1;}else…

【python】在Python代码中执行Linux命令的详细用法教程

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

昇思25天学习打卡营第01天|昇思MindSpore大模型基础介绍

昇思MindSpore和华为昇思MindSpore大模型学习打卡系列文章&#xff0c;本文仅供参考~ 文章目录 前言一、昇思MindSpore是什么&#xff1f;二、执行流程三、设计理念四、层次结构五、Huawei昇腾AI全栈 前言 随着计算机大模型的不断发展&#xff0c;Ai这门技术也越来越重要&#…

免费【2024】springboot 宠物领养救助平台的开发与设计

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

Prozyme糖样本检测平台--GlykoPrep® Rapid N-Glycan Preparation with APTS

单克隆抗体已成为生物制药行业具有潜力的新兴蛋白候选药物。其药物研发流程包括一系列精细的控制和评估步骤&#xff0c;需要仔细、严格地监测目标化合物的治疗稳定性及有效性。因此&#xff0c;在商业化前的每个阶段对单克隆抗体进行全面表征是极其有益的。在大量研究成熟的蛋…

用Python打造精彩动画与视频,3.1 安装和设置 MoviePy

第3章 开始你的第一个视频项目 MoviePy 3.1 安装和设置 MoviePy 视频处理在多媒体内容创作中起着至关重要的作用。MoviePy 是一个用于视频编辑的 Python 库&#xff0c;它可以让你轻松地进行视频剪辑、合并、特效添加等操作。通过 MoviePy&#xff0c;你可以用简单的 Python…

基于Java+SpringBoot+Vue的的课程作业管理系统

前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 哈喽兄弟们&#xff0c;好久不见哦&#xff5…

IEEE 快刊合集!期刊选的好,JCR1区照样轻松拿下~

【SciencePub学术】今天小编给大家推荐2本计算机领域的SCI&#xff0c;均隶属于IEEE出版社&#xff0c;虽比不上前几日给大家介绍的IEEE-Trans系列的那本期刊优秀&#xff0c;但是放在行业内还是很拿得出手的。 现在提交&#xff0c;可免费预审&#xff0c;预审通过后录用率100…

失业负债女孩,下班后用AI做副业,快速翻身上岸

** - 我们应该把负债看成是成长的助力&#xff0c;而不是搞垮骆驼的稻草。 负债上岸&#xff0c;没有更多的捷径&#xff0c;唯有“开源节流”&#xff0c;节流就是尽可能节约花费&#xff0c;把生活支出减少&#xff0c;开源就是尽可能多的增加自己的副业收入。 负债后的至…

【通俗理解】“多即不同”观念的科学内涵——从对称破缺到科学层次结构的探索

【通俗理解】“多即不同”观念的科学内涵——从对称破缺到科学层次结构的探索 对称破缺与科学层次结构的类比 你可以把对称破缺比作一个“建筑师”&#xff0c;它构建了科学大厦的基础框架。而科学层次结构则是一个“城市规划师”&#xff0c;它规划了这些基础框架如何组合成一…

【附精彩文章合辑】跨界对话:黄仁勋与扎克伯格的“外套交换”与未来展望

跨界对话&#xff1a;黄仁勋与扎克伯格的“外套交换”与未来展望 在科技界的浩瀚星空中&#xff0c;两位璀璨的名字如同双子星般交相辉映——NVIDIA的创始人兼CEO黄仁勋&#xff08;Jensen Huang&#xff09;与Facebook&#xff08;现更名为Meta&#xff09;的掌舵人马克扎克伯…

快速开启react+electron应用,搭建启动问题

注意&#xff1a; React 本地启动在 3000端口Electron 在创建 BrowserWindow 的时候&#xff0c;可以读取本地的文件或者是 url开发环境 读取localhost: 3000生产环境 需要加载本地成型以后的本地文件&#xff0c;打包的时候再考虑 一 react 脚手架 create-react-app 快速搭建…

iTerm2使用手册

iTerm2字体 参考文章&#xff1a;iTerm2 安装 SF Mono 字体 iTerm2默认的字体不太好看&#xff0c;感觉Mac自带的终端的字体看起来很舒服&#xff0c;于是让iTerm2和Mac自带终端保持一致 找到Terminal.app下面的字体 执行 cp *.otf ~/Library/Fonts/ 然后在iTerm2中设置字…

ElementUI,el-input输入框max、min限制最大最小值失效

<el-input type"number" v-model"loadNodesNum" :min"1" :max"5" style"width: 240px;overflow: hidden;"><el-button slot"append" click"handleMaxLoadNum(1)">负载最多的节点TOP</el…