• Stars
    star
    230
  • Rank 174,053 (Top 4 %)
  • Language
    Python
  • License
    Other
  • Created over 5 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A set of Docker containers with Streaming tools

Eyevinn Toolbox

The Eyevinn Toolbox is a set of Docker containers with tools that may come in handy. They are all free to use and if you have any suggestions feel free to create a ticket.

Tool Description Container
Loop TS Generate MPEG-TS stream over multicast or SRT by looping an MP4 file eyevinntechnology/toolbox-loopts
SRT Tx Transport stream over SRT eyevinntechnology/toolbox-srttx
SRT Rx Receive stream over SRT eyevinntechnology/toolbox-srtrx
RTMP Rx Receive RTMP and stream over multicast eyevinntechnology/toolbox-rtmprx
Mosaic TS Render a 2x2 or 3x3 mosaic in MPEG-TS from 4 or 9 HLS sources eyevinntechnology/toolbox-mosaicts
HLS 2 TS Pull a live HLS stream and output to multicast TS eyevinntechnology/toolbox-hls2ts
HLS 2 RTMP Pull a live HLS stream and re-stream to multiple RTMP destinations. eyevinntechnology/toolbox-hls2rtmp
HLS 2 SRT Pull a live HLS stream and transmit over SRT eyevinntechnology/toolbox-hls2srt
SRT 2 RTMP Receive an SRT stream and re-stream to multiple RTMP destinations. eyevinntechnology/toolbox-srt2rtmp
RTMP 2 SRT Receive an RTMP stream and transmit over SRT. eyevinntechnology/toolbox-rtmp2srt
VOD Transcode Quickly transcode video file to a set of different bitrates eyevinntechnology/toolbox-transcode

Loop input file and output MPEG-TS multicast

$ docker run --rm -v $PWD:/mnt eyevinntechnology/toolbox-loopts IN.mp4 udp://239.0.0.1.1234?pkt_size=1316

where $PWD is your working directory where you have your input file.

The following options are available:

$ docker run --rm -v $PWD:/mnt eyevinntechnology/toolbox-loopts -h
usage: loopts.py [-h] [--workdir WORKDIR] [--framerate FRAMERATE]
                 [--kfinterval KFINTERVAL] [--bitrate BITRATE] [--hevc]
                 [--withtc] [--withaudio] [--nologo] [--useflv]
                 [--multibitrate]
                 inputfile multicast

Loop an MP4 file and output to MPEG-TS multicast

positional arguments:
  inputfile
  multicast

optional arguments:
  -h, --help              show this help message and exit
  --workdir WORKDIR       specify a working directory, default is /mnt
  --framerate FRAMERATE   output framerate (DEFAULT 25fps)
  --kfinterval KFINTERVAL specify keyframe interval (DEFAULT 2 sec)
  --bitrate BITRATE       specify video bitrate in kbps (e.g. 2500)
  --hevc                  use HEVC encoded output
  --withtc                burn in local timecode in video output
  --withaudio             adds a test tone on the audio track
  --nologo                remove logo
  --useflv                use FLV for RTMP output
  --multibitrate          output multiple video bitrates

To test this locally on your computer (Mac + VLC) assuming the file to loop is called IN.mp4 and in your working directory

$ docker run --rm -p 9998:9998/udp -v $PWD:/mnt eyevinntechnology/toolbox-loopts IN.mp4 udp://host.docker.internal:9998?pkt_size=1316 --withtc

Then open VLC with the following network address: udp://@127.0.0.1:9998

Output MPEG-TS over SRT

To use SRT (Secure Reliable Transport) instead of multicast you can run loopts as an SRT listener.

docker run --rm -p 9998:9998/udp -v $PWD:/mnt eyevinntechnology/toolbox-loopts IN.mp4 "srt://0.0.0.0:9998?pkt_size=1316&mode=listener" --withtc

Then open VLC with the following network address: srt://@127.0.0.1:9998

Output FLV over RTMP

To use RTMP instead of multicast you can run loopts and push with RTMP

docker run --rm -it -v $PWD:/mnt eyevinntechnology/toolbox-loopts --useflv IN.mp4 "rtmp://live.twitch.tv/app/live_*****"

Receive MPEG-TS over SRT and restream over multicast

Use the srtrx tool to receive an MPEG-TS stream over SRT (Secure Reliable Transport) and restream over multicast. This can be used in the following scenario:

+-----------+                     +-----------------+                       +------------+
|           |                     |                 |                       |            |
|  SRT Tx   | ===> INTERNET ===>  |  toolbox-srtrx  | ====> MULTICAST ====> | TRANSCODER |
|           |                     |                 |                       |            |
+-----------+                     +-----------------+                       +------------+

Assuming that the SRT Tx is running in listener mode and can be reached on 10.0.110.178:9998 you start the restreamer with the following commmand:

$ docker run --rm -p 1234:1234/udp eyevinntechnology/toolbox-srtrx 10.0.110.178:9998 239.0.0.1:1234

This setup can be emulated by running loopts tool as the SRT Tx and VLC as the transcoder.

$ docker run --rm -p 9998:9998/udp -v $PWD:/mnt eyevinntechnology/toolbox-loopts IN.mp4 "srt://0.0.0.0:9998?pkt_size=1316&mode=listener" --withtc
$ docker run --rm -p 9999:9999/udp eyevinntechnology/toolbox-srtrx 10.0.110.178:9998 host.docker.internal:9999

where 10.0.110.178 is the IP of your computer running the loopts container.

$ docker run --rm eyevinntechnology/toolbox-srtrx -h
usage: srtrx.py [-h] [--listener] [--with-debug] inputaddress outputaddress

Receive MPEG-TS over SRT and restream over Multicast

positional arguments:
  inputaddress
  outputaddress

optional arguments:
  -h, --help     show this help message and exit
  --listener     run as SRT listener
  --passthrough  for low latency skip the unmux and mux step.

Receive RTMP and restream over SRT

The srttx tool can be used to receive a local RTMP stream and restream to an SRT Rx over the Internet.

+------------------+                     +-----------------+                       +------------+
|  Wirecast &      |                     |                 |                       |            |
|  toolbox-srttx   | ===> INTERNET ===>  |  toolbox-srtrx  | ====> MULTICAST ====> | TRANSCODER |
|  <IP-TX>         |                     |  <IP-RX>        |                       |            |
+------------------+                     +-----------------+                       +------------+

On the transmitter side with for example Wirecast as producing the stream first start the srttx tool.

$ docker run --rm -p 1935:1935 eyevinntechnology/toolbox-srttx:0.2.4 input_stream <IP-RX>:9998 --passthrough

Then point the Wirecast / OBS output to rtmp://localhost/live/input_stream

On the receiver side you then run the following:

$ docker run --rm -p 9998:9998/udp -p <MULTICAST-PORT>:<MULTICAST-PORT>/udp eyevinntechnology/toolbox-srtrx --listener --passthrough 0.0.0.0:9998 <MULTICAST>:<MULTICAST-PORT>`
$ docker run --rm eyevinntechnology/toolbox-srttx:0.2.4 -h
usage: srttx.py [-h] [--inputtype INPUTTYPE] [--listener] [--passthrough]
                inputstream outputaddress

Receive RTMP and stream over SRT

positional arguments:
  inputstream
  outputaddress

optional arguments:
  -h, --help     show this help message and exit
  --inputtype INPUTTYPE type of input [rtmp|mpegts], default is rtmp  
  --listener     run as SRT listener
  --passthrough  passthrough input and skip encoding process

MPEG-TS as a source

The srttx tool can also take an MPEG-TS as a source. Instead run the following command on the transmitter side. The receiver side as before.

$ docker run --rm eyevinntechnology/toolbox-srttx:0.2.4 <MULTICAST>:<MULTICAST-PORT> <IP-RX>:9998 --passthrough --inputtype=mpegts

Receive RTMP and restream over Multicast

Use the rtmprx tool to receive RTMP and restream MPEG-TS over multicast if you want to use RTMP as the transport protocol with a live transcoder that for example only supports MPEG-TS multicast.

On the receiver side run the following command:

$ docker run --rm -p 1935:1935 -p <MULTICAST-PORT>:<MULTICAST-PORT>/udp eyevinntechnology/toolbox-rtmprx input_stream <MULTICAST>:<MULTICAST-PORT> --passthrough
$ docker run --rm eyevinntechnology/toolbox-rtmprx -h
usage: rtmprx.py [-h] [--passthrough] [--with-debug] inputstream outputaddress

Receive RTMP and restream over Multicast

positional arguments:
  inputstream
  outputaddress

optional arguments:
  -h, --help     show this help message and exit
  --passthrough  passthrough input and skip encoding process

Render a Mosaic from HLS sources

Use the mosaicts tool to render a 2x2 or 3x3 mosaic of HLS sources.

$ docker run --rm eyevinntechnology/toolbox-mosaicts -h
usage: mosaicts.py [-h] [--port PORT] [--multicast MULTICAST] [--with-debug]
                   layout urlfile

Take multiple HLS sources and render a mosaic in MPEG-TS

positional arguments:
  layout                2x2|3x3
  urlfile               A text file containing URLs to HLS sources. One source
                        per line.

optional arguments:
  -h, --help            show this help message and exit
  --port PORT
  --multicast MULTICAST
                        Use multicast address specified here instead of SRT

To read the list of URLs from STDIN:

$ docker run --rm -i -p 9998:9998/udp eyevinntechnology/toolbox-mosaicts 2x2 - < urls.txt

Pull a live HLS stream and output to multicast TS

Use the hls2ts tool to pull an HLS live stream and output to multicast TS.

$ docker run --rm eyevinntechnology/toolbox-hls2ts -h
usage: hls2ts.py [-h] [--srt] [--bitrate BITRATE] [--with-debug]
                 hlsurl outputaddress

Pull live HLS and output to multicast TS

positional arguments:
  hlsurl
  outputaddress

optional arguments:
  -h, --help         show this help message and exit
  --srt              use SRT as transport protocol
  --bitrate BITRATE  which bitrate to use
  --with-debug

Example:

docker run --rm eyevinntechnology/toolbox-hls2ts:0.1.0 HLSURL <MULTICAST>:<MULTICAST-PORT>

Re-stream SRT to multiple RTMP destinations

Use the srt2rtmp tool to receive an SRT stream and re-stream to multiple RTMP destinations.

Example:

docker run --rm -p 1234:1234/udp eyevinntechnology/toolbox-srt2rtmp:0.1.1 0.0.0.0:1234 <RTMPURL1> <RTMPURL2>

Pull a live HLS stream and output to multiple RTMP destinations

Use the hls2rtmp tool to pull a live HLS stream and re-stream to multiple RTMP destinations.

Example:

docker run --rm eyevinntechnology/toolbox-hls2rtmp:0.1.3 HLSURL <RTMPURL1> <RTMPURL2>

Pull a live HLS stream and output to SRT

Use the hls2srt tool to pull a live HLS stream and make available over SRT.

Example:

docker run -d --restart always -p 1234:1234/udp eyevinntechnology/toolbox-hls2srt:0.1.1 HLSURL 0.0.0.0:1234

Listen for an RTMP stream and output to SRT

Use the rtmp2srt tool to receive an RTMP stream and transmit over SRT.

Example:

docker run --rm -p 1935:1935 -p 1234:1234/udp eyevinntechnology/toolbox-rtmp2srt:0.1.1 <STREAMKEY> <IP>:1234

By deafult in SRT listener mode, to use SRT as a client:

docker run --rm -p 1935:1935 eyevinntechnology/toolbox-rtmp2srt:0.1.0 --caller <STREAMKEY> <IP>:1234

VOD Transcode

Quickly transcode video file to a set of different bitrates.

docker run --rm -v $PWD:/media eyevinntechnology/toolbox-transcode:0.1.0 --framerate 24 videofile-720p.mp4

and it will generate three GOP-aligned MP4 files prepared to be chunked into segments.

About Eyevinn Technology

Eyevinn Technology is an independent consultant firm specialized in video and streaming. Independent in a way that we are not commercially tied to any platform or technology vendor.

At Eyevinn, every software developer consultant has a dedicated budget reserved for open source development and contribution to the open source community. This give us room for innovation, team building and personal competence development. And also gives us as a company a way to contribute back to the open source community.

Want to know more about Eyevinn and how it is to work here. Contact us at [email protected]!

More Repositories

1

streaming-onboarding

New to streaming and don't know where to start? This is the place for you!
442
star
2

mp4ff

Library and tools for parsing and writing MP4 files including video, audio and subtitles. The focus is on fragmented files. Includes mp4ff-info, mp4ff-encrypt, mp4ff-decrypt and other tools.
Go
435
star
3

channel-engine

Open Source FAST Channel Engine library based on VOD2Live technology
JavaScript
113
star
4

webrtc-player

WebRTC (recvonly) player
TypeScript
97
star
5

whip

Client and Server modules for WebRTC HTTP Ingestion Protocol (WHIP)
TypeScript
94
star
6

node-srt

Nodejs bindings for Secure Reliable Transport SDK
JavaScript
89
star
7

srt-whep

SRT to WHEP (WebRTC)
Rust
74
star
8

ott-multiview

This is a web based multiview screen for HLS and MPEG-DASH streams based on hls.js and Shaka Player.
JavaScript
60
star
9

hls-download

Download HLS and convert to MP4
Python
46
star
10

hls-vodtolive

NPM library to generate HLS Live from HLS VOD
JavaScript
39
star
11

chaos-stream-proxy

Add some chaos to your HTTP streams to validate player behaviour
TypeScript
37
star
12

hls-ts-js

HLS MPEG-TS parser library in Javascript
JavaScript
36
star
13

hls-to-dash

Open source packager and tools to rewrap live HLS to live MPEG DASH
Python
35
star
14

hls-monitor

Service to monitor one or more HLS stream(s) for errors and inconsistencies.
TypeScript
35
star
15

web-player

HLS and MPEG-DASH player for web
TypeScript
32
star
16

auto-subtitles

Automatically generate subtitles from an input audio or video file using OpenAI Whisper
TypeScript
30
star
17

srt-webrtc

JavaScript
29
star
18

srt-whip-gateway

Open Source SRT WHIP Gateway
TypeScript
24
star
19

dash-validator-js

MPEG DASH validator JS library
JavaScript
22
star
20

autovmaf

Toolkit to automatically encode multiple bitrates and perform automated VMAF measurements on all of them.
TypeScript
22
star
21

dash-mpd

MPEG DASH MPD library based on XML Schema for completeness.
Go
19
star
22

hls-relay

Script to pull HLS stream from one origin and push to another origin
Python
18
star
23

html-player

HTML5 Player with support for HLS, MPEG-DASH and Smooth Streaming
JavaScript
17
star
24

hls-splice

NPM library to splice HLS VOD
JavaScript
17
star
25

hls-origin-scripts

Scripts to manipulate HLS manifests at origin or edge server
Python
17
star
26

test-adserver

An adserver implementation for testing frameworks
JavaScript
15
star
27

mp2ts-tools

Tools for MPEG-2 TS
Go
14
star
28

docker-dash-packager

Open source MPEG DASH packager for live and VOD
ApacheConf
14
star
29

hls-pull-push

NPM library to pull HLS Live and Push to a another origin
TypeScript
14
star
30

http-streaming-samples

Just a collection of HTTP streaming samples
13
star
31

VideoToolboxMacOSExample

Swift
13
star
32

whep-video-component

A web component for WHEP WebRTC video playback
JavaScript
12
star
33

whip-mpegts

MPEG-TS WHIP client
C++
12
star
34

fmp4-js

A Javascript library to parse ISO Base Media File Format (MPEG-4 Part 12)
JavaScript
12
star
35

docker-toolbelt

A Docker container filled with pre-built versions of video streaming related tools
Dockerfile
11
star
36

media-event-filter

Interpreter for HTML5 media events
TypeScript
11
star
37

hls-recorder

NPM library to record live HLS
TypeScript
11
star
38

swift-srt

C++
11
star
39

tsgen-svc

Eyevinn Transport Stream Generator
JavaScript
10
star
40

preview-hls-service

Service to generate preview assets from HLS
TypeScript
10
star
41

rtsp-hls-push

JavaScript
9
star
42

wrtc-egress

Server endpoint NPM library for standardized WebRTC based streaming
TypeScript
9
star
43

scte35-inserter

Tool to insert SCTE35 messages at a configurable interval
C++
9
star
44

docker-fast

Open Source Sustainable FAST Channel Engine
TypeScript
8
star
45

demand-side-platform

An open source implementation of a Demand-Side Platform (DSP) to serve for testing and educational purpose
JavaScript
8
star
46

hls-proxy

NPM library for proxying HLS requests
TypeScript
7
star
47

srt-monitor

Open Source SRT Web Monitor
TypeScript
7
star
48

supply-side-platform

An open source implementation of a Supply-Side Platform (SSP) to serve for testing and educational purpose
JavaScript
7
star
49

autovmaf-preprocessing

Tool that analyses a video via a combination of motion and sharpness to determine the most suitable parts to be used for VMAF analysis. https://github.com/Eyevinn/autovmaf
Python
7
star
50

docker-2dash

A Docker container to pre-package MPEG DASH on demand content
Python
6
star
51

vod-to-live

A python library to generate Live HLS from VOD
Python
6
star
52

function-scenes

A serverless media function to detect scene changes and extract keyframes in a video file or a stream.
JavaScript
6
star
53

whip-whep

Run WHIP/WHEP service locally
6
star
54

continue-watching-api

Example of a simple implementation to build a continue watching api on top of Redis
JavaScript
6
star
55

cast-receiver

A basic custom cast receiver that can be configured using environment variables. The main intention is to be able to quickly spin up a cast receiver without having to write any code.
JavaScript
6
star
56

function-probe

Serverless Media Function to obtain Media Info of a video file or video stream
JavaScript
6
star
57

tv.eyevinn.technology

JavaScript
5
star
58

vast-info

Parse a VAST or VMAP to show valuable information in a readable format
JavaScript
5
star
59

action-eks-kubectl

GitHub Action for interacting with EKS vended kubectl (k8s)
Dockerfile
5
star
60

video-event-filter

A simple module to filter the events sent from the video element in a way that align with what is, most probably, expected from an analytics perspective.
TypeScript
5
star
61

hls-playlist-parser

A Javascript library to parse Hls playlists
JavaScript
5
star
62

multiview-sync

A simple library to play multiple videos in sync
TypeScript
5
star
63

lambda-stitch

A Lambda function to insert ads in VOD
JavaScript
5
star
64

channel-engine-mosaic

Eyevinn Channel Engine Multiviewer
TypeScript
5
star
65

codem-client

Simple clients to codem-transcoder
JavaScript
5
star
66

player-analytics-specification

TypeScript
4
star
67

hls-duration

NPM library to calculate duration of an HLS
TypeScript
4
star
68

webrtc-http-playback-protocol

WebRTC-HTTP playback protocol specification
HTML
4
star
69

lambda-hls-rewrite

Lambda function for rewriting HLS manifests
TypeScript
4
star
70

docker-html5player

A Docker containerized HTML5 player based on Shaka Player
JavaScript
4
star
71

eye-recommender

A simple similarity based recommendation engine and NPM module built on top of Node.js and Redis.
JavaScript
4
star
72

safari-bitrate-monitor

Simple approach to monitor bitrate changes in Safari, on the native video element
TypeScript
4
star
73

tvos-swift-example-app

Swift
4
star
74

whpp-client

WebRTC HTTP Playback Protocol client library
TypeScript
4
star
75

iaf-plugin-aws

Ingest application framework plugin for upload and transcode in AWS
TypeScript
4
star
76

lambda-protect-hls

Lambda function for handling restricted access to HLS
TypeScript
4
star
77

av1-player

Eyevinn AV1 player
C
4
star
78

hls-repeat

NPM library to repeat an HLS VOD and create a new HLS VOD
JavaScript
4
star
79

intercom-manager

Open Source Intercom Solution
TypeScript
4
star
80

eyevinn-player

Throttled video player to test video streams
JavaScript
4
star
81

schedule-service

Service for automatic schedule creation
TypeScript
3
star
82

mpd-whep

TypeScript
3
star
83

id3.js

Simple ID3 parser in Javascript
JavaScript
3
star
84

vmaf-analyze

Python
3
star
85

is-drm-supported

HTML5 MSE DRM support detection library
TypeScript
3
star
86

video-quality-monitor

A small package to monitor buffering and dropped frames on the video element, reporting it back as state updates into a sent in callback.
TypeScript
3
star
87

hls-cutsegment

A web app that lets you insert a cut into a segment, which is then cut into two new segments.
JavaScript
3
star
88

ftpdownload

Python FTP download client - more stable than FTP.retrbinary
Python
3
star
89

node-webrtc

WebRTC util modules for NodeJS
JavaScript
3
star
90

lambda-vast-transformer

Lambda function for modifying a VAST/VMAP XML on-the-fly
TypeScript
3
star
91

autovmaf-api

API to orchestrate AutoVMAF jobs
TypeScript
3
star
92

docker-serve

A simple Python based HTTP server that sets CORS allow headers. Useful for streaming from files on local computer
Python
3
star
93

channel-engine-multiview

A multiview frontend for Eyevinn Channel Engine
JavaScript
3
star
94

csai-manager

Simple class to conduct and manage the relation between content playback and an ad experience applied on top - client side.
TypeScript
3
star
95

adxchange-engine

Eyevinn Adxchange Engine is a microservice placed between the server-side ad-insertion component and the adserver or SSP
JavaScript
3
star
96

hls-vodtovod

NPM library to concatenate multiple HLS VODs into a new VOD
TypeScript
3
star
97

live-encoding

Open Source Live encoder based on ffmpeg
TypeScript
3
star
98

QR-generator

QR code generatror
Go
2
star
99

encore-test-profiles

Some basic transcoding profiles for encore
2
star
100

videomapp

Plot videos in a Youtube playlist on a map
JavaScript
2
star