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 Media Transport Library (MTL) and adds the necessary microservices control-plane communications infrastructure to implement any media control protocol.
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.
- 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, ...).
The Media Proxy leverages the MemIF protocol for implementing shared memory buffer communications.
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.
- Linux server (Intel Xeon processor recommended)
- Network Interface Card (NIC) compatible with DPDK
- Docker installed
-
Install Dependencies
- MTL: Follow the MTL setup guide for installation.
- gRPC: Refer to the gRPC documentation for installation instructions.
-
Clone the repository
$ git clone https://github.com/OpenVisualCloud/Media-Communications-Mesh.git
-
Navigate to the Media-Communications-Mesh directory
$ cd Media-Communications-Mesh
-
Build the Media Proxy binary (run on Host)
$ ./build.sh
-
Build the Media Proxy Docker image (run in Container)
$ ./build_docker.sh
By following these instructions, you'll be able to perform the basic build and installation of the Media Communications Mesh application.
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).
-
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 andchown
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.
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.
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.