Alert
Overview
Alert is a module that can detect anomalies and patterns of interest in a stream or system and send notifications to users. Anomalies and patterns of interest can be set through predefined , and when detected, the module sends an HTTP(S) request to the user's notification server.
Configuration
Alert can be set up on <Server>, as shown below.
<Server version="8">
<Alert>
<Url>http://192.168.0.161:9595/alert/notification</Url>
<SecretKey>1234</SecretKey>
<Timeout>3000</Timeout>
<Rules>
<Ingress>
<MinBitrate>2000000</MinBitrate>
<MaxBitrate>4000000</MaxBitrate>
<MinFramerate>15</MinFramerate>
<MaxFramerate>60</MaxFramerate>
<MinWidth>1280</MinWidth>
<MinHeight>720</MinHeight>
<MaxWidth>1920</MaxWidth>
<MaxHeight>1080</MaxHeight>
<MinSamplerate>16000</MinSamplerate>
<MaxSamplerate>50400</MaxSamplerate>
<LongKeyFrameInterval />
<HasBFrames />
</Ingress>
</Rules>
</Alert>
</Server>
| Key | Description |
|---|---|
| Url | The HTTP Server to receive the notification. HTTP and HTTPS are available. |
| Secretkey | The secret key used when encrypting with HMAC-SHA1 For more information, see Security. |
| Timeout | Time to wait for a response after request. (in milliseconds) |
| Rules | Defines anomalies and patterns of interest to be detected. |
Rules
| Key | Description | |
|---|---|---|
| Ingress | MinBitrate | Detects when the ingress stream's bitrate is lower than the set value. |
| MaxBitrate | Detects when the ingress stream's bitrate is greater than the set value. | |
| MinFramerate | Detects when the ingress stream's framerate is lower than the set value. | |
| MaxFramerate | Detects when the ingress stream's framerate is greater than the set value. | |
| MinWidth | Detects when the ingress stream's width is lower than the set value. | |
| MaxWidth | Detects when the ingress stream's width is greater than the set value. | |
| MinHeight | Detects when the ingress stream's height is lower than the set value. | |
| MaxHeight | Detects when the ingress stream's height is greater than the set value. | |
| MinSamplerate | Detects when the ingress stream's samplerate is lower than the set value. | |
| MaxSamplerate | Detects when the ingress stream's samplerate is greater than the set value. | |
| LongKeyFrameInterval | Detects when the ingress stream's keyframe interval is too long (exceeds 4 seconds). | |
| HasBFrames | Detects when there are B-frames in the ingress stream. |
Notification
Request
Format
POST /configured/target/url HTTP/1.1
Content-Length: 1037
Content-Type: application/json
Accept: application/json
X-OME-Signature: f871jd991jj1929jsjd91pqa0amm1
{
"serverInfo":{
"serverID":"b8e2f6a1-58f6-4451-b6f6-97f2b3ee4c39",
"serverName":"MyEdge-01",
"hostname":"ome-edge-01",
"ipAddresses":["203.0.113.10","192.168.0.220"]
},
"sourceUri":"#default#app/stream",
"messages":[
{
"code":"INGRESS_HAS_BFRAME",
"description":"There are B-Frames in the ingress stream."
},
{
"code":"INGRESS_BITRATE_LOW",
"description":"The ingress stream's current bitrate (316228 bps) is lower than the configured bitrate (2000000 bps)"
}
],
"sourceInfo":{
"createdTime":"2023-04-07T21:15:24.487+09:00",
"sourceType":"Rtmp",
"sourceUrl":"TCP://192.168.0.220:10639",
"tracks":[
{
"id":0,
"name":"Video",
"type":"Video",
"video":{
"bitrate":300000,
"bypass":false,
"codec":"H264",
"framerate":30.0,
"hasBframes":true,
"height":1080,
"keyFrameInterval":0,
"width":1920
}
},
{
"audio":{
"bitrate":160000,
"bypass":false,
"channel":1,
"codec":"AAC",
"samplerate":48000
},
"id":1,
"name":"Audio",
"type":"Audio"
},
{
"id":2,
"name":"Data",
"type":"Data"
}
]
},
"type":"INGRESS"
}
Here is a detailed explanation of each element of JSON payload:
| Element | Description |
|---|---|
| serverInfo | Information identifying the server that sent the notification. This is useful for distinguishing alerts when multiple OvenMediaEngine instances report to the same notification server.serverID: Unique ID of the server. It is generated when the server first starts and is persisted in the Server.id file in the configuration directory. The configuration directory must be writable for the ID to remain stable across restarts; otherwise (e.g. a read-only ConfigMap mount on Kubernetes) a new ID is generated at every startup.serverName: The value of <Server><Name> in the configuration. Omitted if not set.hostname: The OS hostname of the machine running OvenMediaEngine. On Kubernetes this is the pod name, and on Docker it is the container ID unless --hostname is specified. Omitted in the rare case that the hostname cannot be retrieved from the OS.ipAddresses: IP addresses of the server, captured at server startup. The public IP addresses resolved from <StunServer> (if configured) come first, followed by the local interface addresses (excluding loopback and IPv6 link-local addresses). Omitted when no address is available. |
| sourceUri | URI information of the detected source.INGRESS: #<vhost>#<application>/<input_stream> |
| messages | List of messages detected by the Rules. |
| sourceInfo | Detailed information about the source at the time of detection. It is identical to the response of the REST API's source information query for the detected source. |
| type | It represents the format of the JSON payload. The information of the JSON elements can vary depending on the value of the type. |
Messages
| Type | Code | Description |
|---|---|---|
| INGRESS | INGRESS_BITRATE_LOW | The ingress stream's current bitrate (%d bps) is lower than the configured bitrate (%d bps) |
| INGRESS_BITRATE_HIGH | The ingress stream's current bitrate (%d bps) is higher than the configured bitrate (%d bps) | |
| INGRESS_FRAMERATE_LOW | The ingress stream's current framerate (%.2f fps) is lower than the configured framerate (%.2f fps) | |
| INGRESS_FRAMERATE_HIGH | The ingress stream's current framerate (%f fps) is higher than the configured framerate (%f fps) | |
| INGRESS_WIDTH_SMALL | The ingress stream's width (%d) is smaller than the configured width (%d) | |
| INGRESS_WIDTH_LARGE | The ingress stream's width (%d) is larger than the configured width (%d) | |
| INGRESS_HEIGHT_SMALL | The ingress stream's height (%d) is smaller than the configured height (%d) | |
| INGRESS_HEIGHT_LARGE | The ingress stream's height (%d) is larger than the configured height (%d) | |
| INGRESS_SAMPLERATE_LOW | The ingress stream's current samplerate (%d) is lower than the configured samplerate (%d) | |
| INGRESS_SAMPLERATE_HIGH | The ingress stream's current samplerate (%d) is higher than the configured samplerate (%d) | |
| INGRESS_LONG_KEY_FRAME_INTERVAL | The ingress stream's current keyframe interval (%.1f seconds) is too long. Please use a keyframe interval of 4 seconds or less | |
| INGRESS_HAS_BFRAME | There are B-Frames in the ingress stream |
Security
The control server may need to validate incoming http requests for security reasons. To do this, the Alert module puts the X-OME-Signature value in the HTTP request header. X-OME-Signature is a base64 url safe encoded value obtained by encrypting the payload of an HTTP request with the HMAC-SHA1 algorithm using the secret key set in <Alert><SecretKey> of the configuration.
Response
The engine in the closing state does not need any parameter in response. The response payload is ignored.
HTTP/1.1 200 OK
Content-Length: 0
Connection: Closed