Project

General

Profile

Htsp » History » Version 58

sbi -, 2010-12-19 18:39

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