rocket-welder-sdk


Namerocket-welder-sdk JSON
Version 1.1.25 PyPI version JSON
download
home_pagehttps://github.com/modelingevolution/rocket-welder-sdk
SummaryHigh-performance video streaming SDK for RocketWelder services using ZeroBuffer IPC
upload_time2025-09-05 18:22:06
maintainerNone
docs_urlNone
authorModelingEvolution
requires_python>=3.8
licenseMIT
keywords video streaming gstreamer ipc shared-memory zerobuffer computer-vision
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Rocket Welder SDK

[![NuGet](https://img.shields.io/nuget/v/RocketWelder.SDK.svg)](https://www.nuget.org/packages/RocketWelder.SDK/)
[![PyPI](https://img.shields.io/pypi/v/rocket-welder-sdk.svg)](https://pypi.org/project/rocket-welder-sdk/)
[![vcpkg](https://img.shields.io/badge/vcpkg-rocket--welder--sdk-blue)](https://github.com/modelingevolution/rocket-welder-sdk-vcpkg-registry)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

Multi-language client libraries for interacting with RocketWelder video streaming services.

## Overview

The Rocket Welder SDK provides high-performance video streaming capabilities for containerized applications. It offers native client libraries in C++, C#, and Python, enabling seamless integration with RocketWelder video streaming pipelines.

## Features

- **High Performance**: Optimized for minimal latency and maximum throughput
- **Multi-Language Support**: Native libraries for C++, C#, and Python  
- **Protocol Flexibility**: Support for multiple streaming protocols via connection strings
- **Container-Ready**: Designed for Docker/Kubernetes deployments
- **Simple Integration**: Easy-to-use API with minimal configuration

## Client Libraries

| Language | Package Manager | Package Name |
|----------|----------------|--------------|
| C++ | vcpkg | rocket-welder-sdk |
| C# | NuGet | RocketWelder.SDK |
| Python | pip | rocket-welder-sdk |

## Connection String Format

The SDK uses URI-style connection strings to specify data sources and protocols:

```
protocol://[host[:port]]/[path][?param1=value1&param2=value2]
```

### Supported Protocols

#### Shared Memory (High-Performance Local)
```
shm://<buffer_name>
shm://<buffer_name>?buffer_size=10MB&metadata_size=1024KB
shm://<buffer_name>?mode=duplex&buffer_size=10MB
```

**Optional Parameters:**
- `mode`: Communication mode (`duplex` for bidirectional/mutable, `oneway` for one-way communication; default: `duplex`)
- `buffer_size`: Size of the data buffer (default: 20MB, supports units: B, KB, MB, GB)
- `metadata_size`: Size of the metadata buffer (default: 4KB, supports units: B, KB, MB)

#### MJPEG over HTTP
```
mjpeg+http://192.168.1.100:8080
mjpeg+http://camera.local:8080
```

#### MJPEG over TCP
```
mjpeg+tcp://192.168.1.100:5000
mjpeg+tcp://camera.local:5000
```

### Environment Variable

When deployed in a Rocket Welder container, the connection string is provided via:
```bash
CONNECTION_STRING=shm://camera_feed?buffer_size=20MB&metadata_size=4KB
```

## Installation

### C++ with vcpkg

Configure the custom registry in your `vcpkg-configuration.json`:
```json
{
  "registries": [
    {
      "kind": "git",
      "repository": "https://github.com/modelingevolution/rocket-welder-sdk-vcpkg-registry",
      "baseline": "YOUR_BASELINE_HERE",
      "packages": ["rocket-welder-sdk"]
    }
  ]
}
```

Then install:
```bash
# Install via vcpkg
vcpkg install rocket-welder-sdk

# Or integrate with CMake
find_package(rocket-welder-sdk CONFIG REQUIRED)
target_link_libraries(your_app PRIVATE rocket-welder-sdk::rocket-welder-sdk)
```

### C# with NuGet

[![NuGet Downloads](https://img.shields.io/nuget/dt/RocketWelder.SDK.svg)](https://www.nuget.org/packages/RocketWelder.SDK/)

```bash
# Package Manager Console
Install-Package RocketWelder.SDK

# .NET CLI
dotnet add package RocketWelder.SDK

# PackageReference in .csproj
<PackageReference Include="RocketWelder.SDK" Version="1.0.*" />
```

### Python with pip

[![PyPI Downloads](https://img.shields.io/pypi/dm/rocket-welder-sdk.svg)](https://pypi.org/project/rocket-welder-sdk/)

```bash
# Install from PyPI
pip install rocket-welder-sdk

# Install with optional dependencies
pip install rocket-welder-sdk[opencv]  # Includes OpenCV
pip install rocket-welder-sdk[all]     # All optional dependencies

# Install specific version
pip install rocket-welder-sdk==1.0.0
```

## Quick Start

### C++ Quick Start
```cpp
#include <rocket_welder/client.hpp>

auto client = rocket_welder::Client::from_connection_string("shm://my-buffer");
client.on_frame([](cv::Mat& frame) {
    // Process frame
});
client.start();
```

### C# Quick Start  
```csharp
using RocketWelder.SDK;

var client = RocketWelderClient.FromConnectionString("shm://my-buffer");
client.Start(frame => {
    // Process frame
});
```

### Python Quick Start
```python
import rocket_welder_sdk as rw

client = rw.Client.from_connection_string("shm://my-buffer")

@client.on_frame
def process(frame):
    # Process frame
    pass

client.start()
```

## Usage Examples

### C++

```cpp
#include <rocket_welder/client.hpp>
#include <opencv2/opencv.hpp>

int main(int argc, char* argv[]) {
    // Best practice: use from() which:
    // 1. Checks environment variable (CONNECTION_STRING)
    // 2. Overrides with command line args if provided
    auto client = rocket_welder::Client::from(argc, argv);
    
    // Or specify connection string directly
    auto client = rocket_welder::Client::from_connection_string(
        "shm://camera_feed?buffer_size=20MB&metadata_size=4KB"
    );
    
    // Process frames as OpenCV Mat (mutable by default)
    client.on_frame([](cv::Mat& frame) {
        // Add overlay text - zero copy!
        cv::putText(frame, "Processing", cv::Point(10, 30),
                    cv::FONT_HERSHEY_SIMPLEX, 1.0, cv::Scalar(0, 255, 0), 2);
        
        // Add timestamp overlay
        auto now = std::chrono::system_clock::now();
        auto time_t = std::chrono::system_clock::to_time_t(now);
        cv::putText(frame, std::ctime(&time_t), cv::Point(10, 60),
                    cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(255, 255, 255), 1);
    });
    
    client.start();
    return 0;
}
```

### C#

```csharp
using RocketWelder.SDK;
using OpenCvSharp;

class Program
{
    static void Main(string[] args)
    {
        // Best practice: use From() which:
        // 1. Checks environment variable (CONNECTION_STRING)
        // 2. Overrides with command line args if provided
        var client = RocketWelderClient.From(args);
        
        // Or specify connection string directly
        var client = RocketWelderClient.FromConnectionString(
            "shm://camera_feed?buffer_size=20MB&metadata_size=4KB"
        );
        
        int frameCount = 0;
        
        // Process frames as OpenCV Mat
        client.Start((Mat frame) => 
        {
            // Add overlay text
            Cv2.PutText(frame, "Processing", new Point(10, 30),
                       HersheyFonts.HersheySimplex, 1.0, new Scalar(0, 255, 0), 2);
            
            // Add frame counter overlay
            Cv2.PutText(frame, $"Frame: {frameCount++}", new Point(10, 60),
                       HersheyFonts.HersheySimplex, 0.5, new Scalar(255, 255, 255), 1);
        });
    }
}
```

### Python

```python
import rocket_welder_sdk as rw
import cv2
import sys

# Best practice: use from_args() which:
# 1. Checks environment variable (CONNECTION_STRING)
# 2. Overrides with command line args if provided
client = rw.Client.from_args(sys.argv)

# Or specify connection string directly
client = rw.Client.from_connection_string("shm://camera_feed?buffer_size=20MB&metadata_size=4KB")

# Process frames as numpy arrays (OpenCV compatible)
@client.on_frame
def process_frame(frame: np.ndarray):
    # Add overlay text - zero copy!
    cv2.putText(frame, "Processing", (10, 30),
                cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 255, 0), 2)
    
    # Add timestamp overlay
    from datetime import datetime
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    cv2.putText(frame, timestamp, (10, 60),
                cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1)

client.start()

# Or use iterator pattern
for frame in client.frames():
    # Each frame is a numpy array
    print(f"Received frame: {frame.shape}")
```

## Docker Integration

### C++ Dockerfile

```dockerfile
FROM ubuntu:22.04 AS builder

# Install build tools and OpenCV
RUN apt-get update && apt-get install -y \
    build-essential \
    cmake \
    libopencv-dev

# Install Rocket Welder SDK via vcpkg
RUN vcpkg install rocket-welder-sdk

# Build your application
WORKDIR /app
COPY . .
RUN cmake . && make

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y libopencv-dev
COPY --from=builder /app/my_app /usr/local/bin/
CMD ["my_app"]
```

### C# Dockerfile

```dockerfile
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS builder

WORKDIR /app
COPY *.csproj ./
RUN dotnet restore

COPY . ./
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/runtime:8.0
WORKDIR /app
COPY --from=builder /app/out .
CMD ["dotnet", "MyApp.dll"]
```

### Python Dockerfile

```dockerfile
FROM python:3.11-slim

# Install OpenCV and other dependencies
RUN apt-get update && apt-get install -y \
    python3-opencv \
    && rm -rf /var/lib/apt/lists/*

# Install Rocket Welder SDK and ML frameworks
RUN pip install --no-cache-dir \
    rocket-welder-sdk \
    numpy \
    ultralytics  # Example: YOLO

WORKDIR /app
COPY . .

CMD ["python", "app.py"]
```

## Protocol Details

### Shared Memory Protocol (shm://)

High-performance local data transfer between processes:

- **Performance**: Minimal latency, maximum throughput
- **Use Cases**: Local processing, multi-container applications on same host

### MJPEG over HTTP (mjpeg+http://)

Motion JPEG streaming over HTTP:

- **Performance**: Good balance of quality and bandwidth
- **Advantages**: Wide compatibility, firewall-friendly, browser support
- **Use Cases**: Network streaming, web applications, remote monitoring

### MJPEG over TCP (mjpeg+tcp://)

Motion JPEG streaming over raw TCP socket:

- **Performance**: Lower latency than HTTP, less protocol overhead
- **Advantages**: Direct socket connection, minimal overhead, suitable for local networks
- **Use Cases**: Low-latency streaming, embedded systems, industrial applications

## Building from Source

### Prerequisites

- CMake 3.20+
- C++20 compiler
- Python 3.8+ (for Python bindings)
- .NET 6.0+ SDK (for C# bindings)
- OpenCV 4.0+ (optional, for image processing)

### Build Instructions

```bash
git clone https://github.com/modelingevolution/rocket-welder-sdk.git
cd rocket-welder-sdk

# Build all libraries
mkdir build && cd build
cmake ..
make -j$(nproc)

# Run tests
ctest

# Install
sudo make install
```

## API Reference

Detailed API documentation for each language:

- [C++ API Reference](docs/cpp-api.md)
- [C# API Reference](docs/csharp-api.md)
- [Python API Reference](docs/python-api.md)

## Examples

See the [examples](examples/) directory for complete working examples:

- [Simple Frame Reader](examples/simple-reader/)
- [Frame Processor](examples/frame-processor/)
- [Multi-Stream Handler](examples/multi-stream/)
- [Performance Benchmark](examples/benchmark/)

## Contributing

Contributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Support

- **Issues**: [GitHub Issues](https://github.com/modelingevolution/rocket-welder-sdk/issues)
- **Discussions**: [GitHub Discussions](https://github.com/modelingevolution/rocket-welder-sdk/discussions)
- **Documentation**: [https://docs.rocket-welder.io](https://docs.rocket-welder.io)

## Technical Details

### GStreamer Integration

The SDK integrates with GStreamer pipelines through specialized elements:
- **zerosink**: Simple sink element for writing video frames
- **zerobuffer**: Processing element with bidirectional communication using DuplexChannel

### Zero-Copy Buffer Technology

For shared memory protocol, the SDK uses:
- **C++**: Zero-Copy-Buffer (via vcpkg) - Returns cv::Mat with zero-copy access
- **C#**: ZeroBuffer (via NuGet) - Returns OpenCvSharp.Mat with zero-copy access
- **Python**: zero-buffer (via pip) - Returns numpy arrays compatible with OpenCV

The SDK leverages DuplexChannel for bidirectional communication, enabling:
- Zero-copy frame access as OpenCV Mat objects
- In-place frame processing without memory allocation
- Direct memory mapping between producer and consumer
- Efficient metadata passing alongside frame data

This technology enables direct memory access without data duplication, providing maximum performance for local processing scenarios.

## Acknowledgments

- GStreamer Project for the multimedia framework
- ZeroBuffer contributors for the zero-copy buffer implementation

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/modelingevolution/rocket-welder-sdk",
    "name": "rocket-welder-sdk",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "ModelingEvolution <info@modelingevolution.com>",
    "keywords": "video, streaming, gstreamer, ipc, shared-memory, zerobuffer, computer-vision",
    "author": "ModelingEvolution",
    "author_email": "ModelingEvolution <info@modelingevolution.com>",
    "download_url": "https://files.pythonhosted.org/packages/fd/92/4186d6fb9052b0adf90af369041445f43113738dc10b279cdbcee54a9684/rocket_welder_sdk-1.1.25.tar.gz",
    "platform": null,
    "description": "# Rocket Welder SDK\n\n[![NuGet](https://img.shields.io/nuget/v/RocketWelder.SDK.svg)](https://www.nuget.org/packages/RocketWelder.SDK/)\n[![PyPI](https://img.shields.io/pypi/v/rocket-welder-sdk.svg)](https://pypi.org/project/rocket-welder-sdk/)\n[![vcpkg](https://img.shields.io/badge/vcpkg-rocket--welder--sdk-blue)](https://github.com/modelingevolution/rocket-welder-sdk-vcpkg-registry)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nMulti-language client libraries for interacting with RocketWelder video streaming services.\n\n## Overview\n\nThe Rocket Welder SDK provides high-performance video streaming capabilities for containerized applications. It offers native client libraries in C++, C#, and Python, enabling seamless integration with RocketWelder video streaming pipelines.\n\n## Features\n\n- **High Performance**: Optimized for minimal latency and maximum throughput\n- **Multi-Language Support**: Native libraries for C++, C#, and Python  \n- **Protocol Flexibility**: Support for multiple streaming protocols via connection strings\n- **Container-Ready**: Designed for Docker/Kubernetes deployments\n- **Simple Integration**: Easy-to-use API with minimal configuration\n\n## Client Libraries\n\n| Language | Package Manager | Package Name |\n|----------|----------------|--------------|\n| C++ | vcpkg | rocket-welder-sdk |\n| C# | NuGet | RocketWelder.SDK |\n| Python | pip | rocket-welder-sdk |\n\n## Connection String Format\n\nThe SDK uses URI-style connection strings to specify data sources and protocols:\n\n```\nprotocol://[host[:port]]/[path][?param1=value1&param2=value2]\n```\n\n### Supported Protocols\n\n#### Shared Memory (High-Performance Local)\n```\nshm://<buffer_name>\nshm://<buffer_name>?buffer_size=10MB&metadata_size=1024KB\nshm://<buffer_name>?mode=duplex&buffer_size=10MB\n```\n\n**Optional Parameters:**\n- `mode`: Communication mode (`duplex` for bidirectional/mutable, `oneway` for one-way communication; default: `duplex`)\n- `buffer_size`: Size of the data buffer (default: 20MB, supports units: B, KB, MB, GB)\n- `metadata_size`: Size of the metadata buffer (default: 4KB, supports units: B, KB, MB)\n\n#### MJPEG over HTTP\n```\nmjpeg+http://192.168.1.100:8080\nmjpeg+http://camera.local:8080\n```\n\n#### MJPEG over TCP\n```\nmjpeg+tcp://192.168.1.100:5000\nmjpeg+tcp://camera.local:5000\n```\n\n### Environment Variable\n\nWhen deployed in a Rocket Welder container, the connection string is provided via:\n```bash\nCONNECTION_STRING=shm://camera_feed?buffer_size=20MB&metadata_size=4KB\n```\n\n## Installation\n\n### C++ with vcpkg\n\nConfigure the custom registry in your `vcpkg-configuration.json`:\n```json\n{\n  \"registries\": [\n    {\n      \"kind\": \"git\",\n      \"repository\": \"https://github.com/modelingevolution/rocket-welder-sdk-vcpkg-registry\",\n      \"baseline\": \"YOUR_BASELINE_HERE\",\n      \"packages\": [\"rocket-welder-sdk\"]\n    }\n  ]\n}\n```\n\nThen install:\n```bash\n# Install via vcpkg\nvcpkg install rocket-welder-sdk\n\n# Or integrate with CMake\nfind_package(rocket-welder-sdk CONFIG REQUIRED)\ntarget_link_libraries(your_app PRIVATE rocket-welder-sdk::rocket-welder-sdk)\n```\n\n### C# with NuGet\n\n[![NuGet Downloads](https://img.shields.io/nuget/dt/RocketWelder.SDK.svg)](https://www.nuget.org/packages/RocketWelder.SDK/)\n\n```bash\n# Package Manager Console\nInstall-Package RocketWelder.SDK\n\n# .NET CLI\ndotnet add package RocketWelder.SDK\n\n# PackageReference in .csproj\n<PackageReference Include=\"RocketWelder.SDK\" Version=\"1.0.*\" />\n```\n\n### Python with pip\n\n[![PyPI Downloads](https://img.shields.io/pypi/dm/rocket-welder-sdk.svg)](https://pypi.org/project/rocket-welder-sdk/)\n\n```bash\n# Install from PyPI\npip install rocket-welder-sdk\n\n# Install with optional dependencies\npip install rocket-welder-sdk[opencv]  # Includes OpenCV\npip install rocket-welder-sdk[all]     # All optional dependencies\n\n# Install specific version\npip install rocket-welder-sdk==1.0.0\n```\n\n## Quick Start\n\n### C++ Quick Start\n```cpp\n#include <rocket_welder/client.hpp>\n\nauto client = rocket_welder::Client::from_connection_string(\"shm://my-buffer\");\nclient.on_frame([](cv::Mat& frame) {\n    // Process frame\n});\nclient.start();\n```\n\n### C# Quick Start  \n```csharp\nusing RocketWelder.SDK;\n\nvar client = RocketWelderClient.FromConnectionString(\"shm://my-buffer\");\nclient.Start(frame => {\n    // Process frame\n});\n```\n\n### Python Quick Start\n```python\nimport rocket_welder_sdk as rw\n\nclient = rw.Client.from_connection_string(\"shm://my-buffer\")\n\n@client.on_frame\ndef process(frame):\n    # Process frame\n    pass\n\nclient.start()\n```\n\n## Usage Examples\n\n### C++\n\n```cpp\n#include <rocket_welder/client.hpp>\n#include <opencv2/opencv.hpp>\n\nint main(int argc, char* argv[]) {\n    // Best practice: use from() which:\n    // 1. Checks environment variable (CONNECTION_STRING)\n    // 2. Overrides with command line args if provided\n    auto client = rocket_welder::Client::from(argc, argv);\n    \n    // Or specify connection string directly\n    auto client = rocket_welder::Client::from_connection_string(\n        \"shm://camera_feed?buffer_size=20MB&metadata_size=4KB\"\n    );\n    \n    // Process frames as OpenCV Mat (mutable by default)\n    client.on_frame([](cv::Mat& frame) {\n        // Add overlay text - zero copy!\n        cv::putText(frame, \"Processing\", cv::Point(10, 30),\n                    cv::FONT_HERSHEY_SIMPLEX, 1.0, cv::Scalar(0, 255, 0), 2);\n        \n        // Add timestamp overlay\n        auto now = std::chrono::system_clock::now();\n        auto time_t = std::chrono::system_clock::to_time_t(now);\n        cv::putText(frame, std::ctime(&time_t), cv::Point(10, 60),\n                    cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(255, 255, 255), 1);\n    });\n    \n    client.start();\n    return 0;\n}\n```\n\n### C#\n\n```csharp\nusing RocketWelder.SDK;\nusing OpenCvSharp;\n\nclass Program\n{\n    static void Main(string[] args)\n    {\n        // Best practice: use From() which:\n        // 1. Checks environment variable (CONNECTION_STRING)\n        // 2. Overrides with command line args if provided\n        var client = RocketWelderClient.From(args);\n        \n        // Or specify connection string directly\n        var client = RocketWelderClient.FromConnectionString(\n            \"shm://camera_feed?buffer_size=20MB&metadata_size=4KB\"\n        );\n        \n        int frameCount = 0;\n        \n        // Process frames as OpenCV Mat\n        client.Start((Mat frame) => \n        {\n            // Add overlay text\n            Cv2.PutText(frame, \"Processing\", new Point(10, 30),\n                       HersheyFonts.HersheySimplex, 1.0, new Scalar(0, 255, 0), 2);\n            \n            // Add frame counter overlay\n            Cv2.PutText(frame, $\"Frame: {frameCount++}\", new Point(10, 60),\n                       HersheyFonts.HersheySimplex, 0.5, new Scalar(255, 255, 255), 1);\n        });\n    }\n}\n```\n\n### Python\n\n```python\nimport rocket_welder_sdk as rw\nimport cv2\nimport sys\n\n# Best practice: use from_args() which:\n# 1. Checks environment variable (CONNECTION_STRING)\n# 2. Overrides with command line args if provided\nclient = rw.Client.from_args(sys.argv)\n\n# Or specify connection string directly\nclient = rw.Client.from_connection_string(\"shm://camera_feed?buffer_size=20MB&metadata_size=4KB\")\n\n# Process frames as numpy arrays (OpenCV compatible)\n@client.on_frame\ndef process_frame(frame: np.ndarray):\n    # Add overlay text - zero copy!\n    cv2.putText(frame, \"Processing\", (10, 30),\n                cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 255, 0), 2)\n    \n    # Add timestamp overlay\n    from datetime import datetime\n    timestamp = datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\")\n    cv2.putText(frame, timestamp, (10, 60),\n                cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1)\n\nclient.start()\n\n# Or use iterator pattern\nfor frame in client.frames():\n    # Each frame is a numpy array\n    print(f\"Received frame: {frame.shape}\")\n```\n\n## Docker Integration\n\n### C++ Dockerfile\n\n```dockerfile\nFROM ubuntu:22.04 AS builder\n\n# Install build tools and OpenCV\nRUN apt-get update && apt-get install -y \\\n    build-essential \\\n    cmake \\\n    libopencv-dev\n\n# Install Rocket Welder SDK via vcpkg\nRUN vcpkg install rocket-welder-sdk\n\n# Build your application\nWORKDIR /app\nCOPY . .\nRUN cmake . && make\n\nFROM ubuntu:22.04\nRUN apt-get update && apt-get install -y libopencv-dev\nCOPY --from=builder /app/my_app /usr/local/bin/\nCMD [\"my_app\"]\n```\n\n### C# Dockerfile\n\n```dockerfile\nFROM mcr.microsoft.com/dotnet/sdk:8.0 AS builder\n\nWORKDIR /app\nCOPY *.csproj ./\nRUN dotnet restore\n\nCOPY . ./\nRUN dotnet publish -c Release -o out\n\nFROM mcr.microsoft.com/dotnet/runtime:8.0\nWORKDIR /app\nCOPY --from=builder /app/out .\nCMD [\"dotnet\", \"MyApp.dll\"]\n```\n\n### Python Dockerfile\n\n```dockerfile\nFROM python:3.11-slim\n\n# Install OpenCV and other dependencies\nRUN apt-get update && apt-get install -y \\\n    python3-opencv \\\n    && rm -rf /var/lib/apt/lists/*\n\n# Install Rocket Welder SDK and ML frameworks\nRUN pip install --no-cache-dir \\\n    rocket-welder-sdk \\\n    numpy \\\n    ultralytics  # Example: YOLO\n\nWORKDIR /app\nCOPY . .\n\nCMD [\"python\", \"app.py\"]\n```\n\n## Protocol Details\n\n### Shared Memory Protocol (shm://)\n\nHigh-performance local data transfer between processes:\n\n- **Performance**: Minimal latency, maximum throughput\n- **Use Cases**: Local processing, multi-container applications on same host\n\n### MJPEG over HTTP (mjpeg+http://)\n\nMotion JPEG streaming over HTTP:\n\n- **Performance**: Good balance of quality and bandwidth\n- **Advantages**: Wide compatibility, firewall-friendly, browser support\n- **Use Cases**: Network streaming, web applications, remote monitoring\n\n### MJPEG over TCP (mjpeg+tcp://)\n\nMotion JPEG streaming over raw TCP socket:\n\n- **Performance**: Lower latency than HTTP, less protocol overhead\n- **Advantages**: Direct socket connection, minimal overhead, suitable for local networks\n- **Use Cases**: Low-latency streaming, embedded systems, industrial applications\n\n## Building from Source\n\n### Prerequisites\n\n- CMake 3.20+\n- C++20 compiler\n- Python 3.8+ (for Python bindings)\n- .NET 6.0+ SDK (for C# bindings)\n- OpenCV 4.0+ (optional, for image processing)\n\n### Build Instructions\n\n```bash\ngit clone https://github.com/modelingevolution/rocket-welder-sdk.git\ncd rocket-welder-sdk\n\n# Build all libraries\nmkdir build && cd build\ncmake ..\nmake -j$(nproc)\n\n# Run tests\nctest\n\n# Install\nsudo make install\n```\n\n## API Reference\n\nDetailed API documentation for each language:\n\n- [C++ API Reference](docs/cpp-api.md)\n- [C# API Reference](docs/csharp-api.md)\n- [Python API Reference](docs/python-api.md)\n\n## Examples\n\nSee the [examples](examples/) directory for complete working examples:\n\n- [Simple Frame Reader](examples/simple-reader/)\n- [Frame Processor](examples/frame-processor/)\n- [Multi-Stream Handler](examples/multi-stream/)\n- [Performance Benchmark](examples/benchmark/)\n\n## Contributing\n\nContributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Support\n\n- **Issues**: [GitHub Issues](https://github.com/modelingevolution/rocket-welder-sdk/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/modelingevolution/rocket-welder-sdk/discussions)\n- **Documentation**: [https://docs.rocket-welder.io](https://docs.rocket-welder.io)\n\n## Technical Details\n\n### GStreamer Integration\n\nThe SDK integrates with GStreamer pipelines through specialized elements:\n- **zerosink**: Simple sink element for writing video frames\n- **zerobuffer**: Processing element with bidirectional communication using DuplexChannel\n\n### Zero-Copy Buffer Technology\n\nFor shared memory protocol, the SDK uses:\n- **C++**: Zero-Copy-Buffer (via vcpkg) - Returns cv::Mat with zero-copy access\n- **C#**: ZeroBuffer (via NuGet) - Returns OpenCvSharp.Mat with zero-copy access\n- **Python**: zero-buffer (via pip) - Returns numpy arrays compatible with OpenCV\n\nThe SDK leverages DuplexChannel for bidirectional communication, enabling:\n- Zero-copy frame access as OpenCV Mat objects\n- In-place frame processing without memory allocation\n- Direct memory mapping between producer and consumer\n- Efficient metadata passing alongside frame data\n\nThis technology enables direct memory access without data duplication, providing maximum performance for local processing scenarios.\n\n## Acknowledgments\n\n- GStreamer Project for the multimedia framework\n- ZeroBuffer contributors for the zero-copy buffer implementation\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "High-performance video streaming SDK for RocketWelder services using ZeroBuffer IPC",
    "version": "1.1.25",
    "project_urls": {
        "Homepage": "https://github.com/modelingevolution/rocket-welder-sdk",
        "Issues": "https://github.com/modelingevolution/rocket-welder-sdk/issues",
        "Repository": "https://github.com/modelingevolution/rocket-welder-sdk.git"
    },
    "split_keywords": [
        "video",
        " streaming",
        " gstreamer",
        " ipc",
        " shared-memory",
        " zerobuffer",
        " computer-vision"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2062d6fbf97e5aa09e0a7f3b43c79fa604b51524fbc1887d0e74773632c1e9fa",
                "md5": "6129daf2fe838485cfadbc131bb83ff6",
                "sha256": "33b8b20b6460888bacea5be9ede7a1e406c2deb25ba1a48e7a6273f6b366c992"
            },
            "downloads": -1,
            "filename": "rocket_welder_sdk-1.1.25-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "6129daf2fe838485cfadbc131bb83ff6",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 22504,
            "upload_time": "2025-09-05T18:22:05",
            "upload_time_iso_8601": "2025-09-05T18:22:05.346416Z",
            "url": "https://files.pythonhosted.org/packages/20/62/d6fbf97e5aa09e0a7f3b43c79fa604b51524fbc1887d0e74773632c1e9fa/rocket_welder_sdk-1.1.25-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fd924186d6fb9052b0adf90af369041445f43113738dc10b279cdbcee54a9684",
                "md5": "374b444c32991bed42dbc6a3946e16db",
                "sha256": "f3f849d0919567647d3ae2d327abab10e9daabc34ff428f1b14362bd727b7a00"
            },
            "downloads": -1,
            "filename": "rocket_welder_sdk-1.1.25.tar.gz",
            "has_sig": false,
            "md5_digest": "374b444c32991bed42dbc6a3946e16db",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 57307,
            "upload_time": "2025-09-05T18:22:06",
            "upload_time_iso_8601": "2025-09-05T18:22:06.251170Z",
            "url": "https://files.pythonhosted.org/packages/fd/92/4186d6fb9052b0adf90af369041445f43113738dc10b279cdbcee54a9684/rocket_welder_sdk-1.1.25.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-05 18:22:06",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "modelingevolution",
    "github_project": "rocket-welder-sdk",
    "github_not_found": true,
    "lcname": "rocket-welder-sdk"
}
        
Elapsed time: 0.95445s