What is the correct way to stream frames over udp sink using gstreamer in python?

I am reading frames from a USB camera using gstreamer (v4l2) and reading it using cv2.videoCapture. It works fine. I want to dump these frames using udp sink and gi. What is the correct way to achieve it? Following is my code, it works but after few minutes I get hugh lag (it might be network related issue). Kindly let me what is the SOP to follow while doing this. Thanks!

import cv2
import gi
import numpy as np
import time

gi.require_version("Gst", "1.0")
from gi.repository import Gst, GObject, GLib

Gst.init(None)
pipeline_str = ("appsrc name=source ! tiovxdlcolorconvert ! video/x-raw,format=NV12 ! queue ! jpegenc ! multipartmux boundary=spionisto ! rndbuffersize max=65000 ! udpsink host=127.0.0.1 port=8081 sync=false")
pipeline = Gst.parse_launch(pipeline_str)
source = pipeline.get_by_name("source")
pipeline.set_state(Gst.State.PLAYING)

##### gst input pipeline
gst_pipeline = 'v4l2src device=/dev/video-usb-cam0 io-mode=2 ! image/jpeg, width=1280, height=720 ! jpegdec ! tiovxdlcolorconvert ! video/x-raw, format=NV12 ! \
    tiovxmultiscaler ! video/x-raw, format=NV12 ! tiovxdlcolorconvert ! video/x-raw, format=RGB ! videoconvert ! video/x-raw, format=BGR ! queue ! appsink'

cap = cv2.VideoCapture(gst_pipeline, cv2.CAP_GSTREAMER)

try:
    while True:
        ret, frame = cap.read()
        if not ret:
            break

        t1 = time.time()
        raw_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

# #############################################################
        gst_buffer = Gst.Buffer.new_wrapped(raw_frame.tobytes())
############################################################
        caps = Gst.caps_from_string(f"video/x-raw,format=RGB,width={frame.shape[1]},height={frame.shape[0]}")
        source.set_property("caps", caps)
        source.emit("push-buffer", gst_buffer)

        t2 = time.time()

        print('FPS : ', 1/(t2-t1))

except KeyboardInterrupt:
    pass
finally:
    # Stop the pipeline and clean up
    pipeline.set_state(Gst.State.NULL)
    cap.release()