Htsp » History » Version 63
Adam Sutton, 2012-08-09 18:31
1 | 58 | sbi - | h1. Home Tv Streaming Protocol (HTSP) |
---|---|---|---|
2 | 1 | Andreas Smas | |
3 | h2. General |
||
4 | 58 | sbi - | |
5 | HTSP is a TCP based protocol primarily intended for streaming of live TV and related meta data such as channels, group of channels (called tags in HTSP) and electronic program guide (EPG) information. |
||
6 | |||
7 | 61 | Adam Sutton | The transmission and reception of a channel over HTSP is referred to as a subscription. A single HTSP session can handle as many concurrent subscriptions as the bandwidth and CPU permits. |
8 | 1 | Andreas Smas | |
9 | 61 | Adam Sutton | The HTSP server in tvheadend has a payload-aware scheduler for prioritizing more important packets (such as I-frames) before less important ones (such as B-frames). This makes HTSP suitable for long-distance transmissions and/or paths with non-perfect delivery. |
10 | 1 | Andreas Smas | (It has been tested with a server in Stockholm and the client in Berlin). |
11 | |||
12 | 17 | Andreas Smas | For information about the HTSP wire format please read [[htsmsgbinary|HTSMSG binary format]] |
13 | 1 | Andreas Smas | |
14 | 61 | Adam Sutton | If you're looking to develop a new client, there are several existing client implementations from which you might be able to gain knowledge: |
15 | |||
16 | * "XBMC":https://github.com/opdenkamp/xbmc/tree/master/xbmc/pvrclients/tvheadend |
||
17 | * "Showtime":https://github.com/andoma/showtime/tree/master/src/backend/htsp |
||
18 | 63 | Adam Sutton | * "PyHTSP":https://github.com/adamsutton/tvheadend/tree/master/support/htsp.py (This is a demo client and is WIP, it has limited functionality). |
19 | 1 | Andreas Smas | |
20 | 22 | Andreas Smas | ---- |
21 | 18 | Andreas Smas | |
22 | 58 | sbi - | h2. Communication |
23 | |||
24 | |||
25 | 17 | Andreas Smas | This communication is currently implemented by using htsmsg:s. All strings are encoded as UTF-8. |
26 | 1 | Andreas Smas | |
27 | There are two distinct ways for communication within HTSP. |
||
28 | |||
29 | 28 | Andreas Smas | Apart from this there is a number of messages that needs to be exchanged during login, see the login section below. |
30 | |||
31 | 1 | Andreas Smas | |
32 | 58 | sbi - | h3. RPC communication |
33 | |||
34 | |||
35 | 1 | Andreas Smas | There is a normal RPC way of doing things. I.e. the client sends a request and the server responds with a reply. All the RPC methods are listed below as the 'Client to Server' methods. Apart from all message fields listed within each message type the client can add an additional field: |
36 | 18 | Andreas Smas | |
37 | 17 | Andreas Smas | RPC request extra fields: |
38 | 58 | sbi - | <pre> |
39 | 28 | Andreas Smas | seq int optional Sequence number. This field will be echoed back by the server in the reply. |
40 | 1 | Andreas Smas | username str optional Username, in combination with 'digest' this can be used to raise the privileges |
41 | for the session in combination with invocation of a method. |
||
42 | 28 | Andreas Smas | digest bin optional Used to raise privileges. |
43 | 58 | sbi - | </pre> |
44 | 18 | Andreas Smas | |
45 | 1 | Andreas Smas | The followings field should be used by the client to match the reply with the request. |
46 | All replies are guaranteed to arrive in the same order as the requests. |
||
47 | Even so, probably the best way to implement the request-reply client is by taking advantage of the 'seq' field. |
||
48 | |||
49 | RPC reply extra fields: |
||
50 | 58 | sbi - | <pre> |
51 | 18 | Andreas Smas | seq int optional Sequence number. Same as in the request. |
52 | 19 | Andreas Smas | error str optional If present an error has occurred and the text describes the error. |
53 | noaccess int optional If present and set to '1' the user is prohibited from invoking the method due to |
||
54 | 1 | Andreas Smas | access restrictions. |
55 | 58 | sbi - | </pre> |
56 | 1 | Andreas Smas | |
57 | 18 | Andreas Smas | |
58 | 58 | sbi - | h3. Streaming communication |
59 | |||
60 | |||
61 | 19 | Andreas Smas | For streaming of live TV and various related messages the server will continuously push data to the client. |
62 | 1 | Andreas Smas | These messages are referred to as asynchronous messages and always have the 'method' field set and never have the 'seq' field set. |
63 | Also, the client can enable an additional asyncMetadata mode and by doing so it will be notified by the server when meta data changes. (EPG updates, creation of channels and tags, etc). |
||
64 | |||
65 | 34 | Andreas Smas | |
66 | 58 | sbi - | h3. Authentication |
67 | |||
68 | |||
69 | 29 | Andreas Smas | In Tvheadend, each method has an associated access restriction. Currently there is only one restriction (Streaming). However, this may change in the future. |
70 | 1 | Andreas Smas | |
71 | Privileges for these restrictions may be granted in two ways: Username + Password and/or Source IP address. |
||
72 | Therefore it is possible to gain permissions to the system without entering a username and password. |
||
73 | While this is really useful it also complicates the authentication schema a bit. |
||
74 | Upon connect the initial privileges will be raised based on the source address. |
||
75 | |||
76 | Before any username / password based authentication has taken place the client must have |
||
77 | 34 | Andreas Smas | obtained a challenge (which stays fixed for the session). This is done via the 'hello' method. |
78 | 1 | Andreas Smas | |
79 | In principle it's possible to use two different authentication idioms with HTSP. |
||
80 | Depending on how your application works one or another may be more suitable. |
||
81 | While they do not really differ from a protocol point of view it's worth mentioning a bit about them here: |
||
82 | |||
83 | |||
84 | 58 | sbi - | h3. Initial login authentication |
85 | |||
86 | |||
87 | 1 | Andreas Smas | The client performs all of its authentication using the 'login' method. |
88 | |||
89 | It may choose to send: |
||
90 | 58 | sbi - | * Username and password: Privileges will be raised based on these credentials. |
91 | * Username only: Privileges will be based on just the source address. The username will be used for various logging purposes. |
||
92 | * Nothing: Privileges will be based on just the source address. |
||
93 | 1 | Andreas Smas | |
94 | If no privileges are granted after the login message has been received by the server (i.e. both network and username + password based) |
||
95 | the server will reply with 'noaccess' set to 1. A client that only employs initial login should honor this flag and ask the |
||
96 | user for a username + password and retry by using the 'authenticate' method. I.e. it should not send the 'login' method again. |
||
97 | |||
98 | |||
99 | 58 | sbi - | h3. On-demand authentication |
100 | |||
101 | |||
102 | 1 | Andreas Smas | The client performs all of its authentication when it needs to. |
103 | |||
104 | When using this method, the client will check every RPC reply for the 'noaccess' field. |
||
105 | If it set to 1 it whould ask the user for username + password and retry the request but also |
||
106 | 58 | sbi - | add 'username' and 'digest' to the original message. (See _RPC request extra fields_ above) |
107 | 1 | Andreas Smas | |
108 | Typically it would not send a username or digest during login. |
||
109 | 29 | Andreas Smas | |
110 | ---- |
||
111 | 34 | Andreas Smas | |
112 | 58 | sbi - | h1. Client to Server (RPC) methods |
113 | 34 | Andreas Smas | |
114 | |||
115 | 58 | sbi - | |
116 | |||
117 | 34 | Andreas Smas | ---- |
118 | |||
119 | 58 | sbi - | h3. hello |
120 | |||
121 | |||
122 | 34 | Andreas Smas | Used to identify the client toward the server and to get the session challenge used to |
123 | hash passwords into digests. The client can request a different version of the HTSP |
||
124 | protocol with this method. If no 'hello' message is sent the server assumes version 1 |
||
125 | 1 | Andreas Smas | is to be used. |
126 | |||
127 | |||
128 | 34 | Andreas Smas | Request message fields: |
129 | 58 | sbi - | <pre> |
130 | 34 | Andreas Smas | htspversion int required Client preferred HTSP version. If the server does not support this version |
131 | 1 | Andreas Smas | it will respond with an error and also set the 'invalidversion' field in the reply. |
132 | clientname str required Client software name. |
||
133 | 34 | Andreas Smas | clientversion str required Client software version. |
134 | 58 | sbi - | </pre> |
135 | 1 | Andreas Smas | |
136 | 34 | Andreas Smas | |
137 | Reply message fields: |
||
138 | 58 | sbi - | <pre> |
139 | 1 | Andreas Smas | htspversion int required The server supports all versions of the protocol up to and including this number. |
140 | servername str required Server software name. |
||
141 | 34 | Andreas Smas | serverversion str required Server software version. |
142 | 33 | Andreas Smas | challenge bin required 32 bytes randomized data used to generate authentication digests |
143 | invalidversion int optional If set, this means that the server does not understand the requested version. |
||
144 | The 'error' field is also set to indicate an error. |
||
145 | 58 | sbi - | </pre> |
146 | 33 | Andreas Smas | |
147 | 1 | Andreas Smas | |
148 | ---- |
||
149 | 33 | Andreas Smas | |
150 | 58 | sbi - | h3. authenticate |
151 | |||
152 | |||
153 | 33 | Andreas Smas | This can be used to issue authentication without doing anything else. |
154 | If no privileges are gained it will return with 'noaccess' set to 1. |
||
155 | |||
156 | 1 | Andreas Smas | Request message fields: |
157 | 58 | sbi - | <pre> |
158 | 1 | Andreas Smas | None |
159 | 58 | sbi - | </pre> |
160 | 10 | Andreas Smas | |
161 | 1 | Andreas Smas | Reply message fields: |
162 | 58 | sbi - | <pre> |
163 | 10 | Andreas Smas | None |
164 | 58 | sbi - | </pre> |
165 | 10 | Andreas Smas | |
166 | ---- |
||
167 | |||
168 | 58 | sbi - | h3. enableAsyncMetadata |
169 | |||
170 | |||
171 | 1 | Andreas Smas | When this is enabled the client will get continuous updates from the server about channels and tags. |
172 | 10 | Andreas Smas | This also includes creation and deletion of channels and tags. |
173 | |||
174 | 1 | Andreas Smas | An interactive application that presents the user with information about channels and tags would probably want to switch to this mode. |
175 | |||
176 | |||
177 | 5 | Andreas Smas | Request message fields: |
178 | 58 | sbi - | <pre> |
179 | 6 | Andreas Smas | None |
180 | 58 | sbi - | </pre> |
181 | 1 | Andreas Smas | |
182 | 23 | Andreas Smas | Reply message fields: |
183 | 58 | sbi - | <pre> |
184 | 23 | Andreas Smas | None |
185 | 58 | sbi - | </pre> |
186 | 1 | Andreas Smas | |
187 | 23 | Andreas Smas | |
188 | |||
189 | 1 | Andreas Smas | ---- |
190 | |||
191 | 58 | sbi - | h3. getEvent |
192 | |||
193 | |||
194 | 23 | Andreas Smas | Request information about the given event. An event typically corresponds to a program on a channel. |
195 | 47 | mdd - | |
196 | 1 | Andreas Smas | Request message fields: |
197 | 58 | sbi - | <pre> |
198 | 1 | Andreas Smas | eventId int required Event ID. |
199 | 58 | sbi - | </pre> |
200 | 1 | Andreas Smas | |
201 | Reply message fields: |
||
202 | 58 | sbi - | <pre> |
203 | 1 | Andreas Smas | start int required Start time of event (Seconds since the epoch, in UTC) |
204 | 44 | mdd - | stop int required Ending time of event (Seconds since the epoch, in UTC) |
205 | 1 | Andreas Smas | title str optional Title of event. |
206 | description str optional Description of event. This can be quite huge and may also contain newlines. |
||
207 | channelId int required ID of channel (introduced in HTSP version 4) |
||
208 | 44 | mdd - | nextEventId int optional ID of next event on the same channel. |
209 | contentType int optional dvb content code (introduced in HTSP version 4) |
||
210 | 58 | sbi - | </pre> |
211 | 44 | mdd - | |
212 | 1 | Andreas Smas | ---- |
213 | |||
214 | 58 | sbi - | h3. getEvents |
215 | |||
216 | |||
217 | 1 | Andreas Smas | Introduced in HTSP version 4. |
218 | 45 | mdd - | |
219 | 1 | Andreas Smas | Request information about numFollowing events, starting with the given event |
220 | |||
221 | Request message fields: |
||
222 | 58 | sbi - | <pre> |
223 | 45 | mdd - | eventId int required Event ID. |
224 | numFollowing int required Number of events to add |
||
225 | 58 | sbi - | </pre> |
226 | 1 | Andreas Smas | |
227 | Reply message fields: |
||
228 | 58 | sbi - | <pre> |
229 | 45 | mdd - | events msg[] required List of events, using response message fields from getEvent |
230 | 58 | sbi - | </pre> |
231 | 1 | Andreas Smas | |
232 | 57 | sbi - | ---- |
233 | 45 | mdd - | |
234 | 58 | sbi - | h3. addDvrEntry |
235 | |||
236 | |||
237 | 45 | mdd - | Introduced in HTSP version 4. |
238 | |||
239 | 1 | Andreas Smas | Adds an dvr entry for the given eventId. |
240 | 45 | mdd - | |
241 | Request message fields: |
||
242 | 58 | sbi - | <pre> |
243 | 45 | mdd - | eventId int required Event ID. |
244 | 1 | Andreas Smas | configName str optional dvr configuration name |
245 | 58 | sbi - | </pre> |
246 | 45 | mdd - | |
247 | Reply message fields: |
||
248 | 58 | sbi - | <pre> |
249 | 1 | Andreas Smas | success int required 1 if entry was added, 0 otherwise |
250 | error str optional English clear text of error message |
||
251 | 58 | sbi - | </pre> |
252 | 45 | mdd - | |
253 | 1 | Andreas Smas | ---- |
254 | |||
255 | 58 | sbi - | h3. deleteDvrEntry |
256 | |||
257 | |||
258 | 45 | mdd - | Introduced in HTSP version 4. |
259 | |||
260 | 1 | Andreas Smas | Delete a dvr entry with the given id. |
261 | |||
262 | Request message fields: |
||
263 | 58 | sbi - | <pre> |
264 | 44 | mdd - | dvrEntryId int required dvrEnryId to delete |
265 | 58 | sbi - | </pre> |
266 | 1 | Andreas Smas | |
267 | 46 | mdd - | Reply message fields: |
268 | 58 | sbi - | <pre> |
269 | 46 | mdd - | success int required 1 if entry was removed |
270 | 58 | sbi - | </pre> |
271 | 46 | mdd - | |
272 | ---- |
||
273 | 1 | Andreas Smas | |
274 | 58 | sbi - | h3. epgQuery |
275 | |||
276 | |||
277 | 46 | mdd - | Introduced in HTSP version 4. |
278 | 1 | Andreas Smas | |
279 | query the epg, optionally restrict to channels/tags/dvb content type |
||
280 | 46 | mdd - | |
281 | 1 | Andreas Smas | Request message fields: |
282 | 58 | sbi - | <pre> |
283 | 1 | Andreas Smas | query str required String to query epg for |
284 | 58 | sbi - | channelId int optional [[ChannelId]] to restrict search to |
285 | tagId int optional [[TagId]] to restrict search to |
||
286 | 46 | mdd - | contentType int optional Dvb epg content type to restrict search to |
287 | 58 | sbi - | </pre> |
288 | 1 | Andreas Smas | |
289 | Reply message fields: |
||
290 | 58 | sbi - | <pre> |
291 | 1 | Andreas Smas | eventIds int[] optional List of eventIds that match the query |
292 | 58 | sbi - | </pre> |
293 | 1 | Andreas Smas | |
294 | 8 | Andreas Smas | ---- |
295 | |||
296 | 58 | sbi - | h3. subscribe |
297 | |||
298 | |||
299 | 6 | Andreas Smas | Request subscription to the given channel. |
300 | |||
301 | Request message fields: |
||
302 | 58 | sbi - | <pre> |
303 | 5 | Andreas Smas | channelId int required ID for channel. |
304 | 1 | Andreas Smas | subscriptionId int required Subscription ID. Selected by client. This value is not interpreted by the server in any form. |
305 | The value is used from now on in all messages related to the subscription. |
||
306 | 58 | sbi - | </pre> |
307 | 1 | Andreas Smas | |
308 | 5 | Andreas Smas | Reply message fields: |
309 | 58 | sbi - | <pre> |
310 | 1 | Andreas Smas | None. |
311 | 58 | sbi - | </pre> |
312 | 6 | Andreas Smas | |
313 | |||
314 | ---- |
||
315 | 2 | Andreas Smas | |
316 | 58 | sbi - | h3. unsubscribe |
317 | |||
318 | |||
319 | 2 | Andreas Smas | Stop a subscription. |
320 | 1 | Andreas Smas | Attributes |
321 | 58 | sbi - | <pre> |
322 | 1 | Andreas Smas | subscriptionId int required Subscription ID. |
323 | 58 | sbi - | </pre> |
324 | 2 | Andreas Smas | |
325 | 1 | Andreas Smas | Reply message fields: |
326 | 58 | sbi - | <pre> |
327 | 1 | Andreas Smas | None. |
328 | 58 | sbi - | </pre> |
329 | 40 | Andreas Smas | |
330 | ---- |
||
331 | 1 | Andreas Smas | |
332 | 58 | sbi - | h3. getDiskSpace |
333 | |||
334 | |||
335 | 40 | Andreas Smas | Introduced in HTSP version 3. |
336 | 1 | Andreas Smas | |
337 | 40 | Andreas Smas | Return diskspace status from Tvheadend's PVR storage |
338 | Attributes |
||
339 | 58 | sbi - | <pre> |
340 | </pre> |
||
341 | 40 | Andreas Smas | |
342 | Reply message fields: |
||
343 | 58 | sbi - | <pre> |
344 | 1 | Andreas Smas | freediskspace int required Bytes available. |
345 | totaldiskspace int required Total capacity. |
||
346 | 58 | sbi - | </pre> |
347 | 40 | Andreas Smas | |
348 | 1 | Andreas Smas | ---- |
349 | 40 | Andreas Smas | |
350 | 58 | sbi - | h3. getSysTime |
351 | |||
352 | |||
353 | 40 | Andreas Smas | Introduced in HTSP version 3. |
354 | |||
355 | 1 | Andreas Smas | Return system time on server |
356 | Attributes |
||
357 | 58 | sbi - | <pre> |
358 | </pre> |
||
359 | 40 | Andreas Smas | |
360 | 1 | Andreas Smas | Reply message fields: |
361 | 58 | sbi - | <pre> |
362 | 40 | Andreas Smas | time int required Seconds since the unix epoch. |
363 | timezone int required Minutes west of GMT. |
||
364 | 58 | sbi - | </pre> |
365 | 1 | Andreas Smas | |
366 | ---- |
||
367 | 11 | Andreas Smas | |
368 | |||
369 | 58 | sbi - | h1. Server to Client methods |
370 | |||
371 | |||
372 | 11 | Andreas Smas | ---- |
373 | |||
374 | 58 | sbi - | h3. channelAdd |
375 | |||
376 | |||
377 | 11 | Andreas Smas | A new channel has been created on the server. |
378 | |||
379 | 1 | Andreas Smas | Message fields: |
380 | 58 | sbi - | <pre> |
381 | 1 | Andreas Smas | channelId int required ID of channel. |
382 | channelName str required Name of channel. |
||
383 | channelNumber int required Channel number. 0 means unconfigured |
||
384 | channelIcon str required URL to an icon representative for the channel. |
||
385 | 11 | Andreas Smas | eventId int optional ID of the current (or next to be) event on this channel. |
386 | 1 | Andreas Smas | tags int[] optional Tags this channel is mapped to. |
387 | 58 | sbi - | </pre> |
388 | 11 | Andreas Smas | |
389 | 1 | Andreas Smas | ---- |
390 | 11 | Andreas Smas | |
391 | 58 | sbi - | h3. channelUpdate |
392 | |||
393 | |||
394 | 3 | Andreas Smas | A channel has been updated on the server. If a field is not present it has not changed. Most clients can process this and the 'channelAdd' message |
395 | 41 | Andreas Smas | with the very same code. |
396 | 11 | Andreas Smas | |
397 | 1 | Andreas Smas | Message fields: |
398 | 58 | sbi - | <pre> |
399 | 11 | Andreas Smas | channelId int required ID of channel. |
400 | 1 | Andreas Smas | channelName str optional Name of channel. |
401 | channelNumber int optional Channel number. 0 means unconfigured |
||
402 | channelIcon str optioanl URL to an icon representative for the channel. |
||
403 | 11 | Andreas Smas | eventId int optional ID of the current (or next to be) event on this channel. |
404 | tags int[] required Tags this channel is mapped to. |
||
405 | 58 | sbi - | </pre> |
406 | 11 | Andreas Smas | |
407 | 1 | Andreas Smas | ---- |
408 | |||
409 | 58 | sbi - | h3. channelDelete |
410 | |||
411 | |||
412 | 1 | Andreas Smas | A channel has been deleted on the server. |
413 | |||
414 | 11 | Andreas Smas | This message is only sent if session is in asynchronous mode. |
415 | |||
416 | Message fields: |
||
417 | 58 | sbi - | <pre> |
418 | 1 | Andreas Smas | channelId int required ID of channel. |
419 | 58 | sbi - | </pre> |
420 | 11 | Andreas Smas | |
421 | 1 | Andreas Smas | ---- |
422 | |||
423 | 58 | sbi - | h3. tagAdd |
424 | |||
425 | |||
426 | 11 | Andreas Smas | A new tag has been created on the server. |
427 | 1 | Andreas Smas | |
428 | 11 | Andreas Smas | Message fields: |
429 | 58 | sbi - | <pre> |
430 | 11 | Andreas Smas | tagId int required ID of tag. |
431 | 39 | elupus - | tagName str required Name of tag. |
432 | 11 | Andreas Smas | tagIcon str optional URL to an icon representative for the channel. |
433 | 13 | Andreas Smas | members int[] required Channels this tag is mapped to. |
434 | 58 | sbi - | </pre> |
435 | 11 | Andreas Smas | |
436 | ---- |
||
437 | |||
438 | 58 | sbi - | h3. tagUpdate |
439 | |||
440 | |||
441 | 11 | Andreas Smas | A tag has been updated on the server. |
442 | |||
443 | 39 | elupus - | Message fields: |
444 | 58 | sbi - | <pre> |
445 | 1 | Andreas Smas | tagId int required ID of tag. |
446 | 11 | Andreas Smas | tagName str required Name of tag. |
447 | tagIcon str optional URL to an icon representative for the channel. |
||
448 | 1 | Andreas Smas | members int[] required Channels this tag is mapped to. |
449 | 58 | sbi - | </pre> |
450 | 1 | Andreas Smas | |
451 | ---- |
||
452 | |||
453 | 58 | sbi - | h3. tagDelete |
454 | |||
455 | |||
456 | 12 | Andreas Smas | A tag has been deleted from the server. |
457 | 1 | Andreas Smas | |
458 | Message fields: |
||
459 | 58 | sbi - | <pre> |
460 | 1 | Andreas Smas | tagId str required ID of tag. |
461 | 58 | sbi - | </pre> |
462 | 1 | Andreas Smas | |
463 | 2 | Andreas Smas | ---- |
464 | 14 | Andreas Smas | |
465 | 58 | sbi - | h3. dvrEntryAdd |
466 | |||
467 | |||
468 | 1 | Andreas Smas | A new recording has been created on the server. |
469 | 14 | Andreas Smas | |
470 | Added in HTSP version 4. |
||
471 | 48 | mdd - | |
472 | Message fields: |
||
473 | 58 | sbi - | <pre> |
474 | 48 | mdd - | id int required ID of dvrEntry. |
475 | 1 | Andreas Smas | channel int required Channel of dvrEntry. |
476 | 48 | mdd - | start int required Time of when this entry was scheduled to start recording. |
477 | stop int required Time of when this entry was scheduled to stop recording. |
||
478 | title str optional Title of recording |
||
479 | description str optional Description of recording. This can be quite huge and may also contain newlines. |
||
480 | state str required Plain english status of recoding {scheduled, recording, completed, invalid}. |
||
481 | error str optional Plain english error description (e.g. "Aborted by user"). |
||
482 | 58 | sbi - | </pre> |
483 | 51 | elupus - | |
484 | ---- |
||
485 | 1 | Andreas Smas | |
486 | 58 | sbi - | h3. dvrEntryUpdate |
487 | |||
488 | |||
489 | 48 | mdd - | A recording has been updated on the server |
490 | |||
491 | Added in HTSP version 4. |
||
492 | 1 | Andreas Smas | |
493 | 48 | mdd - | Message fields: |
494 | 58 | sbi - | <pre> |
495 | 48 | mdd - | id int required ID of dvrEntry. |
496 | channel int required Channel of dvrEntry. |
||
497 | start int required Time of when this entry was scheduled to start recording. |
||
498 | 1 | Andreas Smas | stop int required Time of when this entry was scheduled to stop recording. |
499 | 48 | mdd - | title str optional Title of recording |
500 | description str optional Description of recording. This can be quite huge and may also contain newlines. |
||
501 | 1 | Andreas Smas | state str required Plain english status of recoding {scheduled, recording, completed, invalid}. |
502 | error str optional Plain english error description (e.g. "Aborted by user"). |
||
503 | 58 | sbi - | </pre> |
504 | 48 | mdd - | |
505 | ---- |
||
506 | 1 | Andreas Smas | |
507 | 58 | sbi - | h3. dvrEntryDelete |
508 | |||
509 | |||
510 | 48 | mdd - | A recording has been deleted from the server. |
511 | 51 | elupus - | |
512 | Added in HTSP version 4. |
||
513 | 48 | mdd - | |
514 | 1 | Andreas Smas | Message fields: |
515 | 58 | sbi - | <pre> |
516 | 48 | mdd - | id int required ID of recording to delete. |
517 | 58 | sbi - | </pre> |
518 | 48 | mdd - | |
519 | ---- |
||
520 | |||
521 | 58 | sbi - | h3. initialSyncCompleted |
522 | |||
523 | |||
524 | 48 | mdd - | Sent after all the initial channel and tag messages has been sent when session has been set to async mode. |
525 | |||
526 | Added in HTSP version 2. |
||
527 | |||
528 | Message fields: |
||
529 | 58 | sbi - | <pre> |
530 | </pre> |
||
531 | 48 | mdd - | |
532 | ---- |
||
533 | 35 | Andreas Smas | |
534 | 58 | sbi - | h3. subscriptionStart |
535 | |||
536 | |||
537 | 35 | Andreas Smas | Message fields: |
538 | 58 | sbi - | <pre> |
539 | 35 | Andreas Smas | subscriptionId int required Subscription ID. |
540 | streams msg[] required Array of messages with stream information |
||
541 | sourceinfo msg optional Message with strings in it. Each string is a descriptive |
||
542 | entity about the source. All strings are optional any should |
||
543 | only be thought of as informational. |
||
544 | 14 | Andreas Smas | |
545 | 'streams' message: |
||
546 | |||
547 | index int required Index for this stream |
||
548 | type str required Type of stream |
||
549 | language str optional Language for stream |
||
550 | 38 | Andreas Smas | width int optional Width of video in pixels (Video components only) |
551 | height int optional Height of video in pixels (Video components only) |
||
552 | |||
553 | 14 | Andreas Smas | |
554 | Stream types: |
||
555 | AC3 AC3 audio |
||
556 | MPEG2AUDIO MPEG2 audio (MP2) |
||
557 | MPEG2VIDEO MPEG2 video |
||
558 | H264 H264 video |
||
559 | 53 | Andreas Smas | AAC ADTS framed AAC (one AAC packet per ADTS frame) |
560 | 58 | sbi - | </pre> |
561 | 14 | Andreas Smas | |
562 | |||
563 | 1 | Andreas Smas | ---- |
564 | 14 | Andreas Smas | |
565 | 58 | sbi - | h3. subscriptionStop |
566 | |||
567 | |||
568 | 37 | Andreas Smas | Message fields: |
569 | 58 | sbi - | <pre> |
570 | 15 | Andreas Smas | subscriptionId int required Subscription ID. |
571 | reason str optional Reason for subscription stop. |
||
572 | 58 | sbi - | </pre> |
573 | 15 | Andreas Smas | |
574 | ---- |
||
575 | 12 | Andreas Smas | |
576 | 58 | sbi - | h3. subscriptionStatus |
577 | |||
578 | |||
579 | 15 | Andreas Smas | Message fields: |
580 | 58 | sbi - | <pre> |
581 | 15 | Andreas Smas | subscriptionId int required Subscription ID. |
582 | status str optional English clear text of error status. Absence of this field means that the status is OK. |
||
583 | 58 | sbi - | </pre> |
584 | 15 | Andreas Smas | |
585 | 1 | Andreas Smas | |
586 | 2 | Andreas Smas | ---- |
587 | 37 | Andreas Smas | |
588 | 58 | sbi - | h3. queueStatus |
589 | |||
590 | |||
591 | 15 | Andreas Smas | The queueStatus message is sent every second during normal data delivery. |
592 | |||
593 | The transmit scheduler have different drop thresholds for different frame types. |
||
594 | If congestion occurs it will favor dropping B-frames before P-frames before I-frames. |
||
595 | All audio is recognized as I-frames. |
||
596 | |||
597 | Message fields: |
||
598 | 58 | sbi - | <pre> |
599 | 15 | Andreas Smas | subscriptionId int required Subscription ID. |
600 | packets int required Number of data packets in queue. |
||
601 | bytes int required Number of bytes in queue. |
||
602 | 59 | John Törnblom | delay int optional Estimated delay of queue (in µs). |
603 | 15 | Andreas Smas | Bdrops int required Number of B-frames dropped |
604 | 16 | Andreas Smas | Pdrops int required Number of P-frames dropped |
605 | Idrops int required Number of I-frames dropped |
||
606 | 58 | sbi - | </pre> |
607 | 16 | Andreas Smas | |
608 | ---- |
||
609 | |||
610 | 58 | sbi - | h3. signalStatus |
611 | |||
612 | |||
613 | 55 | Lars Op den Kamp - | The signalStatus message is sent every second during normal data delivery. |
614 | |||
615 | The optional fields may not have been implemented or may not be supported by the active adapter. |
||
616 | |||
617 | Message fields: |
||
618 | 58 | sbi - | <pre> |
619 | 55 | Lars Op den Kamp - | subscriptionId int required Subscription ID. |
620 | feStatus str required Frontend status. |
||
621 | feSNR int optional Signal to noise ratio. |
||
622 | feSignal int optional Signal status percentage. |
||
623 | feBER int optional Bit error rate. |
||
624 | feUNC int optional Uncorrected blocks. |
||
625 | 58 | sbi - | </pre> |
626 | 55 | Lars Op den Kamp - | |
627 | ---- |
||
628 | |||
629 | 58 | sbi - | h3. muxpkt |
630 | |||
631 | |||
632 | 16 | Andreas Smas | Streaming data. |
633 | |||
634 | Message fields: |
||
635 | 58 | sbi - | <pre> |
636 | 16 | Andreas Smas | subscriptionId int required Subscription ID. |
637 | frametype int required Type of frame as ASCII value: 'I', 'P', 'B' |
||
638 | 1 | Andreas Smas | stream int required Stream index. Corresponds to the streams reported in the subscriptionStart message. |
639 | 60 | John Törnblom | dts int optional Decode Time Stamp in µs. |
640 | pts int optional Presentation Time Stamp in µs. |
||
641 | 1 | Andreas Smas | duration int required Duration of frame in µs. |
642 | payload bin required Actual frame data. |
||
643 | |||
644 | 58 | sbi - | </pre> |