Skip to main content

Real-Time Annotation and Stream Processing Interface

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.22.tar.gz (165.2 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.22-py3-none-any.whl (99.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: rtaspi-0.1.22.tar.gz
  • Upload date:
  • Size: 165.2 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.22.tar.gz
Algorithm Hash digest
SHA256 3bb14eca62bce81d2e417bf4f9e240c3fbd3703a66e1f540074417035ce53dd7
MD5 c919aa100f0b4ed246472a88cf97c4f6
BLAKE2b-256 7de0f96ab1ee5bbdb0c328991ccda65a4241a05356c790c1e886f9fb1ecc3ece

See more details on using hashes here.

File details

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

File metadata

  • Download URL: rtaspi-0.1.22-py3-none-any.whl
  • Upload date:
  • Size: 99.4 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.22-py3-none-any.whl
Algorithm Hash digest
SHA256 f5cd3a78e62131ed573f47d8783448e84b71c52aadb7e0522302ff205507e9ed
MD5 19fc4ca4163b3d5261892946c42f79ff
BLAKE2b-256 c1f101d64881324a7f73f743e07b46ad938982c20e1d9644b359c2706ae1a18d

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