Nvidia Jetson 编解码开发(1)介绍

前言

由于项目需要,需要开发Jetson平台的硬件编解码;

优化CPU带宽,后续主要以介绍硬件编解码为主

1.Jetson各平台编解码性能说明

如下是拿了Jetson nano/tx2/Xavier等几个平台做对比;

这里说明的编解码性能主要是对硬件来说的

2. 编解码实现说明

2.1 软件编解码

优点:功能强大、实现容易,工具强大

缺点: 占用CPU很大

常用工具有如下: ffmpeg、gstreamer,只做简单介绍

2.1.1 ffmpeg

FFMPEG是领先的多媒体框架,提供了音视频的编码,解码,转码,封装,解封装,流,滤镜,播放等功能。

它几乎支持所有的音视频格式,不管是标准委员会,社区,还是公司设计的。

它是高度可移植,跨平台的:

可以在Linux, Mac OS X, Microsoft Windows, the BSDs, Solaris等系统上,在

各种不同的编译环境,机器架构,配置下编译,运行,并通过测试。

FFmpeg 一共包含 8 个库:

avcodec 编解码(最重要的库) 
avformat 封装格式处理 
avfilter 滤镜特效处理 
avdevice 各种设备的输入输出 
avutil 工具库 
postproc 后加工 
swresample 音频采样数据格式转换 
swscale 视频像素数据格式转换

2.1.2 gstreamer

Gstreamer是一个支持Windows,Linux,Android, iOS的跨平台的多媒体框架,

应用程序可以通过管道(Pipeline)的方式,将多媒体处理的各个步骤串联起来,达到预期的效果。

每个步骤通过元素(Element)基于GObject对象系统通过插件(plugins)的方式实现,方便了各项功能的扩展。

2.2 硬件编解码

优点: 占用CPU很小, 功能实现更灵活

缺点: 不通用,需要调用平台相关API,有些硬件方面的限制

2.2.1 Multimedia API

Multimedia API为那些不使用GStreamer等框架或利用自定义框架的开发人员提供了另一条应用程序开发路径。

Multimedia API是支持灵活的应用程序开发的低级API的集合。

这些低级API通过提供对底层硬件块的更好控制来实现灵活性。

多媒体API包括:

•    libargus for imaging applications
•    V4L2 API for encoding, decoding, scaling, and other media functions
•    NVOSD for On-Screen display
•    Buffer Utility for buffer allocation, management, and sharing, transform, composition, and blending 
Example applications are provided to demonstrate:
•    Video decode (dual decode support with NVDEC)
•    Video encode (dual encode support with NVENC)
•    Video decode and DRM based render
•    Video convert
•    Video decode with multi-channels
•    Multivideo decode (decoding of multiple video streams in parallel)
•    JPEG decode and JPEG encode
•    Image/video processing with CUDA
•    Camera JPEG capture and video record
•    Camera capture and CUDA processing
•    Multicamera capture with composition
•    Object detection and classification with cuDNN
•    TensorRT and OpenCV usage

2.2.2 Accelerated GStreamer

由于Jetson平台可支持GStreamer方面得加速;

所以也可以达到降低CPU带宽的目的

2.2.2.1 Encode 示例

(1)Video Encode Examples Using gst-launch-1.0

Video Encode Using gst-omx

//H.264 Encode (NVIDIA Accelerated Encode)
gst-launch-1.0 videotestsrc ! \ 'video/x-raw, format=(string)I420, width=(int)640, 
\ height=(int)480' ! omxh264enc ! 
\ 'video/x-h264, stream-format=(string)byte-stream' ! h264parse ! 
\ qtmux ! filesink location=test.mp4 -e 


//H.265 Encode (NVIDIA Accelerated Encode) g
st-launch-1.0 videotestsrc ! 
\ 'video/x-raw, format=(string)I420, width=(int)640, 
\ height=(int)480' ! omxh265enc ! filesink location=test.h265 -e

Video Encode Using gst-v4l2

//H.264 Encode (NVIDIA Accelerated Encode) 
gst-launch-1.0 nvarguscamerasrc ! 
\ 'video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, 
\ format=(string)NV12, framerate=(fraction)30/1' ! nvv4l2h264enc ! 
\ bitrate=8000000 ! h264parse ! qtmux ! filesink 
\ location=<filename_h264.mp4> -e 

//H.265 Encode (NVIDIA Accelerated Encode) 
gst-launch-1.0 nvarguscamerasrc ! 
\ 'video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, 
\ format=(string)NV12, framerate=(fraction)30/1' ! nvv4l2h265enc 
\ bitrate=8000000 ! h265parse ! qtmux ! filesink \ location=<filename_h265.mp4> -e

(2)Image Encode Examples Using gst-launch-1.0

gst-launch-1.0 videotestsrc num-buffers=1 ! 
\ 'video/x-raw, width=(int)640, height=(int)480, 
\ format=(string)I420' ! nvjpegenc ! filesink location=test.jpg -e

2.2.2.2 Decode 示例

(1)Video Decode Examples Using gst-launch-1.0

Video Decode Using gst-omx

//H.264 Decode (NVIDIA Accelerated Decode) 
gst-launch-1.0 filesrc location=<filename.mp4> ! 
\ qtdemux name=demux demux.video_0 ! queue ! h264parse ! omxh264dec ! 
\ nveglglessink -e 

//H.265 Decode (NVIDIA Accelerated Decode) 
gst-launch-1.0 filesrc location=<filename.mp4> ! 
\ qtdemux name=demux demux.video_0 ! queue ! h265parse ! omxh265dec ! \ nvoverlaysink -e

Video Decode Using gst-v4l2

//H.264 Decode (NVIDIA Accelerated Decode) 
gst-launch-1.0 filesrc location=<filename_h264.mp4> ! 
\ qtdemux ! queue ! h264parse ! nvv4l2decoder ! nv3dsink -e 

//H.265 Decode (NVIDIA Accelerated Decode) 
gst-launch-1.0 filesrc location=<filename_h265.mp4> ! 
\ qtdemux ! queue ! h265parse ! nvv4l2decoder ! nv3dsink -e

(2)Image Decode Examples Using gst-launch-1.0

//JPEG Decode (NVIDIA Accelerated Decode) 

gst-launch-1.0 filesrc location=<filename.jpg> ! nvjpegdec ! 
\ imagefreeze ! xvimagesink -e

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CefSharp自定义缓存实现

提高页面加载加速&#xff1a;CefSharp缓存可以缓存已经加载过的页面和资源&#xff0c;当用户再次访问相同的页面时&#xff0c;可以直接从缓存中加载&#xff0c;而不需要重新下载和解析页面和资源&#xff0c;从而加快页面加载速度。减少网络流量&#xff1a;使用缓存可以减…

使用chatGPT-4 畅聊量子物理学(三)

集合了人类智慧的照片&#xff0c;来自 1927 年举行的第五届索尔维国际会议。 Omer 什么是“物理系统在被测量之前不具有确定的属性。量子力学只能预测给定测量的可能结果的概率分布" ChatGPT 这句话描述了量子力学中的一种基本原则&#xff0c;即“物理系统在被测量之前…

使用Dockerfile部署java项目

1、移动java包到创建的目录下 2、编写Dockerfile文件 在同一目录下使用如下命令创建文件 touch Dockerfile 文件内容如下&#xff1a; #依赖的父镜像 FROM java:8 #作者 MAINTAINER maxurui #jar包添加到镜像中 ADD springboot3-0.0.1-SNAPSHOT.jar springboot3-0.0.1-SNAPSHO…

外贸邮箱签名怎么写?改版提升点击率的关键技巧揭秘!

外贸业务常用的一种营销工具就是电子邮件&#xff0c;而电子邮件的签名作为邮件信任度和品牌价值的体现&#xff0c;同样也是非常重要的。那么如何写一份优秀的外贸邮箱签名呢&#xff1f; 下面是几点建议。 第一&#xff0c;突出品牌形象。在签名中加入公司标志或相关图片可以…

Redis专题-秒杀

Redis专题-并发/秒杀 开局一张图&#xff0c;内容全靠“编”。 昨天晚上在群友里看到有人在讨论库存并发的问题&#xff0c;看到这里我就决定写一篇关于redis秒杀的文章。 1、理论部分 我们看看一般我们库存是怎么出问题的 其实redis提供了两种解决方案&#xff1a;加锁和原子操…

JavaWeb_LeadNews_Day6-Kafka

JavaWeb_LeadNews_Day6-Kafka Kafka概述安装配置kafka入门kafka高可用方案kafka详解生产者同步异步发送消息生产者参数配置消费者同步异步提交偏移量 SpringBoot集成kafka 自媒体文章上下架实现思路具体实现 来源Gitee Kafka 概述 对比 选择 介绍 producer: 发布消息的对象称…

开源远程控制硬件 BliKVM v4测试 1000公里外远程重装系统

测试准备 测试时间&#xff1a;20230818 测试硬件&#xff1a;BliKVM v4 文档 BliKVM v4是一款生产就绪、即插即用的 KVM-over-IP 设备&#xff0c;为专业用户提供了远程服务器或工作站管理的便捷解决方案。 它基于Linux并且完全开源。 借助 BliKVM&#xff0c;您可以轻松打…

19-普通组件的注册使用

普通组件的注册使用-局部注册 一. 组件注册的两种方式:1.局部注册:只能在注册的组件内使用 (1) 创建 vue 文件(单文件组件) (2) 在使用的组件内导入,并注册 components:{ 组件名: 组件对象 } // 导入需要注册的组件 import 组件对象 from.vue文件路径 import HmHeader from ./…

深入学习前端开发,掌握HTML、CSS、JavaScript等技术

课程链接&#xff1a; 链接: https://pan.baidu.com/s/1WECwJ4T8UQfs2FyjUMbxig?pwdi654 提取码: i654 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 --来自百度网盘超级会员v4的分享 课程介绍&#xff1a; 第1周&#xff1a;HTML5基础语法与标签 &#x1f…

基于Java+SpringBoot+vue前后端分离在线BLOG网站系统设计实现

基于JavaSpringBootvue前后端分离在线BLOG网站系统设计实现&#xff08;程序源码毕业论文&#xff09; 大家好&#xff0c;今天给大家介绍基于JavaSpringBootvue前后端分离在线BLOG网站系统设计与实现&#xff0c;本论文只截取部分文章重点&#xff0c;文章末尾附有本毕业设计完…

基于Python的高校学生成绩分析系统

随着计算机技术发展&#xff0c;计算机系统的应用已延伸到社会的各个领域&#xff0c;大量基于网络的广泛应用给生活带来了十分的便利。所以把高校成绩分析与现在网络相结合&#xff0c;利用计算机搭建高校成绩分析系统&#xff0c;实现高校成绩分析的信息化。则对于进一步提高…

Idea中隐藏指定文件或指定类型文件

Setting ->Editor ->Code Style->File Types → Ignored Files and Folders输入要隐藏的文件名&#xff0c;支持*号通配符回车确认添加

通过爬虫抓取上市企业利润表并在睿思BI中展示

睿思BI从v5.3开始支持网络爬虫&#xff0c;可以从指定URL抓取表格数据&#xff0c;本示例实现从网络上抓取上市企业招商银行的利润表数据&#xff0c;并在睿思BI中进行展现。 功能演示URL&#xff1a;https://www.ruisitech.com/rsbi-ultimate/#/dashboard/ShareView?token31…

Maven介绍_下载_安装_使用_原理

文章目录 1 Maven介绍1.1 Maven是介绍1.2 Maven的作用 2 Maven下载与安装2.1 官网下载2.2 文件目录2.3 环境配置 3 Maven基础概念3.1 仓库分类3.2 依赖坐标3.3 坐标组成 4 Maven配置4.1 本地仓库配置4.2 远程仓库的设置4.3 镜像仓库配置4.4 IDEA配置Maven 5 Maven项目创建5.1 M…

Dockers搭建个人网盘、私有仓库,Dockerfile制作Nginx、Lamp镜像

目录 1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 &#xff08;1&#xff09;下载mysql:5.6和owncloud镜像 &#xff08;2&#xff09;创建启动mysql:5.6和owncloud容器 &#xff08;3&#xff09;在浏览器中输入网盘服务器的IP地址&#xff0c;进行账…

CentOS6.8图形界面安装Oracle11.2.0.1.0

Oracle11下载地址 https://edelivery.oracle.com/osdc/faces/SoftwareDelivery 一、环境 CentOS release 6.8 (Final)&#xff0c;测试环境&#xff1a;内存2G&#xff0c;硬盘20G&#xff0c;SWAP空间4G Oracle版本&#xff1a;Release 11.2.0.1.0 安装包&#xff1a;V175…

kafka--kafka的基本概念-副本概念replica

三、kafka的基本概念-副本概念replica Broker 表示实际的物理机器节点 Broker1中的绿色P1表示主分片Broker2中的蓝色P1表示副本分片&#xff0c;其余类似&#xff0c;就是主从的概念&#xff0c;如果一个Broker挂掉了&#xff0c;还有其它的节点来保证数据的完整性 P可以看做分…

小程序体验版不存在 无法体验

1、权限问题&#xff1a; 1、开发者有所有权限。 2、小程序访问路径也是正确的。 该有的权限都有了。 2、解决办法&#xff1a; 打开微信公众平台&#xff0c;左侧菜单【设置】- 【第三方设置】&#xff0c;取消授权即可。

VS2022远程Linux使用cmake开发c++工程配置方法

文章目录 远程连接CMakePresets.json的配置Task.vs.json配置launch.vs.json配置最近使用别人在VS2015上使用visualgdb搭建的linux开发环境,各种不顺手,一会代码不能调转了,一会行号没了,调试的时候断不到正确的位置,取消的断点仍然会进。因此重新摸索了一套使用vs的远程开…

mysql中的窗口函数

MySQL中的窗口函数&#xff08;Window Functions&#xff09;是一种用于在查询结果集内执行计算的功能。窗口函数可以在查询中进行分析和聚合操作&#xff0c;而无需将查询结果分组。它们可以用于计算排名、行号、累积值等各种分析操作。窗口函数通常与OVER子句一起使用&#x…