Jetson 把玩记 三、rtmp直播流物体识别定位

detectnet 可以直接打开rtsp网络摄像头作为输入源,进行实时视频分析,在监控领域有非常大的应用。

尝试了下打开rtmp流,没有成功,返回说不支持。

从日志输出来看是使用GStreamer。

[gstreamer] gstDecoder -- unsupported protocol (rtmp)
[gstreamer]               supported protocols are:
[gstreamer]                  * file://
[gstreamer]                  * rtp://
[gstreamer]                  * rtsp://
[gstreamer] gstDecoder -- failed to build pipeline string
[gstreamer] gstDecoder -- failed to create decoder for rtmp://192.168.0.2/live/bbb
detectnet:  failed to create input stream

如果是GStreamer,那当然应该支持rtmp才对。打开并修改源码
jetson-inference/utils/codec/gstDecoder.cpp

else if( uri.protocol == "rtsp" )
	{
		ss << "rtspsrc location=" << uri.string;
		//ss << " latency=200 drop-on-latency=true";
		ss << " ! queue ! ";
		
		if( mOptions.codec == videoOptions::CODEC_H264 )
			ss << "rtph264depay ! h264parse ! ";
		else if( mOptions.codec == videoOptions::CODEC_H265 )
			ss << "rtph265depay ! h265parse ! ";
		else if( mOptions.codec == videoOptions::CODEC_VP8 )
			ss << "rtpvp8depay ! ";
		else if( mOptions.codec == videoOptions::CODEC_VP9 )
			ss << "rtpvp9depay ! ";
		else if( mOptions.codec == videoOptions::CODEC_MPEG2 )
			ss << "rtpmp2tdepay ! ";		// MP2T-ES
		else if( mOptions.codec == videoOptions::CODEC_MPEG4 )
			ss << "rtpmp4vdepay ! ";	// rtpmp4gdepay
		else if( mOptions.codec == videoOptions::CODEC_MJPEG )
			ss << "rtpjpegdepay ! ";

		mOptions.deviceType = videoOptions::DEVICE_IP;
	}
	else if( uri.protocol == "rtmp" )
	{
		ss << "rtmpsrc location=" << uri.string;
		//ss << " latency=200 drop-on-latency=true";
		ss << " ! queue ! ";
		ss << "flvdemux ! ";
		if( mOptions.codec == videoOptions::CODEC_H264 )
			ss << "h264parse ! ";
		else if( mOptions.codec == videoOptions::CODEC_H265 )
			ss << "h265parse ! ";
		// else if( mOptions.codec == videoOptions::CODEC_VP8 )
		// 	ss << "rtpvp8depay ! ";
		// else if( mOptions.codec == videoOptions::CODEC_VP9 )
		// 	ss << "rtpvp9depay ! ";
		// else if( mOptions.codec == videoOptions::CODEC_MPEG2 )
		// 	ss << "rtpmp2tdepay ! ";		// MP2T-ES
		// else if( mOptions.codec == videoOptions::CODEC_MPEG4 )
		// 	ss << "rtpmp4vdepay ! ";	// rtpmp4gdepay
		// else if( mOptions.codec == videoOptions::CODEC_MJPEG )
		// 	ss << "rtpjpegdepay ! ";

		mOptions.deviceType = videoOptions::DEVICE_IP;
	}
	else
	{
		LogError(LOG_GSTREAMER "gstDecoder -- unsupported protocol (%s)\n", uri.protocol.c_str());
		LogError(LOG_GSTREAMER "              supported protocols are:\n");
		LogError(LOG_GSTREAMER "                 * file://\n");
		LogError(LOG_GSTREAMER "                 * rtp://\n");
		LogError(LOG_GSTREAMER "                 * rtsp://\n");
		LogError(LOG_GSTREAMER "                 * rtmp://\n");

		return false;
	}

RTMP协议本身是不支持H265的,NMS, NMC和NodePlayer.js等通过对flv协议扩展支持了H265,这会在GStreamer原版上改动较大。

因此,下阶段将全力开发NMSv3输出rtsp流。则能直接支持H265,并且Jetson等无需改动即可接入NMS。

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: Jetson 把玩记 三、rtmp直播流物体识别定位

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理