Project

General

Profile

Htsp » History » Version 64

John Törnblom, 2012-08-09 18:38

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 64 John Törnblom
dvrId            int  optional   ID of a recording (introduced in HTSP version 5)
211 58 sbi -
</pre>
212 44 mdd -
213 1 Andreas Smas
----
214
215 58 sbi -
h3. getEvents
216
217
218 1 Andreas Smas
Introduced in HTSP version 4.
219 45 mdd -
220 1 Andreas Smas
Request information about numFollowing events, starting with the given event
221
222
Request message fields:
223 58 sbi -
<pre>
224 45 mdd -
eventId          int   required   Event ID.
225
numFollowing     int   required   Number of events to add
226 58 sbi -
</pre>
227 1 Andreas Smas
228
Reply message fields:
229 58 sbi -
<pre>
230 45 mdd -
events           msg[] required   List of events, using response message fields from getEvent
231 58 sbi -
</pre>
232 1 Andreas Smas
233 57 sbi -
----
234 45 mdd -
235 58 sbi -
h3. addDvrEntry
236
237
238 45 mdd -
Introduced in HTSP version 4.
239
240 1 Andreas Smas
Adds an dvr entry for the given eventId.
241 45 mdd -
242
Request message fields:
243 58 sbi -
<pre>
244 45 mdd -
eventId          int   required   Event ID.
245 1 Andreas Smas
configName       str   optional   dvr configuration name
246 58 sbi -
</pre>
247 45 mdd -
248
Reply message fields:
249 58 sbi -
<pre>
250 1 Andreas Smas
success          int   required   1 if entry was added, 0 otherwise
251
error            str   optional   English clear text of error message
252 58 sbi -
</pre>
253 45 mdd -
254 1 Andreas Smas
----
255
256 58 sbi -
h3. deleteDvrEntry
257
258
259 45 mdd -
Introduced in HTSP version 4.
260
261 1 Andreas Smas
Delete a dvr entry with the given id.
262
263
Request message fields:
264 58 sbi -
<pre>
265 44 mdd -
dvrEntryId       int   required   dvrEnryId to delete
266 58 sbi -
</pre>
267 1 Andreas Smas
268 46 mdd -
Reply message fields:
269 58 sbi -
<pre>
270 46 mdd -
success          int   required   1 if entry was removed
271 58 sbi -
</pre>
272 46 mdd -
273
----
274 1 Andreas Smas
275 58 sbi -
h3. epgQuery
276
277
278 46 mdd -
Introduced in HTSP version 4.
279 1 Andreas Smas
280
query the epg, optionally restrict to channels/tags/dvb content type
281 46 mdd -
282 1 Andreas Smas
Request message fields:
283 58 sbi -
<pre>
284 1 Andreas Smas
query            str   required  String to query epg for
285 58 sbi -
channelId        int   optional  [[ChannelId]] to restrict search to
286
tagId            int   optional  [[TagId]] to restrict search to
287 46 mdd -
contentType      int   optional  Dvb epg content type to restrict search to
288 58 sbi -
</pre>
289 1 Andreas Smas
290
Reply message fields:
291 58 sbi -
<pre>
292 1 Andreas Smas
eventIds         int[] optional  List of eventIds that match the query
293 58 sbi -
</pre>
294 1 Andreas Smas
295 8 Andreas Smas
----
296
297 58 sbi -
h3. subscribe
298
299
300 6 Andreas Smas
Request subscription to the given channel. 
301
302
Request message fields:
303 58 sbi -
<pre>
304 5 Andreas Smas
channelId        int  required   ID for channel. 
305 1 Andreas Smas
subscriptionId   int  required   Subscription ID. Selected by client. This value is not interpreted by the server in any form. 
306
                                 The value is used from now on in all messages related to the subscription.
307 58 sbi -
</pre>
308 1 Andreas Smas
309 5 Andreas Smas
Reply message fields:
310 58 sbi -
<pre>
311 1 Andreas Smas
None.
312 58 sbi -
</pre>
313 6 Andreas Smas
314
315
----
316 2 Andreas Smas
317 58 sbi -
h3. unsubscribe
318
319
320 2 Andreas Smas
Stop a subscription.
321 1 Andreas Smas
Attributes
322 58 sbi -
<pre>
323 1 Andreas Smas
subscriptionId   int  required   Subscription ID.
324 58 sbi -
</pre>
325 2 Andreas Smas
326 1 Andreas Smas
Reply message fields:
327 58 sbi -
<pre>
328 1 Andreas Smas
None.
329 58 sbi -
</pre>
330 40 Andreas Smas
331
----
332 1 Andreas Smas
333 58 sbi -
h3. getDiskSpace
334
335
336 40 Andreas Smas
Introduced in HTSP version 3.
337 1 Andreas Smas
338 40 Andreas Smas
Return diskspace status from Tvheadend's PVR storage
339
Attributes
340 58 sbi -
<pre>
341
</pre>
342 40 Andreas Smas
343
Reply message fields:
344 58 sbi -
<pre>
345 1 Andreas Smas
freediskspace   int  required   Bytes available.
346
totaldiskspace  int  required   Total capacity.
347 58 sbi -
</pre>
348 40 Andreas Smas
349 1 Andreas Smas
----
350 40 Andreas Smas
351 58 sbi -
h3. getSysTime
352
353
354 40 Andreas Smas
Introduced in HTSP version 3.
355
356 1 Andreas Smas
Return system time on server
357
Attributes
358 58 sbi -
<pre>
359
</pre>
360 40 Andreas Smas
361 1 Andreas Smas
Reply message fields:
362 58 sbi -
<pre>
363 40 Andreas Smas
time            int  required   Seconds since the unix epoch.
364
timezone        int  required   Minutes west of GMT.
365 58 sbi -
</pre>
366 1 Andreas Smas
367
----
368 11 Andreas Smas
369
370 58 sbi -
h1. Server to Client methods
371
372
373 11 Andreas Smas
----
374
375 58 sbi -
h3. channelAdd
376
377
378 11 Andreas Smas
A new channel has been created on the server.
379
380 1 Andreas Smas
Message fields:
381 58 sbi -
<pre>
382 1 Andreas Smas
channelId        int   required   ID of channel.
383
channelName      str   required   Name of channel.
384
channelNumber    int   required   Channel number. 0 means unconfigured
385
channelIcon      str   required   URL to an icon representative for the channel.
386 11 Andreas Smas
eventId          int   optional   ID of the current (or next to be) event on this channel.
387 1 Andreas Smas
tags             int[] optional   Tags this channel is mapped to.
388 58 sbi -
</pre>
389 11 Andreas Smas
390 1 Andreas Smas
----
391 11 Andreas Smas
392 58 sbi -
h3. channelUpdate
393
394
395 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
396 41 Andreas Smas
with the very same code.
397 11 Andreas Smas
398 1 Andreas Smas
Message fields:
399 58 sbi -
<pre>
400 11 Andreas Smas
channelId        int   required   ID of channel.
401 1 Andreas Smas
channelName      str   optional   Name of channel.
402
channelNumber    int   optional   Channel number. 0 means unconfigured
403
channelIcon      str   optioanl   URL to an icon representative for the channel.
404 11 Andreas Smas
eventId          int   optional   ID of the current (or next to be) event on this channel.
405
tags             int[] required   Tags this channel is mapped to.
406 58 sbi -
</pre>
407 11 Andreas Smas
408 1 Andreas Smas
----
409
410 58 sbi -
h3. channelDelete
411
412
413 1 Andreas Smas
A channel has been deleted on the server.
414
415 11 Andreas Smas
This message is only sent if session is in asynchronous mode.
416
417
Message fields:
418 58 sbi -
<pre>
419 1 Andreas Smas
channelId        int   required   ID of channel.
420 58 sbi -
</pre>
421 11 Andreas Smas
422 1 Andreas Smas
----
423
424 58 sbi -
h3. tagAdd
425
426
427 11 Andreas Smas
A new tag has been created on the server.
428 1 Andreas Smas
429 11 Andreas Smas
Message fields:
430 58 sbi -
<pre>
431 11 Andreas Smas
tagId            int   required   ID of tag.
432 39 elupus -
tagName          str   required   Name of tag.
433 11 Andreas Smas
tagIcon          str   optional   URL to an icon representative for the channel.
434 13 Andreas Smas
members          int[] required   Channels this tag is mapped to.
435 58 sbi -
</pre>
436 11 Andreas Smas
437
----
438
439 58 sbi -
h3. tagUpdate
440
441
442 11 Andreas Smas
A tag has been updated on the server.
443
444 39 elupus -
Message fields:
445 58 sbi -
<pre>
446 1 Andreas Smas
tagId            int   required   ID of tag.
447 11 Andreas Smas
tagName          str   required   Name of tag.
448
tagIcon          str   optional   URL to an icon representative for the channel.
449 1 Andreas Smas
members          int[] required   Channels this tag is mapped to.
450 58 sbi -
</pre>
451 1 Andreas Smas
452
----
453
454 58 sbi -
h3. tagDelete
455
456
457 12 Andreas Smas
A tag has been deleted from the server.
458 1 Andreas Smas
459
Message fields:
460 58 sbi -
<pre>
461 1 Andreas Smas
tagId            str   required   ID of tag.
462 58 sbi -
</pre>
463 1 Andreas Smas
464 2 Andreas Smas
----
465 14 Andreas Smas
466 58 sbi -
h3. dvrEntryAdd
467
468
469 1 Andreas Smas
A new recording has been created on the server.
470 14 Andreas Smas
471
Added in HTSP version 4.
472 48 mdd -
473
Message fields:
474 58 sbi -
<pre>
475 48 mdd -
id               int   required   ID of dvrEntry.
476 1 Andreas Smas
channel          int   required   Channel of dvrEntry.
477 48 mdd -
start            int   required   Time of when this entry was scheduled to start recording.
478
stop             int   required   Time of when this entry was scheduled to stop recording.
479
title            str   optional   Title of recording
480
description      str   optional   Description of recording. This can be quite huge and may also contain newlines.
481
state            str   required   Plain english status of recoding {scheduled, recording, completed, invalid}.
482
error            str   optional   Plain english error description (e.g. "Aborted by user").
483 58 sbi -
</pre>
484 51 elupus -
485
----
486 1 Andreas Smas
487 58 sbi -
h3. dvrEntryUpdate
488
489
490 48 mdd -
A recording has been updated on the server
491
492
Added in HTSP version 4.
493 1 Andreas Smas
494 48 mdd -
Message fields:
495 58 sbi -
<pre>
496 48 mdd -
id               int   required   ID of dvrEntry.
497
channel          int   required   Channel of dvrEntry.
498
start            int   required   Time of when this entry was scheduled to start recording.
499 1 Andreas Smas
stop             int   required   Time of when this entry was scheduled to stop recording.
500 48 mdd -
title            str   optional   Title of recording
501
description      str   optional   Description of recording. This can be quite huge and may also contain newlines.
502 1 Andreas Smas
state            str   required   Plain english status of recoding {scheduled, recording, completed, invalid}.
503
error            str   optional   Plain english error description (e.g. "Aborted by user").
504 58 sbi -
</pre>
505 48 mdd -
506
----
507 1 Andreas Smas
508 58 sbi -
h3. dvrEntryDelete
509
510
511 48 mdd -
A recording has been deleted from the server.
512 51 elupus -
513
Added in HTSP version 4.
514 48 mdd -
515 1 Andreas Smas
Message fields:
516 58 sbi -
<pre>
517 48 mdd -
id               int   required   ID of recording to delete.
518 58 sbi -
</pre>
519 48 mdd -
520
----
521
522 58 sbi -
h3. initialSyncCompleted
523
524
525 48 mdd -
Sent after all the initial channel and tag messages has been sent when session has been set to async mode.
526
527
Added in HTSP version 2.
528
529
Message fields:
530 58 sbi -
<pre>
531
</pre>
532 48 mdd -
533
----
534 35 Andreas Smas
535 58 sbi -
h3. subscriptionStart
536
537
538 35 Andreas Smas
Message fields:
539 58 sbi -
<pre>
540 35 Andreas Smas
subscriptionId   int   required   Subscription ID.
541
streams          msg[] required   Array of messages with stream information
542
sourceinfo       msg   optional   Message with strings in it. Each string is a descriptive
543
                                  entity about the source. All strings are optional any should
544
                                  only be thought of as informational.
545 14 Andreas Smas
546
'streams' message:
547
548
index            int   required   Index for this stream
549
type             str   required   Type of stream
550
language         str   optional   Language for stream
551 38 Andreas Smas
width            int   optional   Width of video in pixels (Video components only)
552
height           int   optional   Height of video in pixels (Video components only)
553
554 14 Andreas Smas
555
Stream types:
556
    AC3                           AC3 audio
557
    MPEG2AUDIO                    MPEG2 audio (MP2)
558
    MPEG2VIDEO                    MPEG2 video
559
    H264                          H264 video
560 53 Andreas Smas
    AAC                           ADTS framed AAC (one AAC packet per ADTS frame)
561 58 sbi -
</pre>
562 14 Andreas Smas
563
564 1 Andreas Smas
----
565 14 Andreas Smas
566 58 sbi -
h3. subscriptionStop
567
568
569 37 Andreas Smas
Message fields:
570 58 sbi -
<pre>
571 15 Andreas Smas
subscriptionId   int   required   Subscription ID.
572
reason           str   optional   Reason for subscription stop.
573 58 sbi -
</pre>
574 15 Andreas Smas
575
----
576 12 Andreas Smas
577 58 sbi -
h3. subscriptionStatus
578
579
580 15 Andreas Smas
Message fields:
581 58 sbi -
<pre>
582 15 Andreas Smas
subscriptionId   int   required   Subscription ID.
583
status           str   optional   English clear text of error status. Absence of this field means that the status is OK. 
584 58 sbi -
</pre>
585 15 Andreas Smas
586 1 Andreas Smas
587 2 Andreas Smas
----
588 37 Andreas Smas
589 58 sbi -
h3. queueStatus
590
591
592 15 Andreas Smas
The queueStatus message is sent every second during normal data delivery.
593
594
The transmit scheduler have different drop thresholds for different frame types.
595
If congestion occurs it will favor dropping B-frames before P-frames before I-frames.
596
All audio is recognized as I-frames. 
597
598
Message fields:
599 58 sbi -
<pre>
600 15 Andreas Smas
subscriptionId   int   required   Subscription ID.
601
packets          int   required   Number of data packets in queue.
602
bytes            int   required   Number of bytes in queue.
603 59 John Törnblom
delay            int   optional   Estimated delay of queue (in µs).
604 15 Andreas Smas
Bdrops           int   required   Number of B-frames dropped
605 16 Andreas Smas
Pdrops           int   required   Number of P-frames dropped
606
Idrops           int   required   Number of I-frames dropped
607 58 sbi -
</pre>
608 16 Andreas Smas
609
----
610
611 58 sbi -
h3. signalStatus
612
613
614 55 Lars Op den Kamp -
The signalStatus message is sent every second during normal data delivery.
615
616
The optional fields may not have been implemented or may not be supported by the active adapter.
617
618
Message fields:
619 58 sbi -
<pre>
620 55 Lars Op den Kamp -
subscriptionId   int   required   Subscription ID.
621
feStatus         str   required   Frontend status.
622
feSNR            int   optional   Signal to noise ratio.
623
feSignal         int   optional   Signal status percentage.
624
feBER            int   optional   Bit error rate.
625
feUNC            int   optional   Uncorrected blocks.
626 58 sbi -
</pre>
627 55 Lars Op den Kamp -
628
----
629
630 58 sbi -
h3. muxpkt
631
632
633 16 Andreas Smas
Streaming data.
634
635
Message fields:
636 58 sbi -
<pre>
637 16 Andreas Smas
subscriptionId   int   required   Subscription ID.
638
frametype        int   required   Type of frame as ASCII value: 'I', 'P', 'B'
639 1 Andreas Smas
stream           int   required   Stream index. Corresponds to the streams reported in the subscriptionStart message.
640 60 John Törnblom
dts              int   optional   Decode Time Stamp in µs.
641
pts              int   optional   Presentation Time Stamp in µs.
642 1 Andreas Smas
duration         int   required   Duration of frame in µs.
643
payload          bin   required   Actual frame data.
644
645 58 sbi -
</pre>