Skip to content

Instantly share code, notes, and snippets.

@ufxpri
Last active May 12, 2022 08:52
Show Gist options
  • Select an option

  • Save ufxpri/70f346c85c0d789a8ec5dedad02f754f to your computer and use it in GitHub Desktop.

Select an option

Save ufxpri/70f346c85c0d789a8ec5dedad02f754f to your computer and use it in GitHub Desktop.
python shared memory video transfer
from multiprocessing.shared_memory import SharedMemory
import cv2
# import time
import numpy as np
video_source = 'rtsp://admin:1234qwer!@192.168.50.51/ch1/stream1'
cap = cv2.VideoCapture(video_source)
ret, frame = cap.read()
if not ret: raise Exception("Failed to read video source")
frame_shape_shm = SharedMemory('frame_shape', create=True, size=frame.ndim*4)
frame_shape = np.ndarray(3, buffer=frame_shape_shm.buf, dtype='i4')
frame_shape[:] = frame.shape
frame_ready_shm = SharedMemory('frame_ready', create=True, size=1)
frame_ready = frame_ready_shm.buf
frame_buffer_shm = SharedMemory('frame_buffer', create=True, size=frame.nbytes)
frame_buffer = np.ndarray(frame_shape, buffer=frame_buffer_shm.buf, dtype=frame.dtype)
input("Press Enter to start...")
try:
while True:
cap.read(frame_buffer)
frame_ready[0]=1
# time.sleep(1)
except KeyboardInterrupt:
pass
cap.release()
from multiprocessing.shared_memory import SharedMemory
import cv2
# import time
import numpy as np
frame_shape_shm = SharedMemory('frame_shape')
frame_shape = np.ndarray([3], buffer=frame_shape_shm.buf, dtype='i4')
frame_ready_shm = SharedMemory('frame_ready')
frame_ready = frame_ready_shm.buf
frame_buffer_shm = SharedMemory('frame_buffer')
frame_buffer = np.ndarray(frame_shape, buffer=frame_buffer_shm.buf, dtype='u1')
try:
while True:
if frame_ready[0]==1:
frame_ready[0]=0
cv2.imshow('frame', frame_buffer)
cv2.waitKey(1)
except KeyboardInterrupt:
pass
frame_buffer_shm.close()
frame_buffer_shm.unlink()
frame_ready_shm.close()
frame_ready_shm.unlink()
frame_shape_shm.close()
frame_shape_shm.unlink()
@ufxpri
Copy link
Author

ufxpri commented May 12, 2022

copy of stack overflow answer

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment