Skip to content

Latest commit

 

History

History
150 lines (90 loc) · 7.01 KB

Readme.md

File metadata and controls

150 lines (90 loc) · 7.01 KB

EncodingEncapsulation repository

Tools

This repository contains the tools used to stream Point Clouds and TVMs. The repository contains the following applications:

  • bin2dash: dynamic-libraryfication of the encoding/streaming part of pcl2dash.
  • bin2dash_app: a sample app looping on compressed data using the bin2dash DLL. This is a demo app: it does not expose all parameters and is not intended to be used on production.
  • pcl2dash: capture point cloud ((device or watermelon stub) or uncompressed file), encode (CWI encoder), package (fMP4) and stream (MPEG-DASH). Used for Pilot#1.

These tools are available both for Windows 64 bits and Linux 64 bits.

Building this repository is not possible. Contact Motion Spell.

Transmission chain (MPEG-DASH)

The transmission chain includes 3 components:

How to setup your pilot: easy as 1-2-3!

Pilots constraints reminder

Pilot#1: two users. Local origin which requires to open ports locally.

Pilot #1 live from capture or raw PLY

  1. Capture: automatic fake content, plug your hardware, or download some PLY samples (see above).
  2. HTTP server. Please install the low latency HTTP node.js server (https://github.com/gpac/node-gpac-dash + node gpac-dash.js -segment-marker eods -no-marker-write -chunk-media-segments).
  3. Launch pcl2dash (cf below for details) e.g. ./pcl2dash.exe -t 1 -n -1 -s 10000 -p cwi.json folder/to/loot-ply-uncompressed. If you give no folder or URL, the capture will start from the camera.

/!\ Don't use pcl2dash with compressed data!

/!\ pcl2dash sleeps 100ms between two PLY readings to avoid I/O saturation. bin2dash_app exposes customs parameters for regulation.

Pilot #2 live from capture or raw PLY

  1. Capture: automatic fake content, plug your hardware, or download some PLY samples (see above).
  2. HTTP server. Please install SFU (https://baltig.viaccess-orca.com:8443/VRT/deliverymcu-group/DeliveryMCU/releases) ; you can install it locally or remotely.
  3. Launch pcl2dash (cf below for details) e.g. ./pcl2dash.exe -t 1 -n -1 -s 10000 -p cwi.json folder/to/loot-ply-uncompressed -u http://localhost:9000/. If you give no folder or URL, the capture will start from the camera.

/!\ Don't user node-gpac-dash with multiple users, this will generate delays!

/!\ Don't use pcl2dash with compressed data!

/!\ pcl2dash sleeps 100ms between two PLY readings to avoid I/O saturation. bin2dash_app exposes customs parameters for regulation.

Pilot #1 and #2 live from encoded CWIPC data

  1. HTTP server depending on your Pilot (node-gpac-htpp for Pilot#1 or Evanescent for Pilot#2).
  2. Launch bin2dash_app e.g. ./bin2dash_app.exe -s 100 folder/to/cwipc_loot-compressed. If you give no folder (all pilots) or URL (Pilot#2), the capture will start from the camera.

Developer tools and information

Test content

Compressed (cwipc) and uncompressed (PLY) point cloud data can be found at https://baltig.viaccess-orca.com:8443/VRT/nativeclient-group/cwipc_test/releases

pcl2dash is able to generate live content from a connected Realsense2 or from some fake content if you do not have a Realsense2 connected. See below for command-line usage.

Replay a MPEG-DASH session (pcl2dash only)

  1. Generate a capture session (e.g. 1234 frames): ./pcl2dash.exe -t 1 -n 1234 -s 10000 -p cwi.json folder/to/ply_uncompressed. If you want to stop the capture, press ctrl-c once and wait for the tool to exit.
  2. HTTP server for replay: node gpac-dash.js. Omit the low latency paremeters as they will stuck your downloads.

Developers: convert a MPEG-DASH session into a file and replay

The SUB supports playback from both HTTP for MPEG-DASH and from MP4 files.

To generate a MP4 file from a DASH session, concatenate the initialization segment with your media segment e.g. cat `ls *init.mp4` `ls -v *.m4s` > session.mp4.

How to use bin2dash_app.exe (standalone)

Usage: bin2dash_app [options, see below] [file_pattern]
    -d, --durationInMs                      0: segmentTimeline, otherwise SegmentNumber [default=10000]
    -s, --sleepAfterFrameInMs               Sleep time in ms after each frame, used for regulation [default=0]
    -u, --publishURL                        Publish URL ending with a separator. If empty files are written and the node-gpac-http server should be used, otherwise use the Evanescent SFU. [default=""]

./bin2dash_app.exe -s 30 -u http://vrt-pcl2dash.viaccess-orca.com/ folder/to/cwipc_loot-compressed

API

See https://baltig.viaccess-orca.com:8443/VRT/nativeclient-group/EncodingEncapsulation/blob/dev/src/apps/bin2dash/bin2dash.hpp.

How to use pcl2dash (standalone)

This is useful when you want to generate data ready to be streamed (e.g. to be copied on the HTTP server). When one closes a pcl2dash session cleanly (i.e. no more frames or ctrl-c, not by killing the process or windows), the live session is automatically transformed into an on-demande session ready to replay.

Capture source

If you give pcl2dash a URL, pcl2dash will open this URL. Otherwise it will try to get the data from the capture device (MultiFrame.dll from CWI) which contains the "watermelon" fallback.

Examples

Only 10 frames: ./pcl2dash.exe -t 1 -n 10

Infinite frames: ./pcl2dash.exe -t 1 -n -1

Segment duration of 10 seconds: ./pcl2dash.exe -t 1 -n -1 -s 10000

Fake delay in seconds (to avoir clock-instability near realtime): ./pcl2dash.exe -t 1 -n -1 -s 10000 -d 1

Custom encoding parameters: ./pcl2dash.exe -t 1 -n -1 -s 10000 -p cwi.json

with cwi.json

{
  "do_inter_frame": false,
  "gop_size": 1,
  "exp_factor": 0.0,
  "octree_bits": 7,
  "jpeg_quality": 85,
  "macroblock_size": 16
  "tilenumber": 0,
  "voxelsize": 0.0,
}

Stream a custom folder: ./pcl2dash.exe -t 1 -n -1 -s 10000 -p cwi.json folder/to/ply_uncompressed

Stream to a server: ./pcl2dash.exe -t 1 -n -1 -s 10000 -p cwi.json -u http://vrt-pcl2dash.viaccess-orca.com:9000/ folder/to/ply_uncompressed

Stubbing

The pcl2dash capture (Signals user-module) is stubbed twice. If the multiFrame.dll is found, then it is used either with a capture device when found or with the watermelon sample. If multiFrame.dll is not found then the capture will use the path pattern from the command-line.

bin2dash allows to easily stub the capture and encoding.

Current limitations, legacy, and perspective

Multi-threaded works on Signals' side but needs to be tested with the CWI libraries.

The program holds on a specific cwi branch of Signals that contains non-conformant DASH modifications for compatibility with the i2cat GUB software. Not needed anymore but requires additional work.