Hi,
Im using thus code on jetson with zed2i camera, on jetson devic I run the below code and on laptop i open stream using vlc.
Kindly assist me with my concerns :
-
I have a delay mainly 1 second which is unaccepted at all and can’t be ignored at all.
-
I’m thinking that, how can open stream on web browser not using vlc?
import sys
import numpy as np
import pyzed.sl as sl
import cv2
import gi
gi.require_version(‘Gst’, ‘1.0’)
gi.require_version(‘GstRtspServer’, ‘1.0’)
from gi.repository import Gst, GstRtspServer, GObject
def main():
# Create a ZED camera object
zed = sl.Camera()
init = sl.InitParameters()
init.camera_resolution = sl.RESOLUTION.HD720
init.camera_fps = 30
init.set_from_serial_number(serial)
#init.coordinate_units = sl.UNIT.METER
# Open the camera
err = zed.open(init)
if err != sl.ERROR_CODE.SUCCESS:
print(repr(err))
zed.close()
exit(1)
# Set runtime parameters after opening the camera
runtime = sl.RuntimeParameters()
# Set image size to HD720 (1280x720)
image_size = sl.Resolution(1280, 720)
image_size_out = sl.Resolution(1280, 720)
# Declare your sl.Mat matrices with the updated size
image_zed = sl.Mat(image_size.width, image_size.height, sl.MAT_TYPE.U8_C4)
image_zed_out = sl.Mat(image_size_out.width, image_size_out.height, sl.MAT_TYPE.U8_C4)
out_send = cv2.VideoWriter(
'appsrc is-live=false ! videoconvert ! video/x-raw,format=YUY2,width=1280,height=720,framerate=30/1 ! nvvidconv ! '
'nvv4l2h264enc insert-sps-pps=1 bitrate=9000000 ! video/x-h264, '
'stream-format=byte-stream ! rtph264pay config-interval=1 ! '
'udpsink host=(ip) port=3000',
cv2.CAP_GSTREAMER, 0, 30, (1280, 720), True)
if not out_send.isOpened():
print('VideoWriter not opened')
exit(0)
rtsp_port_num = 3000
server = GstRtspServer.RTSPServer.new()
server.props.service = "%d" % rtsp_port_num
server.attach(None)
codec = "H264"
updsink_port_num = 3000
factory = GstRtspServer.RTSPMediaFactory.new()
factory.set_launch(
"(udpsrc name=pay0 port=%d buffer-size=524288 caps=\"application/x-rtp, media=video, clock-rate=90000, encoding-name=(string)%s, payload=96 \" )"
% (updsink_port_num, codec))
factory.set_shared(True)
server.get_mount_points().add_factory("/ds-test", factory)
# output RTSP info
print("\n *** Launched RTSP Streaming at rtsp://localhost:%d/ds-test ***\n\n" % rtsp_port_num)
key = ' '
while True:
err = zed.grab(runtime)
if err == sl.ERROR_CODE.SUCCESS:
# Retrieve the left image in the fixed resolution
zed.retrieve_image(image_zed, sl.VIEW.LEFT, sl.MEM.CPU, image_size)
zed.retrieve_image(image_zed_out, sl.VIEW.LEFT)
# To recover data from sl.Mat to use it with OpenCV, use the get_data() method
# It returns a numpy array that can be used as a matrix with OpenCV
image_ocv = image_zed.get_data()
image_ocv_out = image_zed_out.get_data()
# Convert RGBA to RGB for out_send.write
image_RGB = cv2.cvtColor(image_ocv_out, cv2.COLOR_RGBA2RGB)
#cv2.imshow('Image', image_ocv)
# out_send in A RTSP stream
out_send.write(image_RGB)
key = cv2.waitKey(1)
cv2.destroyAllWindows()
zed.close()
print("\nFINISH")
if name == “main”:
main()