Skip to content
This repository has been archived by the owner on Mar 27, 2024. It is now read-only.

OpenDLV Microservice to convert an image in shared memory to a VPX frame (VP8 or VP9)

License

Notifications You must be signed in to change notification settings

chalmers-revere/opendlv-video-vpx-encoder

Repository files navigation

Moved to https://git.opendlv.org.

OpenDLV Microservice to encode images in I420 format into VP8 or VP9 for network broadcast

This repository provides source code to encode images in I420 format that are accessible via a shared memory area into VP8 or VP9 frames for the OpenDLV software ecosystem.

License: GPLv3

Table of Contents

Dependencies

You need a C++14-compliant compiler to compile this project.

The following dependency is part of the source distribution:

The following dependencies are downloaded and installed during the Docker-ized build:

Usage

To run this microservice using docker-compose, you can simply add the following section to your docker-compose.yml:

version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    video-vpx-encoder:
        image: chalmersrevere/opendlv-video-vpx-encoder-multi:v0.0.8
        restart: on-failure
        network_mode: "host"
        ipc: "host"
        volumes:
        - /tmp:/tmp
        command: "--cid=111 --name=video0.i420 --width=640 --height=480 --vp8"

As this microservice is connecting to another video frame-providing microservice via a shared memory area using SysV IPC, the docker-compose.yml file specifies the use of ipc:host. The parameter network_mode: "host" is necessary to broadcast the resulting frames into an OD4Session for OpenDLV. The folder /tmp is shared into the Docker container to attach to the shared memory area. The parameters to the application are:

  • --cid=111: Identifier of the OD4Session to broadcast the VP8 or VP9 frames to
  • --id=2: Optional identifier to set the senderStamp in broadcasted VP8 or VP9 frames in case of multiple instances of this microservice
  • --name=XYZ: Name of the shared memory area to attach to
  • --width=W: Width of the image in the shared memory area
  • --height=H: Height of the image in the shared memory area
  • --bitrate=B: desired bitrate (default: 800,000)
  • --gop=G: desired length of group of pictures (default: 10)
  • --vp8: use VP8 for encoding the frames
  • --vp9: use VP8 for encoding the frames

Build from sources on the example of Ubuntu 16.04 LTS

To build this software, you need cmake, C++14 or newer, libyuv, libvpx, and make. Having these preconditions, just run cmake and make as follows:

mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=Release ..
make && make test && make install

License

  • This project is released under the terms of the GNU GPLv3 License