https://github.com/cka3ka1337/python-udp-videostreaming
Система стриминга видеопотока от хоста к клиенту при помощи UDP протокола.
https://github.com/cka3ka1337/python-udp-videostreaming
cv2 mss opencv-python python sockets streaming-video udp udp-client udp-server
Last synced: about 1 month ago
JSON representation
Система стриминга видеопотока от хоста к клиенту при помощи UDP протокола.
- Host: GitHub
- URL: https://github.com/cka3ka1337/python-udp-videostreaming
- Owner: Cka3ka1337
- License: mit
- Created: 2025-03-22T21:04:12.000Z (about 1 month ago)
- Default Branch: main
- Last Pushed: 2025-03-22T22:02:28.000Z (about 1 month ago)
- Last Synced: 2025-03-22T22:22:49.802Z (about 1 month ago)
- Topics: cv2, mss, opencv-python, python, sockets, streaming-video, udp, udp-client, udp-server
- Language: Python
- Homepage:
- Size: 15.6 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Python-UDP-VideoStreaming
## **Description**
Это программа для стриминга экрана, использует UDP протокол для передачи фрагментов изображения.
Главная её особенность - разбивает изображение на фрагменты и отправляет клиенту только те, что изменились.В репозитории имеется 2 версии - pygame, cv2, это библиотеки, с помощью которых выводился собранный кадр на экран.
Pygame версия совместима с android устройствами, но необходимо будет дописать логику для расширения кадра до размеров экрана.## **Libraries**
* `mss==10.0.0`;
* `numpy==2.2.2`;
* `opencv-python==4.11.0.86`;
* `pygame==2.6.1`;## **Program pipeline**
1. **Работа с изображением**
1.1 Запуск потока для захвата.
1.2 Захват и запись в импровизированный буфер.
1.3 Разбиваем на N**2 фрагментов.
2. **Серверная часть**
2.1 Занимаем адрес.
2.2 Запоминаем пользователя, который отправит команду на подключение.
2.3 Из пунтка 1.3 отправляем только те фрагменты, которые не отправлялись ранее.
3. **Клиентская часть**
3.1 Отправляем серверу команду на подключение.
3.2 Принимаем фрагмент с координатами и вставляем его в импровизированный буфер.
3.3 Отображаем кадр с буфера.## **Other**
1. Необходимо указать свой адрес в клиенте и сервере.
2. В коде сервера есть подряд закомементированные строки, которые отвечают за отправку зелёных фрагментов, которые не изменились.
3. При написании своего метода захвата с использованием класса Capture, необходимо передать в super().init() 2 аргумента - длина буфера счётчика кадра и размер фрагментации (**!Важно!** при делении вашего размера экрана на размер фрагментации, результат должен быть челочисленным).