jetson nx 使用opencv和gstreamer 硬解码

这篇具有很好参考价值的文章主要介绍了jetson nx 使用opencv和gstreamer 硬解码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

https://blog.csdn.net/jiexijihe945/article/details/125928135

RTSP:
"rtspsrc location=rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream latency=4000 ! rtph264depay ! h264parse ! omxh264dec ! nvvidconv !  video/x-raw, width=1280, height=720, format=BGRx ! videoconvert ! appsink"

本地MP4:
"filesrc location=clip.mp4 ! qtdemux ! h264parse ! omxh264dec ! nvvidconv ! appsink"

USB摄像头:

"v4l2src device=/dev/video0 ! video/x-raw, width=1280, height=720 ! videoconvert ! appsink"

可以提前用  gst-launch-1.0 测试上面的pipeline是否有问题,例如测试 rtsp

gst-launch-1.0 rtspsrc location=rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream latency=4000 ! rtph264depay ! h264parse ! omxh264dec ! nvvidconv !  video/x-raw, width=1280, height=720, format=BGRx ! videoconvert ! appsink

 

c++ / opencv  / gstreamer文章来源地址https://www.toymoban.com/news/detail-715134.html

#include <iostream>
#include <thread>
#include <opencv2/opencv.hpp>


void startCamera() {
	cv::VideoCapture cap;
	cap.open("clip.mp4");
	while (true) {
		cv::Mat frame;
		//方法一:>>析取器
		cap >> frame;  //每个循环从cap中解析一帧,赋给frame, 
		if (frame.empty()) {
			break;
		}
		//cv::imshow("frame", frame);
		//cv::waitKey(1);
		std::cout<<"frame :"<<frame.cols<<" "<<frame.rows<<std::endl;
	}
	cap.release();
}

void startGStream(std::string gst_src) {
	cv::VideoCapture cap;
	// "rtspsrc location=rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream latency=4000 ! rtph264depay ! h264parse ! omxh264dec ! nvvidconv !  video/x-raw, width=1280, height=720, format=BGRx ! videoconvert ! appsink"
	// "filesrc location=clip.mp4 ! qtdemux ! h264parse ! omxh264dec ! nvvidconv ! appsink"
	// "v4l2src device=/dev/video0 ! video/x-raw, width=1280, height=720 ! videoconvert ! appsink"
	cap.open(gst_src, cv::CAP_GSTREAMER);
	while (true) {
		cv::Mat frame;
		//方法一:>>析取器
		cap >> frame;  //每个循环从cap中解析一帧,赋给frame, 
		if (frame.empty()) {
			break;
		}
		//cv::imshow("frame", frame);
		//cv::waitKey(1);
		std::cout<<"frame :"<<frame.cols<<" "<<frame.rows<<std::endl;
	}
	cap.release();
}


// "rtspsrc location=rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream latency=4000 ! rtph264depay ! h264parse ! omxh264dec ! nvvidconv !  video/x-raw, width=1280, height=720, format=BGRx ! videoconvert ! appsink"
// "filesrc location=clip.mp4 ! qtdemux ! h264parse ! omxh264dec ! nvvidconv ! appsink"
// "v4l2src device=/dev/video0 ! video/x-raw, width=1280, height=720 ! videoconvert ! appsink"
std::string get_rtsp_h264_gst(std::string rtsp_uri, int width, int height, int latency)
{
	std::string gst_str = "rtspsrc location=" + rtsp_uri+ " latency="+ std::to_string(latency)+ " ! rtph264depay ! h264parse ! omxh264dec ! nvvidconv !  video/x-raw, width="+std::to_string(width)+", height="+std::to_string(height)+", format=BGRx ! videoconvert ! appsink";
	std::cout<<"gst:"<<gst_str<<":"<<std::endl;
	return gst_str;
}
std::string get_rtsp_h265_gst(std::string rtsp_uri, int width, int height, int latency)
{
	std::string gst_str = "rtspsrc location=" + rtsp_uri+ " latency="+ std::to_string(latency)+ " ! rtph265depay ! h265parse ! omxh265dec ! nvvidconv !  video/x-raw, width="+std::to_string(width)+", height="+std::to_string(height)+", format=BGRx ! videoconvert ! appsink";
	std::cout<<"gst:"<<gst_str<<":"<<std::endl;
	return gst_str;
}
std::string get_mp4_h264_gst(std::string file_name, int width, int height)
{
	std::string gst_str = "filesrc location=" + file_name+ " ! qtdemux ! h264parse ! omxh264dec ! nvvidconv !  video/x-raw, width="+std::to_string(width)+", height="+std::to_string(height)+", format=BGRx ! videoconvert ! appsink";
	std::cout<<"gst:"<<gst_str<<":"<<std::endl;
	return gst_str;
}
std::string get_v4l2_gst(std::string device_id, int width, int height)
{
	std::string gst_str = "v4l2src device=" + device_id+ " !  video/x-raw, width="+std::to_string(width)+", height="+std::to_string(height)+", format=BGRx ! videoconvert ! appsink";
	std::cout<<"gst:"<<gst_str<<":"<<std::endl;
	return gst_str;
}


void startGStream(std::string rtsp_uri, int width, int height, int latency) {
	std::string gst_str = get_rtsp_h264_gst(rtsp_uri, width, height, latency);
start:
	cv::VideoCapture capture;
	capture.open(gst_str, cv::CAP_GSTREAMER);
	while (true) {
		cv::Mat frame;
		//方法一:>>析取器
		capture >> frame;  //每个循环从cap中解析一帧,赋给frame, 
		if (frame.empty()) {
			break;
		}
		//cv::imshow("frame", frame);
		//cv::waitKey(1);
		std::cout<<"frame :"<<frame.cols<<" "<<frame.rows<<std::endl;
	}

	capture.release();
	std::cout<<" ...................................................release "<<std::endl;
	goto start;
}


int main(int argc, char** argv){

	//std::string gst_src = "rtspsrc location=rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream latency=4000 ! rtph264depay ! h264parse ! omxh264dec ! nvvidconv !  video/x-raw, width=1280, height=720, format=BGRx ! videoconvert ! appsink";
	// if (argc > 1){
	// 	gst_src = argv[1];
	// }
	// startGStream(gst_src);

	std::string file_src = "rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream";
	int width = 1280;
	int height = 720;
	int latency = 5000;
	if (argc > 4){
		file_src = argv[1];
		width = atoi(argv[2]);
		height = atoi(argv[3]);
		latency = atoi(argv[4]);
	}
	startGStream(file_src, width, height, latency);
	std::cout<<"finished."<<std::endl;
	return 0;
}
cmake_minimum_required(VERSION 2.6)

project(decoder_test)

add_definitions(-std=c++11)

option(CUDA_USE_STATIC_CUDA_RUNTIME OFF)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE Release)

find_package(CUDA REQUIRED)

# if (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
# 	message("embed_platform on")
# 	include_directories(/usr/local/cuda/targets/aarch64-linux/include)
# 	link_directories(/usr/local/cuda/targets/aarch64-linux/lib)
# else()
# 	message("embed_platform off")
# 	include_directories(/usr/local/cuda/include)
# 	link_directories(/usr/local/cuda/lib64)
#     # tensorrt
# 	include_directories(/usr/local/TensorRT-7.0.0.11/include)
# 	link_directories(/usr/local/TensorRT-7.0.0.11/lib)
# endif()

find_package(OpenCV)
include_directories(${OpenCV_INCLUDE_DIRS})


add_executable(decoder_test  ${PROJECT_SOURCE_DIR}/main.cpp)
target_link_libraries(decoder_test ${OpenCV_LIBS})

add_definitions(-O3 -Wall -pthread)

到了这里,关于jetson nx 使用opencv和gstreamer 硬解码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Jetson NX Xavier 编译opencv4.4(cuda版)

    大部分人在解决问题的时候,百度输入的不够准确,展示出来的页面多数是跟自己用的系统版本不一致,导致安装失败。这点对于新手来说特别要注意,正如,你刚好看到我的文章,我希望你能在搜索时用 硬件 + 系统 + 要解决的问题 格式,说不定能提高你的检索效率

    2024年02月13日
    浏览(57)
  • Jetson Xavier NX 上查看CUDA、Cudnn、Tensorrt、Opencv的版本及配置信息

    以上功能都可以通过jtop实现,下面是如何安装jtop: 启动后界面如下,可以查看到开发板资源使用情况,接着 点击info 如果安装成功,可以查看到 CUDA、cuDNN、opencv和TensorRT等版本信息 注意!如果是Jetpack5.0.0以上版本可能会看不到很多信息,因为稳定版本不支持,需要安装最新

    2024年02月15日
    浏览(118)
  • Jetson Orin NX 开发指南(5): 安装 OpenCV 4.6.0 并配置 CUDA 以支持 GPU 加速

    Jetson 系列的开发板 CPU 性能不是很强,往往需要采用 GPU 加速的方式处理图像数据,因此本文主要介绍如何安装带有 GPU 加速的 OpenCV,其中 GPU 加速通过 CUDA 来实现。 参考博客 Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0-CSDN博客Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0https://blog.csdn.

    2024年02月04日
    浏览(58)
  • 人工智能的未来:从 Jetson 到 GPT,沙龙见闻与洞察

    在当今数字化时代,人工智能正以惊人的速度改变着我们的生活和工作方式。从智能语音助手到自动驾驶汽车,从智能家居到医疗诊断,人工智能技术已经广泛渗透到各个行业,并为其带来了巨大的变革和创新。越来越多的行业专家、学者和从业者积极参与到人工智能与行业

    2024年02月07日
    浏览(110)
  • Jetson Orin NX上手使用(Linux系统的配置)

    长文预警 本篇为完整过程记录 有特定需求可以跳转对应位置查看 先介绍手上拿到的orin nx模块:Jetson Orin NX 16GB 100TOPS的算力听起来顶呱呱 摸过一些jetson系列套件的我拿到手自信开搞……然后就自闭了 他好像跟以前的不是一个路子啊(以前摸过的有nano nx tx1 tx2) 遂上网搜索

    2023年04月27日
    浏览(46)
  • Jetson TX2 NX的GPIO引脚使用方式

    Jetson TX2 NX是一款高性能的嵌入式AI计算平台,其中引脚的设计和使用对于开发人员来说非常重要。在本文中,我们将会介绍Jetson TX2 NX的引脚并说明其功能和使用方式。 官方文档官方文档 引脚概述 Jetson TX2 NX具有许多不同类型的引脚,包括数字输入/输出(GPIO)、串行外设接口

    2024年02月15日
    浏览(54)
  • Jetson Xavier NX系统烧录(使用NVIDIA SDK Manager)

    目录 一、在host主机下安装NVIDIA SDK Manager 二、安装系统镜像 三、设置SSD为系统启动项 四、安装CUDA等环境的包 注意:本文使用的是国产开发套件,不支持SD卡镜像文件烧录。 1.安装地址https://developer.nvidia.com/nvidia-sdk-manager,下载deb安装包,双击安装即可。 对host主机的要求如下

    2024年02月13日
    浏览(53)
  • Jetson Orin NX上手使用(Linux系统的配置&Jetpack的烧录)

    长文预警 本篇为完整过程记录 有特定需求可以跳转对应位置查看 先介绍手上拿到的orin nx模块:Jetson Orin NX 16GB 100TOPS的算力听起来顶呱呱 摸过一些jetson系列套件的我拿到手自信开搞……然后就自闭了 他好像跟以前的不是一个路子啊(以前摸过的有nano nx tx1 tx2) 遂上网搜索

    2024年02月06日
    浏览(64)
  • 解码人工智能的幽默:理解其背后的误解与挑战

    ✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭ ❤ ~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。🎥 希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮 记得先点赞👍后阅读哦

    2024年03月13日
    浏览(38)
  • 【深度学习】使用ffmpg及gstreamer进行视频拉流及编解码(一):ffmpg

    视频流需要编解码的主要原因是视频文件的数据量很大,直接传输视频文件会占用大量网络带宽和存储空间。而通过对视频进行编码和解码,可以将视频数据压缩到较小的体积,从而实现更高效的传输和存储。 具体来说,编码就是将原始的视频数据转换为压缩后的视频数据,

    2024年02月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包