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)生成轨迹方法也是目前促进轨迹数据开源共享与解决轨迹数…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
Java后端检查空条件查询
通过抛出运行异常:throw new RuntimeException("请输入查询条件!");BranchWarehouseServiceImpl.java // 查询试剂交易(入库/出库)记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...
el-amap-bezier-curve运用及线弧度设置
文章目录 简介示例线弧度属性主要弧度相关属性其他相关样式属性完整示例链接简介 el-amap-bezier-curve 是 Vue-Amap 组件库中的一个组件,用于在 高德地图 上绘制贝塞尔曲线。 基本用法属性path定义曲线的路径,可以是多个弧线段的组合。stroke-weight线条的宽度。stroke…...
本地部署drawDB结合内网穿透技术实现数据库远程管控方案
文章目录 前言1. Windows本地部署DrawDB2. 安装Cpolar内网穿透3. 实现公网访问DrawDB4. 固定DrawDB公网地址 前言 在数字化浪潮席卷全球的背景下,数据治理能力正日益成为构建现代企业核心竞争力的关键因素。无论是全球500强企业的数据中枢系统,还是初创…...
