Skip to main content

libs to run Real-Time Annotation and Stream Processing server

Project description

rtaspi - Real-Time Annotation and Stream Processing

rtaspi to system do wykrywania, zarządzania i streamowania z lokalnych oraz zdalnych urządzeń audio i wideo. Umożliwia łatwe udostępnianie strumieni z kamer i mikrofonów w różnych protokołach (RTSP, RTMP, WebRTC).

Główne funkcje

  • Automatyczne wykrywanie lokalnych urządzeń wideo (kamery) i audio (mikrofony)
  • Wykrywanie zdalnych urządzeń sieciowych (kamery IP, mikrofony IP) poprzez protokoły ONVIF, UPnP i mDNS
  • Streamowanie z urządzeń lokalnych poprzez RTSP, RTMP i WebRTC
  • Proxy strumieni z urządzeń zdalnych
  • Transkodowanie strumieni w czasie rzeczywistym
  • Centralny system komunikacji między modułami (MCP - Module Communication Protocol)

Wymagania systemowe

  • Python 3.8 lub nowszy
  • FFmpeg 4.0 lub nowszy
  • GStreamer 1.14 lub nowszy (dla WebRTC)
  • NGINX z modułem RTMP (dla RTMP)

Zależności systemowe

Ubuntu/Debian:

sudo apt update
sudo apt install ffmpeg gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly nginx libnginx-mod-rtmp v4l-utils

macOS:

brew install ffmpeg gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly nginx

Windows:

Pobierz i zainstaluj:

Instalacja

  1. Sklonuj repozytorium:
git clone https://github.com/rt-asp/rtaspi.git
cd rtaspi
  1. Utwórz i aktywuj wirtualne środowisko:
python -m venv venv
source venv/bin/activate  # Linux/macOS
venv\Scripts\activate     # Windows
  1. Zainstaluj zależności:
pip install -r requirements.txt

Konfiguracja

Konfiguracja systemu znajduje się w pliku config.yaml. Domyślna konfiguracja zostanie utworzona automatycznie przy pierwszym uruchomieniu, możesz ją później dostosować do swoich potrzeb.

Przykładowa konfiguracja:

system:
  storage_path: 'storage'
  log_level: 'INFO'

local_devices:
  enable_video: true
  enable_audio: true
  auto_start: false
  scan_interval: 60
  rtsp_port_start: 8554
  rtmp_port_start: 1935
  webrtc_port_start: 8080

network_devices:
  enable: true
  scan_interval: 60
  discovery_enabled: true
  discovery_methods:
    - 'onvif'
    - 'upnp'
    - 'mdns'
  rtsp_port_start: 8654
  rtmp_port_start: 2935
  webrtc_port_start: 9080

streaming:
  rtsp:
    port_start: 8554
  rtmp:
    port_start: 1935
  webrtc:
    port_start: 8080
    stun_server: 'stun://stun.l.google.com:19302'
    turn_server: ''
    turn_username: ''
    turn_password: ''

Struktura projektu

rtaspi/
├── core/                       # Komponenty podstawowe
│   ├── config.py               # Obsługa konfiguracji
│   ├── logging.py              # Konfiguracja logowania
│   ├── mcp.py                  # Broker komunikacji międzymodułowej
│   └── utils.py                # Narzędzia pomocnicze
├── device_managers/            # Zarządzanie urządzeniami
│   ├── base.py                 # Podstawowa klasa menedżera
│   ├── local_devices.py        # Menedżer lokalnych urządzeń
│   ├── network_devices.py      # Menedżer zdalnych urządzeń sieciowych
│   └── utils/
│       ├── device.py           # Klasy bazowe dla urządzeń
│       ├── discovery.py        # Wykrywanie urządzeń (ONVIF, UPnP, mDNS)
│       └── protocols.py        # Obsługa protokołów streamingu
├── streaming/                  # Obsługa streamingu
│   ├── rtsp.py                 # Obsługa protokołu RTSP
│   ├── rtmp.py                 # Obsługa protokołu RTMP
│   ├── webrtc.py               # Obsługa protokołu WebRTC
│   └── utils.py                # Narzędzia pomocnicze do streamingu
├── tests/                      # Testy jednostkowe
│   ├── test_local_devices.py   # Testy menedżera lokalnych urządzeń
│   ├── test_network_devices.py # Testy menedżera zdalnych urządzeń
│   ├── test_discovery.py       # Testy wykrywania urządzeń
│   └── test_streaming.py       # Testy streamingu
├── main.py                     # Główny plik uruchomieniowy
├── config.yaml                 # Plik konfiguracyjny
└── requirements.txt            # Zależności projektu

Uruchomienie

  1. Uruchom główny skrypt:
python main.py
  1. Opcjonalnie, możesz podać ścieżkę do pliku konfiguracyjnego:
python main.py -c /sciezka/do/config.yaml

Protokół komunikacyjny MCP

System używa wewnętrznego protokołu komunikacyjnego MCP (Module Communication Protocol) do wymiany informacji między modułami. Protokół opiera się na wzorcu publikuj/subskrybuj (pub/sub), gdzie moduły mogą publikować wiadomości na określone tematy i subskrybować tematy, aby otrzymywać wiadomości.

Przykładowe tematy MCP:

  • local_devices/devices - Informacje o wykrytych lokalnych urządzeniach
  • local_devices/stream/started - Informacja o uruchomieniu strumienia z lokalnego urządzenia
  • network_devices/devices - Informacje o wykrytych urządzeniach sieciowych
  • command/local_devices/scan - Komenda do skanowania lokalnych urządzeń
  • command/network_devices/add_device - Komenda do dodania zdalnego urządzenia

Używanie API

System udostępnia API do zarządzania urządzeniami i strumieniami. Poniżej znajdują się przykłady użycia API w kodzie Python:

from core.mcp import MCPBroker, MCPClient

# Utwórz klienta MCP
broker = MCPBroker()
client = MCPClient(broker, client_id="my_client")

# Subskrybuj tematy
client.subscribe("local_devices/devices", handler=handle_devices)
client.subscribe("local_devices/stream/started", handler=handle_stream_started)

# Wysyłaj komendy
client.publish("command/local_devices/scan", {})

# Uruchom strumień z urządzenia
client.publish("command/local_devices/start_stream", {
    "device_id": "video:/dev/video0",
    "protocol": "rtsp"
})

# Dodaj zdalne urządzenie
client.publish("command/network_devices/add_device", {
    "name": "Kamera IP",
    "ip": "192.168.1.100",
    "port": 554,
    "username": "admin",
    "password": "admin",
    "type": "video",
    "protocol": "rtsp",
    "paths": ["cam/realmonitor"]
})

Testy

Uruchomienie testów jednostkowych:

pytest -v tests/

Licencja

Ten projekt jest udostępniany na licencji Apache 2. Zobacz plik LICENSE, aby uzyskać więcej informacji.

Autorzy

  • Zespół rtaspi

Współpraca

Zachęcamy do współpracy przy rozwoju projektu. Zapraszamy do zgłaszania problemów (issues) i propozycji zmian (pull requests).


  • Modular Documentation made possible by the FlatEdit project.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rtaspi-0.1.11.tar.gz (141.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rtaspi-0.1.11-py3-none-any.whl (47.9 kB view details)

Uploaded Python 3

File details

Details for the file rtaspi-0.1.11.tar.gz.

File metadata

  • Download URL: rtaspi-0.1.11.tar.gz
  • Upload date:
  • Size: 141.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for rtaspi-0.1.11.tar.gz
Algorithm Hash digest
SHA256 4a7f77678ed427614092dc62e0fbca16f8c3a9449a73a1bdae733aaa8b04f960
MD5 2770d325e8da744cbf3c8215e1c96032
BLAKE2b-256 35a47f199d66fb7ffc061f73b874de66cda2270d2a5d0c8e3d61be4c495961e6

See more details on using hashes here.

File details

Details for the file rtaspi-0.1.11-py3-none-any.whl.

File metadata

  • Download URL: rtaspi-0.1.11-py3-none-any.whl
  • Upload date:
  • Size: 47.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for rtaspi-0.1.11-py3-none-any.whl
Algorithm Hash digest
SHA256 26a7fe78b7c71a032410c081571420e9378a616f9c36c7670f51fbe9b4f85c81
MD5 3761195891dfaaf9a0918919b564fd9f
BLAKE2b-256 2684a9770d49bd4fed8c76b7da56219adb3ef5b17b86fd1a67965508faffd1f7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page