возможно ли написать в python скрипт потоковой веб-камеры для мобильных сетей. Самым большим требованием является то, что оно должно быть в реальном времени, насколько это возможно, без больших задержек и задержек. Я попробовал несколько стандартных примеров, которые я нашел в Google через UDP. Находясь в моем личном Wi-Fi, он идеально подходит для разрешения 320x240.
Но как только я переключаюсь на свой LTE Surfstick, где у меня загружается около 3-4 Мбит, картинка очень сильно запаздывает. У него большая задержка и много кадровых падений.
Интересно, почему, потому что 3 Мбит должно быть достаточно ...
Так что я думаю, что мне нужно какое-то сжатие? Или я упускаю что-то существенное здесь, и это даже невозможно без большой буферизации, что сделает невозможным в реальном времени?
Вот код, который я использую для малины:
import socket
import cv2 as cv
addr = ('myserver.xx', 1331)
buf = 512
width = 320
height = 240
cap = cv.VideoCapture(0)
cap.set(3, width)
cap.set(4, height)
cap.set(cv.CAP_PROP_FPS, 25)
cap.set(cv.CAP_PROP_FOURCC, cv.VideoWriter.fourcc('M','J','P','G'))
code = 'start'
code = ('start' + (buf - len(code)) * 'a').encode('utf-8')
if __name__ == '__main__':
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while(cap.isOpened()):
ret, frame = cap.read()
#frame = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
if ret:
s.sendto(code, addr)
data = frame.tostring()
for i in range(0, len(data), buf):
s.sendto(data[i:i+buf], addr)
# cv.imshow('send', frame)
# if cv.waitKey(1) & 0xFF == ord('q'):
# break
else:
break
# s.close()
# cap.release()
# cv.destroyAllWindows()