【DeepStream】基于英伟达DeepStream框架进行算法开发(一):GStreamer基础

目录

  • 简介
    • deepstream 来源于 GStreamer
    • GStreamer关于RTP相关代码

简介

在当今快速发展的人工智能和计算机视觉领域,英伟达的DeepStream框架提供了强大的工具和功能,帮助开发者快速部署和优化实时视频分析应用。本博客将重点介绍基于英伟达DeepStream框架进行算法开发的方法和技巧,包括如何利用DeepStream框架构建高效的算法模型、实现实时视频流处理和应用优化等内容。通过本博客的学习,读者将能够掌握在DeepStream框架下进行算法开发的关键技能,为自己的视频分析项目提供更加稳定和高效的解决方案。

deepstream 来源于 GStreamer

GStreamer中摄像头测试用命令:

gst-launch-1.0 videotestsrc ! video/x-raw,width=1280 ! fakesink

查看各组件属性的工具:

gst-inspect-1.0 videotestsrc

表现为python版本的代码:

import gi
from gi.repository import GObject,Gst
from common.bus_call import bus_call
source=gst.elementFactory.make("videotestsrc","src")
sink=gst.elementFactory.make("autovideosink","sink")
在pipeline中新增部件
pipeline.add(source)
pipeline.add(sink)
链接已有的部件:
source.link(sink)
运行部分:
from gi.repository import GLib,Gst
获取一个主循环
loop=GLib.MainLoop
获取一个总线
bus=pipeline.get_bus()
bus.add_signal_watch()
#主循环中接收总线消息
bus.connect("message",bus_call,loop)
#设置pipeline的状态,启用pipeline
pipeline.set_state(Gst.State.PLAYING)try:loop.run()
except:pass
pipeline.set_state(Gst.State.Null)

三种不同的GStreamer元素:

source element 源
sink element 结尾
filter-like element 过滤器式,即有源,又有下一级

GStreamer关于RTP相关代码

RTP 是一种用于在网络上传输实时数据的协议,通常用于音频和视频的传输。

rtpjpegpay 是 GStreamer 中的一个元素,用于将 JPEG 图像数据打包成 RTP 数据包,以便在网络上传输。在实时通信和视频流传输应用中,可以使用 rtpjpegpay 对 JPEG 图像进行封装,并结合其他 RTP 相关的元素,如 rtpbin 和 udpsink,实现 JPEG 图像数据的流式传输和接收。这样可以确保 JPEG 图像数据在网络中以实时和高效的方式传输,适用于视频会议、监控系统等需要实时传输图像数据的场景。

jetson nano 服务端:
IP:192.168.2.9
rtpjpegpay:将jpeg编码成rtp包向udp进行发送。
gst-launch-1.0 videotestsrc is-live=true ! jpegenc ! rtpjpegpay ! udpsink host=192.168.2.7 port=5004
host是客户端的地址
t
在客户端的接收显示为:
gst-launch-1.0 udpsrc port=5004 ! application/x-rtp,encoding-name=JPEG ! rtpjpegdepay ! jpegdec ! autovideosinkunable to create xxx:注意使用 rm -rf ~/.cache/gstreamer-1.0/

这段代码实际上是在使用 GStreamer 在 Jetson Nano 服务端和客户端之间搭建一个简单的实时视频传输流程,其中服务端将摄像头生成的视频流编码成 JPEG 格式后,利用 RTP 协议将其封装成 RTP 包通过 UDP 发送到指定的客户端地址和端口。

具体来说:

在 Jetson Nano 服务端上,通过 gst-launch-1.0 命令行工具启动 GStreamer 管道,使用 videotestsrc 生成测试视频流,经过 jpegenc 编码为 JPEG 格式,然后通过 rtpjpegpay 将 JPEG 数据打包成 RTP 数据包,最后通过 udpsink 发送到指定的客户端地址(192.168.2.7)和端口(5004)。

在客户端上,使用 gst-launch-1.0 同样通过 GStreamer 创建一个管道,通过 udpsrc 接收来自服务端发送的 RTP 数据包,application/x-rtp,encoding-name=JPEG 表示接收 JPEG 编码的 RTP 数据包,在经过 rtpjpegdepay 解包后,通过 jpegdec 解码为视频帧,最后通过 autovideosink 进行显示。

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

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

相关文章

maven复合工程生成

1. maven命令生成复合工程: ------- mvn archetype:generate -DgroupIdcom.caiwm -DartifactIdspring-learn -DarchetypeArtifactIdmaven-archetype-quickstart -DinteractiveModefalse 修改packing为pom ------ cd composite-parent mvn archetype:generate -Dgrou…

虚拟机JVM

虚拟机 1、定义jvm 假想计算机 运行在操作系统之上 和硬件之间没有直接交互 包括 一套字节码指令、寄存器、栈、垃圾回收、堆 一个存储方法域 jvm:承担一个翻译工作,动态的将java代码编译成操作系统可以识别的机器码。 从软件层面屏蔽了不同操作系统在底层硬件与指…

petalinux-config : command not found 和petalinux-build: command not found

发现这两个问题都是因为:没有先设置 petalinux 的作环境 先输入命令 先执行 source /opt/pkg/petalinux/2020.2/settings.sh 或者 sptl 然后切换目录,到相应的目录,就可以了

【设计模式】使用门面模式简化接口的复杂度

文章目录 1.概述2.门面模式的定义3.门面模式的应用场景4.总结 1.概述 门面模式(Facade Pattern)又叫做外观模式,它通过为子系统提供一个统一的高层入口的方式,达到简化复杂系统的使用以及降低客户端与子系统之间的耦合度的效果&a…

unity-unity2d基础操作笔记(二)0.5.101

unity2d基础操作笔记 五十一、canvas中的必须熟悉的属性五十二、如何调整canvas与游戏人物大小近似大小五十三、canvas中的canvas scaler介绍【概念】五十四、ui scale mode介绍【概念】五十五、为什么创建image后,canvas的范围要要远远大于游戏世界?五十六、图片常用操作【技…

LeetCode53题:最大子数组和(python3)

代码思路: 动态规划,使用动态规划如果上一个数是大于0,则加上;如果小于0直接用0。这样做的好处就是最终直接是最大子数组和。 class Solution:def maxSubArray(self, nums: List[int]) -> int:for i in range(1,len(nums)):nu…

Docker Volume

"Ice in my vein" Docker Volume(存储卷) 什么是存储卷? 存储卷就是: “将宿主机的本地文件系统中存在的某个目录,与容器内部的文件系统上的某一目录建立绑定关系”。 存储卷与容器本身的联合文件系统? 在宿主机上的这个与容器形成绑定关系…

【kubernetes】关于k8s集群中kubectl的陈述式资源管理

目录 一、k8s集群资源管理方式分类: (1)陈述式资源管理方式:增删查比较方便,但是改非常不方便 (2)声明式资源管理方式:yaml文件管理 二、陈述式资源管理方法: 三、ku…

leetcode移动零

leetcode移动零 Given an integer array nums, move all 0’s to the end of it while maintaining the relative order of the non-zero elements. Note that you must do this in-place without making a copy of the array. Example 1: Input: nums [0,1,0,3,12] Output…

linux下gcc编译时默认是32位还是64位,怎么指定为32or64?

本来是想研究一下long的字节大小sizeof(long)&#xff0c;于是写了代码&#xff1a; #include <stdio.h> int main() {long a 10;printf("%d\n", sizeof(a));return 0; } 我当时使用的是win10系统&#xff0c;使用的是vs 2022&#xff0c;然后对以上代码进行…

[面试]我们常说的负载均衡是什么东西?

什么是负载均衡 如果用户量很多, 服务器的流量也随之增大, 此时出现两个问题, 软件性能下降 容易出现单点故障 为了解决这些问题, 引入了集群化架构, 也就是把一个软件同时部署在多个服务器上 集群化架构出现的问题 架构改变后又出现了两个问题 如何将请求均匀的发送到多…

二叉排序树

1.二叉排序树&#xff08;Binary Search Tree&#xff09; 一棵二叉树或者是空二叉树&#xff0c;或者是具有如下性质的二叉树 &#xff08;1&#xff09;左子树上所有结点的关键字均小于根结点的关键字 &#xff08;2&#xff09;右子树上所有结点的关键字均大于根结点的关键…

3D WEB轻量化引擎HOOPS:促进3D软件的创新与协作

CAD软件一直以来都在现代工程、建筑、制造和设计领域发挥着至关重要的作用。在数字时代&#xff0c;CAD软件的开发者不断追求提高软件性能、增加功能和改善用户体验&#xff0c;在这一努力中&#xff0c;HOOPS技术&#xff08;高度优化的面向对象并行软件&#xff09;滑块露头角…

【Spring连载】使用Spring Data访问 MongoDB(九)----可尾游标Tailable Cursors

【Spring连载】使用Spring Data访问 MongoDB&#xff08;九&#xff09;----可尾游标Tailable Cursors 一级目录二级目录三级目录 一级目录 二级目录 三级目录

地图匹配+目标定位

1. 思路 掌握飞机位姿和吊舱位姿解算目标粗略GPS根据该GPS调用在线或离线卫星图将吊舱图像和卫星图进行匹配通过解算对目标进行精确定位&#xff0c;就很简单了 调用卫星图匹配 2. 高权值区 2.1 Cross-View Object Geo-Localization in a Local Region With Satellite Imag…

SpringBoot快速入门(黑马学习笔记)

需求 需求&#xff1a;基于SpringBoot的方式开发一个Web应用&#xff0c;浏览器发起请求/hello后&#xff0c;给浏览器返回字符串"Hello World~"。 开发步骤 第一步&#xff1a;创建SpringBoot工程项目 第二步&#xff1a;定义HelloController类&#xff0c;添加方…

python Matplotlib Tkinter-->tab切换1

环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 pillow 10.1.0 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk import tkinter as tk import tkinter.messagebox as messagebox import …

UncleZZ‘s Remedy I - App Daemon

1.缘起 这个系列会汇集一些临近deadline是最后补救措施&#xff0c;以备不时之需。面临项目交付时&#xff0c;经常会有一些或大或小的功能项点&#xff0c;甚至是bug无法做完。这个时候&#xff0c;就需要一些终极补救措施来应对这种不时之需。 第一个工具app_daemon是针对那…

股票三种行情的最佳买卖点,分时图与K线图分析案例教学

一、教程描述 本套股票行情教程&#xff0c;大小5.40G&#xff0c;共有50个文件。 二、教程目录 股票教程01&#xff1a;上升行情之股票运行轨迹.mp4 股票教程02&#xff1a;上升行情之千金难买牛回头.mp4 股票教程03&#xff1a;上升行情之一线一量走天下.mp4 股票教程0…

Qt程序设计-钟表自定义控件实例

本文讲解Qt钟表自定义控件实例。 效果如下: 创建钟表类 #ifndef TIMEPIECE_H #define TIMEPIECE_H#include <QWidget> #include <QPropertyAnimation> #include <QDebug> #include <QPainter> #include <QtMath>#include <QTimer>#incl…