1 |
Overview |
2 |
======== |
3 |
|
4 |
This is a rdesktop specific extension to the RDPSND protocol to |
5 |
support recording. |
6 |
|
7 |
The basic protocol is the same as RDPSND (described in rdpsnd.txt), |
8 |
but with a bunch of new opcodes. |
9 |
|
10 |
A client indicates to the server that it can support recording by |
11 |
setting bit 24 (0x00800000) in "Flags" in RDPSND_NEGOTIATE. |
12 |
|
13 |
New opcodes |
14 |
|
15 |
0x27 RDPSND_REC_NEGOTIATE |
16 |
0x28 RDPSND_REC_START |
17 |
0x29 RDPSND_REC_STOP |
18 |
0x2A RDPSND_REC_DATA |
19 |
0x2B RDPSND_REC_SET_VOLUME |
20 |
|
21 |
Opcodes |
22 |
======= |
23 |
|
24 |
The following is a list of the new opcodes and their payload. |
25 |
|
26 |
RDPSND_REC_NEGOTIATE |
27 |
-------------------- |
28 |
|
29 |
Sent immediatly after RDPSND_NEGOTIATE when the client indicates that |
30 |
it supports recording. Allows the server to determine the |
31 |
capabilities of the client. |
32 |
|
33 |
The client should reply with an identical packet, with the relevant |
34 |
fields filled in, and a filtered list of formats (based on what the |
35 |
client supports). |
36 |
|
37 |
0 1 2 3 |
38 |
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 |
39 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
40 |
| Flags | |
41 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
42 |
| Left channel | Right channel | |
43 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
44 |
| Format count | Version | |
45 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
46 |
| ... | |
47 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
48 |
| Format tag | Channels | |
49 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
50 |
| Frames per sec. | |
51 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
52 |
| Bytes per sec. | |
53 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
54 |
| Block align | Bits per sample | |
55 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
56 |
| Extra size | Extra data ... | |
57 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
58 |
| ... | |
59 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
60 |
|
61 |
Flags |
62 |
|
63 |
Flags for capabilities. Currently unused. |
64 |
|
65 |
Left channel |
66 |
|
67 |
Initial volume for left channel. Reserved when sent from server. |
68 |
|
69 |
Right channel |
70 |
|
71 |
Initial volume for right channel. Reserved when sent from server. |
72 |
|
73 |
Format count |
74 |
|
75 |
Number of format structures following the header. |
76 |
|
77 |
Version |
78 |
|
79 |
Version of the RDPSND record protocol. Current version is 1. |
80 |
|
81 |
Format tag |
82 |
|
83 |
Audio format type as registered at Microsoft. |
84 |
|
85 |
Channels |
86 |
|
87 |
Number of channels per frame. |
88 |
|
89 |
Frames per sec. |
90 |
|
91 |
Frames per second in Hz. |
92 |
|
93 |
Bytes per sec. |
94 |
|
95 |
Number of bytes per second. Should be the product of |
96 |
"Frames per sec." and "Block align". |
97 |
|
98 |
Block align |
99 |
|
100 |
The size of each frame. Note that not all bytes may contain |
101 |
useful data. |
102 |
|
103 |
Bits per sample |
104 |
|
105 |
Number of bits per sample. Commonly 8 or 16. |
106 |
|
107 |
Extra size |
108 |
|
109 |
Number of bytes of extra information following this format |
110 |
description. |
111 |
|
112 |
Extra data |
113 |
|
114 |
Optional extra format data. Contents specific to each format |
115 |
type. |
116 |
|
117 |
RDPSND_REC_START |
118 |
---------------- |
119 |
|
120 |
Sent from the server to tell the client to start recording. |
121 |
|
122 |
0 1 2 3 |
123 |
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 |
124 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
125 |
| Format index | | |
126 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
127 |
|
128 |
Format index |
129 |
|
130 |
Waveform data format in the form of an index to the previously |
131 |
negotiated format list. |
132 |
|
133 |
RDPSND_REC_STOP |
134 |
--------------- |
135 |
|
136 |
Tells the client to stop sending record data. Must be sent before a |
137 |
new RDPSND_REC_START is sent. |
138 |
|
139 |
No payload and no response. |
140 |
|
141 |
RDPSND_REC_DATA |
142 |
--------------- |
143 |
|
144 |
Chunk of recorded data. The client is free to choose how much data |
145 |
should be queued up before a packet is sent. The payload must not |
146 |
exceed 32768 bytes though. |
147 |
|
148 |
No response. |
149 |
|
150 |
0 1 2 3 |
151 |
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 |
152 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
153 |
| Waveform data | |
154 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
155 |
| ... | |
156 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
157 |
|
158 |
Waveform data |
159 |
|
160 |
Binary waveform data in the format specified by the format index. |
161 |
Size defined by the packet boundary. |
162 |
|
163 |
RDPSND_REC_SET_VOLUME |
164 |
--------------------- |
165 |
|
166 |
Request from the server to the client to change the input volume. |
167 |
No response. |
168 |
|
169 |
0 1 2 3 |
170 |
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 |
171 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
172 |
| Left channel | Right channel | |
173 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
174 |
|
175 |
Left channel |
176 |
|
177 |
Volume of left channel in the range [0, 65535]. |
178 |
|
179 |
Right channel |
180 |
|
181 |
Volume of right channel in the range [0, 65535]. |