182 lines
5.4 KiB
Plaintext
182 lines
5.4 KiB
Plaintext
|
Overview
|
||
|
========
|
||
|
|
||
|
This is a rdesktop specific extension to the RDPSND protocol to
|
||
|
support recording.
|
||
|
|
||
|
The basic protocol is the same as RDPSND (described in rdpsnd.txt),
|
||
|
but with a bunch of new opcodes.
|
||
|
|
||
|
A client indicates to the server that it can support recording by
|
||
|
setting bit 24 (0x00800000) in "Flags" in RDPSND_NEGOTIATE.
|
||
|
|
||
|
New opcodes
|
||
|
|
||
|
0x27 RDPSND_REC_NEGOTIATE
|
||
|
0x28 RDPSND_REC_START
|
||
|
0x29 RDPSND_REC_STOP
|
||
|
0x2A RDPSND_REC_DATA
|
||
|
0x2B RDPSND_REC_SET_VOLUME
|
||
|
|
||
|
Opcodes
|
||
|
=======
|
||
|
|
||
|
The following is a list of the new opcodes and their payload.
|
||
|
|
||
|
RDPSND_REC_NEGOTIATE
|
||
|
--------------------
|
||
|
|
||
|
Sent immediatly after RDPSND_NEGOTIATE when the client indicates that
|
||
|
it supports recording. Allows the server to determine the
|
||
|
capabilities of the client.
|
||
|
|
||
|
The client should reply with an identical packet, with the relevant
|
||
|
fields filled in, and a filtered list of formats (based on what the
|
||
|
client supports).
|
||
|
|
||
|
0 1 2 3
|
||
|
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
| Flags |
|
||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
| Left channel | Right channel |
|
||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
| Format count | Version |
|
||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
| ... |
|
||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
| Format tag | Channels |
|
||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
| Frames per sec. |
|
||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
| Bytes per sec. |
|
||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
| Block align | Bits per sample |
|
||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
| Extra size | Extra data ... |
|
||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
| ... |
|
||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
|
||
|
Flags
|
||
|
|
||
|
Flags for capabilities. Currently unused.
|
||
|
|
||
|
Left channel
|
||
|
|
||
|
Initial volume for left channel. Reserved when sent from server.
|
||
|
|
||
|
Right channel
|
||
|
|
||
|
Initial volume for right channel. Reserved when sent from server.
|
||
|
|
||
|
Format count
|
||
|
|
||
|
Number of format structures following the header.
|
||
|
|
||
|
Version
|
||
|
|
||
|
Version of the RDPSND record protocol. Current version is 1.
|
||
|
|
||
|
Format tag
|
||
|
|
||
|
Audio format type as registered at Microsoft.
|
||
|
|
||
|
Channels
|
||
|
|
||
|
Number of channels per frame.
|
||
|
|
||
|
Frames per sec.
|
||
|
|
||
|
Frames per second in Hz.
|
||
|
|
||
|
Bytes per sec.
|
||
|
|
||
|
Number of bytes per second. Should be the product of
|
||
|
"Frames per sec." and "Block align".
|
||
|
|
||
|
Block align
|
||
|
|
||
|
The size of each frame. Note that not all bytes may contain
|
||
|
useful data.
|
||
|
|
||
|
Bits per sample
|
||
|
|
||
|
Number of bits per sample. Commonly 8 or 16.
|
||
|
|
||
|
Extra size
|
||
|
|
||
|
Number of bytes of extra information following this format
|
||
|
description.
|
||
|
|
||
|
Extra data
|
||
|
|
||
|
Optional extra format data. Contents specific to each format
|
||
|
type.
|
||
|
|
||
|
RDPSND_REC_START
|
||
|
----------------
|
||
|
|
||
|
Sent from the server to tell the client to start recording.
|
||
|
|
||
|
0 1 2 3
|
||
|
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
| Format index | |
|
||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
|
||
|
Format index
|
||
|
|
||
|
Waveform data format in the form of an index to the previously
|
||
|
negotiated format list.
|
||
|
|
||
|
RDPSND_REC_STOP
|
||
|
---------------
|
||
|
|
||
|
Tells the client to stop sending record data. Must be sent before a
|
||
|
new RDPSND_REC_START is sent.
|
||
|
|
||
|
No payload and no response.
|
||
|
|
||
|
RDPSND_REC_DATA
|
||
|
---------------
|
||
|
|
||
|
Chunk of recorded data. The client is free to choose how much data
|
||
|
should be queued up before a packet is sent. The payload must not
|
||
|
exceed 32768 bytes though.
|
||
|
|
||
|
No response.
|
||
|
|
||
|
0 1 2 3
|
||
|
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
| Waveform data |
|
||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
| ... |
|
||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
|
||
|
Waveform data
|
||
|
|
||
|
Binary waveform data in the format specified by the format index.
|
||
|
Size defined by the packet boundary.
|
||
|
|
||
|
RDPSND_REC_SET_VOLUME
|
||
|
---------------------
|
||
|
|
||
|
Request from the server to the client to change the input volume.
|
||
|
No response.
|
||
|
|
||
|
0 1 2 3
|
||
|
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
| Left channel | Right channel |
|
||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
|
||
|
Left channel
|
||
|
|
||
|
Volume of left channel in the range [0, 65535].
|
||
|
|
||
|
Right channel
|
||
|
|
||
|
Volume of right channel in the range [0, 65535].
|