JSON File Based Configuration

This is the more versatile means of configuring Stream-Server. Any number of inputs and outputs may be created and connected.

A JSON formatted file must be referenced at startup using the -c, --config option. The JSON file is broken into sections, one per component to initialize.

Here is a sample test.json configuration file:

{
    "Inputs": [{
        "name": "CrossProcInput1",
        "type": "CrossProcInput",
        "output": "EGLOutputOutput1",
        "socket": "/tmp/ss/ss1"
    },{
        "name": "CrossPartInput1",
        "type": "CrossPartInput",
        "output": "EGLOutputOutput2",
        "port": "8889"
    }],
    "Outputs": [{
        "name": "EGLOutputOutput1",
        "type": "EGLOutputOutput",
        "windowSize": "1920X1080",
        "dispNo": "1",
        "layerNo": "0"
    },{
        "name": "EGLOutputOutput2",
        "type": "EGLOutputOutput",
        "windowSize": "1080X720",
        "dispNo": "1",
        "layerNo": "1"
    }]
 }

There are two input and two output plugins that are mentioned in the test.json configuration file above. Between the two input plugins, one is of type CrossProcInput and the second is of type CrossPartInput, named CrossProcInput1 and CrossPartInput1, respectively. For the output plugins, both plugins have the same type, EGLOutputOutput, and are named EGLOutputOutput1 and EGLOutputOutput2.

For the input plugin, there is a parameter called output that tells the Stream-Server to form mapping between input and output plugins. CrossProcInput1 and CrossPartInput1 connect to EGLOutputOutput1 and EGLOutputOutput2, respectively.

The CrossprocInput1 plugin uses path /tmp/ss to create a socket name ss1 to listen for the incoming cross-process EGLStream producer client's connect request. In the same manner, CrossPartInput1 uses port number 8889 to bind a socket and uses this socket to listen for the incoming cross-partition EGLStream producer client's connect request.

  1. Create socket path on VM0:
    $ mkdir –p /tmp/ss/
  2. Run Stream-Server with this configuration file on VM0:
    $ stream-server -c test.json
  3. Run first producer on VM0:
    $ ./gears –eglstreamsocket /tmp/ss/ss1 -1
  4. Run second producer on VM1, assuming the IP of VM0 as seen by VM1 is 12.0.0.1:
    $ ./gears –proctype producer –ip 12.0.0.1 –port 8889 -1

The first gears instance is now connected to CrossProcInput1, which in turn is connected to EGLOutputOutput1. The parameters windowsize, dispNo, and layerNo of EGLOutputOutput1 determine the display number and overlay layer number of connected displays on which a window of dimension windowsize appears.

The first gears instance appears in a window of dimension 1920 x 1080 on the 0th layer of 0th display. Likewise, the second gears instance appears in a window of dimensions 1080 x 720 on the 1st layer of 0th display.

There are many more parameters for different kinds of plugins, which are explained in the table below.

Plugin Parameters Optional Description Example

For All Plugins

name

Required

Name of the plugin.

"name": "EGLOutputOutput1"

type

Required

Type of the plugin.

"type": "EGLOutputOutput"

For All Input Plugins

output

Required

Name of the output plugin to connect with this input plugin.

"output": "EGLOutputOutput1"

For All Output Plugins

windowSize

Optional

Size of window to appear on the display or to send out through EGLStream.

"windowSize": "1920X1080"

CrossPartInput

port

Required

Port number to listen for incoming EGLStream producer.

{

"name": " CrossPartInput1",

"type": " CrossPartInput ",

"output": "ImageFileWriter",

"port": "8889"

}

CrossProcInput

socketName

Required

Socket path to listen for incoming EGLStream producer. This socket path must be created explicitly.

{

"name": " CrossProcInput1",

"type": " CrossProcInput ",

"output": "ImageFileWriter",

"socketName": "/tmp/ss/ss1"

}

TestInput

size

Required

Size of frames to be generated.

{

"name": " TestInput1",

"type": " TestInput ",

"output": "ImageFileWriter",

"size": "600X400",

"frames": "10"

}

frames

Required

Number of frames to be generated.

EGLOutputOutput

dispNo

Optional

Number of displays to show window.

{

"name": "EGLOutputOutput1",

"type": "EGLOutputOutput",

"windowSize": "1920X1080",

"dispNo": "1",

"layerNo": "0"

}

layerNo

Optional

Number of layers to show window.

ImageFileWriter

frames

Required

Number of frames to dump of disk.

{

"name": "ImageFileWriter1",

"type": "ImageFileWriter",

"windowSize": "1920X1080",

"frames": "10",

"outpath": "/tmp/ss/out"

}

outpath

Required

Directory path to dump frames into. This path must be explicitly created prior to invoking Stream-Server.

ScreenOutput

dispNo

Optional

Specifies which display to show Screen window on.

{

"name": "ScreenOutput1",

"type": "ScreenOutput",

"windowSize": "1920X1080",

"dispNo": "1",

"layerNo": "0"

}

layerNo

Optional

Specifies which layer number to show Screen window on.

WaylandOutput

ivisurfaceid

Optional

ID number of an IVI surface when used with ivi-shell.

{

"name": "WaylandOutput1",

"type": "WaylandOutput",

"windowSize": "1920X1080",

"x": "100",

"y": "100"

}

x

Optional

x offset (ivi-shell only)

y

Optional

y offset (ivi-shell only)

CrossProcOutput

socketName

Required

Socket path on which cross-process consumer client is listening.

{

"name": "CrossProcOutput1",

"type": "CrossProcOutput",

"windowSize": "1920X1080",

"socketName": "/tmp/ss/ss1"

}

CrossPartOutput

ip

Required

IP address VM where cross- partition consumer client is running.

{

"name": "CrossPartOutput1",

"type": "CrossProcOutput",

"windowSize": "1920X1080",

"ip": "12.1",

"port": "8888"

}

port

Required

Port number on which cross-partition consumer client is listening.

Note:

Every plugin has a name and type attribute associated with it that uniquely identifies it in the config object. The other options for the plugin are either optional or required, as indicated in the table.