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
相关文章:
Nvidia Jetson 编解码开发(1)介绍
前言 由于项目需要,需要开发Jetson平台的硬件编解码; 优化CPU带宽,后续主要以介绍硬件编解码为主 1.Jetson各平台编解码性能说明 如下是拿了Jetson nano/tx2/Xavier等几个平台做对比; 这里说明的编解码性能主要是对硬件来说的…...
【操作系统】24王道考研笔记——第一章 计算机系统概述
第一章 计算机系统概述 一、操作系统基本概念 1.1 定义 1.2 特征 并发 (并行:指两个或多个事件在同一时刻同时发生) 共享 (并发性指计算机系统中同时存在中多个运行着的程序,共享性指系统中的资源可供内存中多个并…...
菜鸟Vue教程 - 实现带国际化的注册登陆页面
初接触vue的时候觉得vue好难,因为项目中要用到,就硬着头皮上,慢慢的发现也不难,无外乎画个布局,然后通过样式调整界面。在通过属性和方法跟js交互。js就和我们写的java代码差不多了,复杂一点的就是引用这种…...
Mybatis ORDER BY 排序失效 ORDER BY 与 CASE WHEN THEN 排序问题
一、ORDER BY 排序失效 如果传递给 mapper 的参数值是以 #{test_参数} 的形式,那么就会报错 具体如下: 传递参数是 name 排序规则是升序 asc package com.ruoyi.web.mapper; public interface TestMapper {List<TestEntity> getTestData( Para…...
日常BUG——微信小程序提交代码报错
😜作 者:是江迪呀✒️本文关键词:日常BUG、BUG、问题分析☀️每日 一言 :存在错误说明你在进步! 一、问题描述 在使用微信小程序开发工具进行提交代码时,报出如下错误: Invalid a…...
1048:有一门课不及格的学生
【题目描述】 给出一名学生的语文和数学成绩,判断他是否恰好有一门课不及格(成绩小于60分)。若该生恰好有一门课不及格,输出1;否则输出0。 【输入】 一行,包含两个在0到100之间的整数,分别是该生的语文成绩和数学成…...
数据结构——B-树、B+树、B*树
一、B-树 1. B-树概念 B树是一种适合外查找的、平衡的多叉树。一棵m阶(m>2)的B树,是一棵平衡的M路平衡搜索树,它可以是空树或满足以下性质: (1)根节点至少有两个孩子。 (2&#…...
2023国赛数学建模思路 - 案例:FPTree-频繁模式树算法
文章目录 算法介绍FP树表示法构建FP树实现代码 建模资料 ## 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法,就是频繁模式树算法,…...
GPT系列总结
1.GPT1 无监督预训练有监督的子任务finetuning https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf 1.1 Unsupervised pre-training (1)基于一个transformer decoder,通过一个窗口的输入得…...
【福建事业单位-综合基础知识】05民法典
这里写自定义目录标题 一、民法概述概念原则总结 二、自然人概念总结 三、民事法律行为总结 民法考察2-4题(重点总则篇) 一、民法概述 概念原则 总结 二、自然人 概念 总结 三、民事法律行为 总结...
微服务篇
微服务篇 springcloud 常见组件有哪些 面试官: Spring Cloud 5大组件有哪些? 候选人: 早期我们一般认为的Spring Cloud五大组件是 Eureka:注册中心Ribbon:负载均衡Feign:远程调用Hystrix:…...
C++ 的关键字(保留字)完整介绍
1. asm asm (指令字符串):允许在 C 程序中嵌入汇编代码。 2. auto auto(自动,automatic)是存储类型标识符,表明变量"自动"具有本地范围,块范围的变量声明(如for循环体内的变量声明…...
C#小轮子:MiniExcel,快速操作Excel
文章目录 前言环境安装功能测试普通读写读新建Excel表格完全一致测试:成功大小写测试:严格大小写别名读测试:成功 写普通写别名写内容追加更新模板写 其它功能xlsx和CSV互转 前言 Excel的操作是我们最常用的操作,Excel相当于一个…...
Ribbon负载均衡
Ribbon与Eureka的关系 Eureka的服务拉取与负载均衡都是由Ribbon来实现的。 当服务发送http://userservice/user/xxxhtt://userservice/user/xxx请求时,是无法到达userservice服务的,会通过Ribbon会把这个请求拦截下来,通过Eureka-server转换…...
LeetCode--HOT100题(33)
目录 题目描述:148. 排序链表(中等)题目接口解题思路代码 PS: 题目描述:148. 排序链表(中等) 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 LeetCode做题链接࿱…...
【docker练习】
1.安装docker服务,配置镜像加速器 看这篇文章https://blog.csdn.net/HealerCCX/article/details/132342679?spm1001.2014.3001.5501 2.下载系统镜像(Ubuntu、 centos) [rootnode1 ~]# docker pull centos [rootnode1 ~]# docker pull ubu…...
韦东山-电子量产工具项目:业务系统
代码结构 所有代码都已通过测试跑通,其中代码结构如下: 一、include文件夹 1.1 common.h #ifndef _COMMON_H #define _COMMON_Htypedef struct Region {int iLeftUpX; //区域左上方的坐标int iLeftUpY; //区域左下方的坐标int iWidth; //区域宽…...
React(6)
1.React插槽 import React, { Component } from react import Child from ./compoent/Childexport default class App extends Component {render() {return (<div><Child><div>App下的div</div></Child></div>)} }import React, { Compon…...
RabbitMq-2安装与配置
Rabbitmq的安装 1.上传资源 注意:rabbitmq的版本必须与erlang编译器的版本适配 2.安装依赖环境 //打开虚拟机 yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel m4 ncurses-devel tk tc xz3.安装erlan…...
论文笔记:Continuous Trajectory Generation Based on Two-Stage GAN
2023 AAAI 1 intro 1.1 背景 建模人类个体移动模式并生成接近真实的轨迹在许多应用中至关重要 1)生成轨迹方法能够为城市规划、流行病传播分析和交通管控等城市假设分析场景提供仿仿真数据支撑2)生成轨迹方法也是目前促进轨迹数据开源共享与解决轨迹数…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
