Skip to main content

Python library for RTSP streaming from Axis devices

Project description

ax-devil banner

ax-devil-rtsp

Python package for streaming RTSP video and AXIS Scene Metadata (referred to here as "application data") from Axis devices. Includes a Python API with callbacks and a CLI demo for quick inspection.

See also ax-devil-device-api and ax-devil-mqtt for related tools.


Install

On Linux, this package depends on native GStreamer, GI, and Cairo libraries.

sudo apt-get update
sudo apt-get install -y \
  gcc cmake pkg-config python3-dev libcairo2-dev libffi-dev libglib2.0-dev \
  libgirepository-2.0-dev gobject-introspection \
  python3-gi python3-gst-1.0 \
  gir1.2-gstreamer-1.0 gir1.2-gst-plugins-base-1.0 \
  gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
  gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav

pip install ax-devil-rtsp

System dependencies (Linux)

# Check your environment after install
ax-devil-rtsp doctor

Configure (optional)

Avoid repeating device credentials by exporting:

  • AX_DEVIL_TARGET_ADDR – Device IP or hostname
  • AX_DEVIL_TARGET_USER – Device username
  • AX_DEVIL_TARGET_PASS – Device password

CLI

Run ax-devil-rtsp --help for the full reference. Common flows:

  • Connect to a device (builds the RTSP URL for you):
    ax-devil-rtsp --device-ip 192.168.1.90 --device-username admin --device-password secret
    
  • Use an existing RTSP URL:
    ax-devil-rtsp --url "rtsp://admin:secret@192.168.1.90/axis-media/media.amp?analytics=polygon"
    
  • Switch modes without changing the URL:
    # Video only
    ax-devil-rtsp ... --only-video
    
    # Application data only
    ax-devil-rtsp ... --only-application-data
    
    # Disable RTP extension data
    ax-devil-rtsp ... --no-rtp-ext
    
  • Adjust the stream: --resolution 1280x720, --source 2, --latency 200 (only applies when building the URL without --url)
  • Optional helpers: --enable-video-processing, --brightness-adjustment 25, --manual-lifecycle (--url skips device-specific URL construction)
  • Check host dependencies and workaround status: ax-devil-rtsp doctor

Python API

import time
from multiprocessing import freeze_support
from ax_devil_rtsp import RtspDataRetriever, build_axis_rtsp_url


def on_video_data(payload):
    frame = payload["data"]
    print(f"Video frame: {frame.shape}")


def on_application_data(payload):
    print(f"Application data bytes: {len(payload['data'])}")


def on_session_start(payload):
    media = payload.get("caps_parsed", {}).get("media") or payload.get(
        "structure_parsed", {}
    ).get("media")
    print(f"Session start for {media}: {payload['stream_name']}")


def on_error(payload):
    print(f"Error: {payload['message']}")


def main():
    rtsp_url = build_axis_rtsp_url(
        ip="192.168.1.90",
        username="username",
        password="password",
        video_source=1,
        get_video_data=True,
        get_application_data=True,
        rtp_ext=True,
        resolution="640x480",
    )

    retriever = RtspDataRetriever(
        rtsp_url=rtsp_url,
        on_video_data=on_video_data,
        on_application_data=on_application_data,
        on_session_start=on_session_start,
        on_error=on_error,
        latency=100,
    )

    with retriever:
        print("Streaming... Press Ctrl+C to stop")
        while True:
            time.sleep(0.1)

# Expect `on_session_start` to run once for each RTP pad (typically
# one for video and one for application metadata). Use the parsed
# `media` field to tell them apart, as shown above.

if __name__ == "__main__":
    freeze_support()  # Required on Windows because the package forces 'spawn'
    main()
  • RtspVideoDataRetriever and RtspApplicationDataRetriever are available for video-only or metadata-only flows.
  • on_session_start is invoked once per RTP pad; the parsed media value distinguishes video vs. application data.
  • Because the package forces the multiprocessing start method to 'spawn', keep the if __name__ == "__main__": guard around your entry point (all platforms).

Development

python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

pytest
ruff check .
black src tests

Disclaimer

This project is an independent, community-driven implementation and is not affiliated with or endorsed by Axis Communications AB. For official APIs and development resources, see the Axis Developer Community.

License

MIT License - see LICENSE for details.

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

ax_devil_rtsp-0.2.2.tar.gz (38.0 kB view details)

Uploaded Source

Built Distribution

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

ax_devil_rtsp-0.2.2-py3-none-any.whl (42.8 kB view details)

Uploaded Python 3

File details

Details for the file ax_devil_rtsp-0.2.2.tar.gz.

File metadata

  • Download URL: ax_devil_rtsp-0.2.2.tar.gz
  • Upload date:
  • Size: 38.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for ax_devil_rtsp-0.2.2.tar.gz
Algorithm Hash digest
SHA256 5e6892d7faa56259826a7533c03888b7cc5b01ae9ace58d4779c3eeec51a40c1
MD5 9578fdbc480f3d09053d4fd0d198fc46
BLAKE2b-256 384b2ed69549f25a5d1da0cd6a7eba61c82ddcba19ba687491a96838602f9067

See more details on using hashes here.

File details

Details for the file ax_devil_rtsp-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: ax_devil_rtsp-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 42.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for ax_devil_rtsp-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b5e26e07e423d1615fccb1512649b4aaf5f61ca65b5b6dcdec023ba99d5e1ba5
MD5 f34b1cb749b51781d1fd8fb9d752e789
BLAKE2b-256 368114caf8bf0ea54bf98c998fb0d7df7293502b132423917d271eb316f11e4c

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