djie1 / Media-Communications-Mesh

MCM enables efficient, low-latency media transport for media microservices.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

drawing Media Communications Mesh

build OpenSSF Scorecard BSD 3-Clause

Table of Contents

Overview

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 can work as a Data Plane component in "Service Mesh" for media applications. It provides "Shared Memory" APIs to all media microservices to abstract away the complexity of media transport.

Detailed information about Media Proxy can be found under the media-proxy subdirectory.

Key features:

  • Zero memory copy, ultra low-latency media transfers between containers.
  • Transport video stream with compressed (JPEG XS) or RAW (uncompressed) protocols.
  • Support multiple media transport protocols (SMPTE ST 2110, RTSP, ...).

MemIF

Media Proxy implements the shared memory buffer communications using MemIF protocol.

MCM SDK

The MCM SDK library can be used by microservice application to offload the media transport functionalities. It is designed to abstract the network transport functions for media data, and wrap the "libmemif" APIs to communicate with "Media Proxy".

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

Usage

Build & Install

The MCM source code can be compiled with the "build.sh" script.

$ ./build.sh

Run

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

If Media Proxy successfully launches up, it will open 2 port to listen on control messages.

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

All supported parameters can get with the program "helper" function.

$ 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 Media Proxy interfaces is missing. This feature is under development, and current implentation is weak to defend network attacks.

Support

If you have any problem during use this project, you could find support in following ways.

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.

About

MCM enables efficient, low-latency media transport for media microservices.

License:BSD 3-Clause "New" or "Revised" License


Languages

Language:C 77.7%Language:C++ 18.2%Language:CMake 2.3%Language:Dockerfile 1.0%Language:Shell 0.8%