Skip to content

InputChannel

UnknownSKL edited this page Jul 31, 2021 · 10 revisions

The input channel controls the user input and frame confirmation. As far it is known we only send messages to this channel.

The input channel supports gamepad input, keyboard input and mouse input. Next to the user input, the video frames are confirmed in metadata frames.

Client Metadata report

Request metadata

Total length: 5 bytes

Name Type Description
Packet type Uint8 value is 8 for ClientMetadata (needed to get screensizes (Needed for metadata frame confirmation)
Sequence num Uint32 Incrementing num

Response metadata

Total length: 5 bytes

Name Type Description
Packet type Uint8 value is 16 for ServerMetadata
Display height Uint32 Video source screen height
Display width Uint32 Video source screen width

Input send packet

Packet Header

Total length: 5 bytes

Name Type Description
Packet type Uint8 Bitwise: 1: Metadata, 2: GamepadReport, 4: Pointer, 8: ClientMetadata, 16: ServerMetadata, 32: Mouse
Sequence num Uint32 Incrementing num

Metadata Headers

First it writes the total number of metadata headers to expect.

Total length: 1 bytes

Name Type Description
Count metadata frames Uint8 Number of metadata frames

For every frame you have to confirm you have to generate the data for. Recommended is not to put more then 30 frames in one packet.

Total length: 28 bytes

Name Type Description
Server data key Uint32 Server data key value of the received video packet
Video frame arrival time in ms Uint32 Arrival time of the video packet in ms
Video frame render submit time in ms Uint32 Render submit time of the video packet in ms
Video frame decoded submit time in ms Uint32 Video decoded time of the video packet in ms
Video frame render time in ms Uint32 Render time of the video packet in ms
Packet prepare time in ms Uint32 Packet prepare time in ms
Packet send time in mms Uint32 Packet send time in ms

Gamepad Headers

First it writes the total number of gamepad headers to expect.

Total length: 1 bytes

Name Type Description
Count gamepad frames Uint8 Number of gamepad frames

For every frame you have to confirm you have to generate the data for. Recommended is not to put more then 30 frames in one packet.

Total length: 23 bytes

Name Type Description
Gamepad index Uint8 Gamepad index: 0-3
Button mask Uint16 Bitwise binary. See table below for the values
LeftThumbXAxis Int16 Left thumb X axis value: 32767, -32767 (Need to confirm values)
LeftThumbYAxis Int16 Left thumb Y axis value: 32767, -32767 (Need to confirm values)
RightThumbXAxis Int16 Right thumb X axis value: 32767, -32767 (Need to confirm values)
RightThumbYAxis Int16 Right thumb Y axis value: 32767, -32767 (Need to confirm values)
Left Trigger UInt16 Left trigger value: 0, 1 (Need to confirm values)
Right Trigger UInt16 Right trigger value: 0, 1 (Need to confirm values)
PhysicalPhysicality UInt32 Unknown, default value: 0
VirtualPhysicality UInt32 Unknown, default value: 0

Button Masks:

Button Value
Nexus 2
Menu 4
View 8
A 16
B 32
X 64
Y 128
Dpad up 256
Dpad down 512
Dpad left 1024
Dpad right 2048
Left Shoulder 4096
Right Shoulder 8192
Left Thumb 16384
Right Thumb 32768