Project

General

Profile

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>