Используете Python и сеть Raspberry и nobile для прямой трансляции веб-камеры без больших задержек? - PullRequest
0 голосов
/ 08 февраля 2020

возможно ли написать в 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()
...