Stream health information
Stream health information
The stream health information can be used to easily view the state of the stream. Listed are the tracks, the track information, the buffer of the stream, the jitter measured to keep the connection stable, the maximum allowed playback delay and any potential issues that have been found. When you suspect your stream has issues we recommend looking at this information.
The stream health information can be accessed through multiple methods such as the active_streams call when passing longform or when the STREAM_BUFFER trigger fires upon a DRY state. You can also access this information by sending a USR2 signal to a running MistInBuffer.
Contents of stream health
While we strive to make everything immediately understandable some values below will need some additional information to truly understand how or why you should use this information. Anything commended with an * will have additional information below.
{
"health": {
"audio_opus_2ch_48000hz_1": { // Unique audio track identifier*
"buffer": 26693, // Track buffer size in millisceonds
"channels": 2, // Amount of channels available
"codec": "opus", // Track codec identifier
"idx": 1, // MistServer internal track number*
"jitter": 145, // Track jitter as measured*
"kbits": 21, // Track bitrate in kilobits
"keys": { // Track (key)frame information*
"frame_ms_max": 20,
"frame_ms_min": 19,
"frames_max": 103,
"frames_min": 103,
"ms_max": 2060,
"ms_min": 2053
},
"rate": 48000 // track audio rate
},
"buffer": 26693, // Available buffer in milliseconds*
"issues": "HLSnoaudio!", // Issues detected for the stream*
"jitter": 146, // Highest detected measured jitter on all tracks*
"maxkeepaway": 45000, // Maximum distance viewers are allowed to be from live point in milliseconds
"tracks": [ // Tracks found in this stream listed through their unique track identifier.
"video_H264_1280x720_50fps_0",
"audio_opus_2ch_48000hz_1",
],
"video_H264_1280x720_50fps_0": { // Unique video track identifier
"bframes": false, // Bframes detected*
"buffer": 26660, // Track buffer size in milliseconds
"codec": "H264", // Track codec identifier
"efpks": 50000, // Effective frames per kilosecond*
"efps": 50, // Effective frames per second*
"fpks": 50000, // Frames per kilosecond*
"fps": 50, // Frames per second*
"height": 720, // Measured track height
"idx": 0, // MistServer internal track number*
"jitter": 146, // Track jitter as measured
"kbits": 1983, // Track bitrate in kilobits
"keys": { //Track (key)frame information
"frame_ms_max": 20,
"frame_ms_min": 20,
"frames_max": 25,
"frames_min": 25,
"ms_max": 500,
"ms_min": 500
},
"width": 1280 // Track width
},
}
}
- Unique Track Identifiers
This will also be detected as the name of the track for most applications/players receiving the stream. The number is the internal track number to ensure the names are unique even if similar qualities are used. idxMistServer Internal Track number
This is the track number MistServer assigned to this track and can be used to match this track later on using track parameters.jitter
Jitter is the variance in timing on the input side and when starting playback the jitter is the minimal distance from the live point that we start playback from to prevent buffering.keys
These contain various measurements.frame_ms_min/maxis the time in millisecond between each frame.frames_min/maxare the frames between each key frame andms_min/maxis the time in milliseconds between each key frame. If all values are the same a steady frame rate and key frame interval is present. If the min/max values differ this implies a variable (key) frame interval.buffer
This is the amount of stream (in millisecond) that is kept in memory and can be used as a live DVR window. While we default playback as close to the live point as possible some players might decide to start at the end of the buffer window when given the full range.issues
These are detected potential issues detected. Generally only contains warnings as fatal errors would see the stream go offline.efpks/efps
Effective frames per (kilo)second describes the measured fps. This is average framerate of your stream as measured by MistServer. The kilo value is there to use for systems that cannot handle fractions.fpks/fps
Frames per (kilo)second as given by the stream metadata. MistServer reads this from the metadata. While generally true this can differ from efps. In that case you either have a variable framerate or a problem. The kilo value is there to use for systems that cannot handle fractions.
- A frame rate of 0 means variable and not given at all
- Some codecs have an implied variable frame rate, so even set this might not be true. Generally we recommend using
efps.
Example
{
"health": {
"audio_PCM_2ch_48000hz_2": {
"buffer": 20460,
"channels": 2,
"codec": "PCM",
"idx": 2,
"jitter": 142,
"kbits": 3000,
"keys": {
"frame_ms_max": 20,
"frame_ms_min": 20,
"frames_max": 103,
"frames_min": 103,
"ms_max": 2060,
"ms_min": 2060
},
"rate": 48000
},
"audio_opus_2ch_48000hz_1": {
"buffer": 26693,
"channels": 2,
"codec": "opus",
"idx": 1,
"jitter": 145,
"kbits": 21,
"keys": {
"frame_ms_max": 20,
"frame_ms_min": 19,
"frames_max": 103,
"frames_min": 103,
"ms_max": 2060,
"ms_min": 2053
},
"rate": 48000
},
"buffer": 26693,
"issues": "HLSnoaudio!",
"jitter": 153,
"maxkeepaway": 45000,
"tracks": [
"video_H264_1280x720_50fps_0",
"audio_opus_2ch_48000hz_1",
"audio_PCM_2ch_48000hz_2",
"video_UYVY_1280x720_50fps_3"
],
"video_H264_1280x720_50fps_0": {
"bframes": false,
"buffer": 26660,
"codec": "H264",
"efpks": 50000,
"efps": 50,
"fpks": 50000,
"fps": 50,
"height": 720,
"idx": 0,
"jitter": 146,
"kbits": 1983,
"keys": {
"frame_ms_max": 20,
"frame_ms_min": 20,
"frames_max": 25,
"frames_min": 25,
"ms_max": 500,
"ms_min": 500
},
"width": 1280
},
"video_UYVY_1280x720_50fps_3": {
"bframes": false,
"buffer": 580,
"codec": "UYVY",
"efpks": 50000,
"efps": 50,
"fpks": 50000,
"fps": 50,
"height": 720,
"idx": 3,
"jitter": 153,
"kbits": 0,
"keys": {
"frame_ms_max": 0,
"frame_ms_min": 0,
"frames_max": 0,
"frames_min": 0,
"ms_max": 0,
"ms_min": 0
},
"width": 1280
}
}
}