Skip to content

OpenVisualCloud/Media-Communications-Mesh

Repository files navigation

drawing Media Communications Mesh

Ubuntu Build OpenSSF Scorecard BSD 3-Clause

Table of Contents

Introduction

The Media Communications Mesh (MCM) enables efficient, low-latency media transport for media microservices for Edge, Edge-to-Cloud, and both private and public Cloud environments. The framework creates a secure, standards-based media data plane for inter-microservices communications using a new media proxy leveraging the Intel® Media Transport Library (IMTL) and adds the necessary microservices control-plane communications infrastructure to implement any media control protocol.

Media Proxy

The Media Proxy component in this project is responsible for transporting audio and video stream media data. It handles the routing and forwarding of media data between mesh nodes, ensuring low latency and efficient resource utilization.

It serves as a Data Plane component in a media application's Service Mesh. Media Proxy provides Shared Memory APIs to abstract the complexity of media transport.

More information about the Media Proxy component can be found in the media-proxy subdirectory.

Key Features

  • Enables zero memory copy and ultra-low-latency media transfers between containers.
  • Supports transport of video streams via compressed (JPEG XS) or RAW (uncompressed) protocols.
  • Offers compatibility with multiple media transport protocols (SMPTE ST 2110, RTSP, ...).

MemIF

The Media Proxy leverages the MemIF protocol for implementing shared memory buffer communications.

MCM SDK

The MCM SDK library is designed for microservice applications to offload media transport functionalities. By abstracting network transport functions for media data and wrapping the "libmemif" APIs, MCM SDK facilitates communication with "Media Proxy".

Detailed information about MCM SDK can be found in sdk directory.

Getting Started

Prerequisites

  • Linux server (Intel Xeon processor recommended)
  • Network Interface Card (NIC) compatible with DPDK
  • Docker installed

Basic Installation

  1. Install Dependencies

  2. Clone the repository

    $ git clone https://github.com/OpenVisualCloud/Media-Communications-Mesh.git
  3. Navigate to the Media Proxy directory

    $ cd Media-Communications-Mesh
  4. Build the Media Proxy binary (run on Host)

    $ ./build.sh
  5. Build the Media Proxy Docker image (run in Container)

    $ docker build -t media-proxy ./media-proxy

By following these instructions, you'll be able to perform the basic installation of the Media Communications Mesh application.

Usage

The program "media_proxy" and SDK library can be installed on system, after the "build.sh" script run successfully. And the "Media Proxy" can be run with below command.

$ media_proxy
INFO: TCP Server listening on 0.0.0.0:8002
INFO: gRPC Server listening on 0.0.0.0:8001

This will start the "Media Proxy" program. When the "Media Proxy" program launches successfully, it will open two ports to listen for control messages:

  • gRPC port (default 8001) is for service mesh control plane connection.
  • TCP port (default 8002) is for the connection with MCM SDK.

To get a list of all supported parameters, use the "helper" function with the following command:

$ media_proxy -h
Usage: media_proxy [OPTION]
-h, --help              Print this help and exit.
-d, --dev=dev_port      PCI device port (defaults: 0000:31:00.0).
-i, --ip=ip_address     IP address for media data transportation (defaults: 192.168.96.1).
-g, --grpc=port_number  Port number gRPC controller (defaults: 8001).
-t, --tcp=port_number   Port number for TCP socket controller (defaults: 8002).

Known Issues

  • There is one bug with default docker.io package installation (version 20.10.25-0ubuntu1~22.04.2) with Ubuntu 22.04.3 LTS. The USER command and chown command don't work as expected. It's preferred to install docker-ce package following instruction from docker community.

  • The Authentication function of the Media Proxy interfaces is currently missing. This feature is still under development, and the current implementation is weak in defending against network attacks.

Support

If you encounter any issues or need assistance, there are several ways to seek support:

  • Project Documents: Search for solutions in the project documents.
  • Discussions: Ask questions and seek help in the Discussions section on the project's GitHub page.
  • Issue Submission: Report bugs and specific issues by submitting them on the Issues page of the project's GitHub repository.

Before submitting an issue, please check the existing documentation and discussions to avoid duplication and streamline the support process.

We are here to help, so don't hesitate to reach out if you need assistance.

Note

This project is under development. All source code and features on the main branch are for the purpose of testing or evaluation and not production ready.