Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
The REST APIs provided by OME allow you to query or change settings such as VirtualHost and Application/Stream.
There are some limitations/considerations.
If you add/change/delete the settings of the App/Output Profile by invoking the API, the app will be restarted. This means that all sessions connected to the app will be disconnected.
VirtualHost settings in Server.xml cannot be modified through API. This rule also applies to Application/OutputStream, etc. within that VirtualHost. So, if you call a POST/PUT/DELETE API for VirtualHost/Application/OutputProfile declared in Server.xml, it will not work with a 403 Forbidden error.
By default, OvenMediaEngine's API Server is disabled, so the following settings are required to use the API.
The API server's port can be set in <Bind><Managers><API>
. <Port>
is an unsecured port and <TLSPort>
is a secured port. To use TLSPort, TLS certificate must be set in the Managers.
<Server version="8">
...
<Bind>
<Managers>
<API>
<Port>8081</Port>
<TLSPort>8082</TLSPort>
</API>
</Managers>
...
</Bind>
...
</Server>
In order to use the API server, you must configure <Managers>
as well as port binding.
<Server version="8">
<Bind>
...
</Bind>
<Managers>
<Host>
<Names>
<Name>*</Name>
</Names>
<TLS>
<CertPath>airensoft_com.crt</CertPath>
<KeyPath>airensoft_com.key</KeyPath>
<ChainCertPath>airensoft_com_chain.crt</ChainCertPath>
</TLS>
</Host>
<API>
<AccessToken>your_access_token</AccessToken>
<CrossDomains>
<Url>*.airensoft.com</Url>
<Url>http://*.sub-domain.airensoft.com</Url>
<Url>http?://airensoft.*</Url>
</CrossDomains>
</API>
</Managers>
<VirtualHosts>
...
</VirtualHosts>
</Server>
In <Names>
, set the domain or IP that can access the API server. If * is set, any address is used. In order to access using the TLS Port, a certificate must be set in <TLS>
.
API Server uses Basic HTTP Authentication Scheme to authenticate clients. An AccessToken
is a plaintext credential string before base64 encoding. Setting the AccessToken to the form user-id:password
per RFC7617 allows standard browsers to pass authentication, but it is not required.
For more information about HTTP Basic authentication, refer to the URL below.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication
To enable CORS on your API Server, you can add a setting. You can add * to allow all domains. If contains a scheme, such as https://, only that scheme can be allowed, or if the scheme is omitted, such as *.airensoft.com, all schemes can be accepted.
API endpoints are provided in the following format.
Method http://API.Server.Address[:Port]/v1/Resource
Method https://API.Server.Address[:TLSPort]/v1/Resource
OvenMediaEngine supports GET, POST, and DELETE methods, and sometimes supports PATCH depending on the type of resource. For detailed API specifications, please check the subdirectory of this chapter.
In OvenMediaEngine's REST API, action is provided in the following format.
POST http://host/v1/resource:{action name}
For example, an action to send an ID3 Timedmeta event to an LLHLS stream is provided by the endpoint below.
POST http://-/v1/vhosts/{vhost}/apps/{app}/streams/{stream}:sendEvent
In this API reference document, the API endpoint is described as follows. Note that scheme://Host[:Port] is omitted for all endpoints.
Describe the required header values.
Header-Key: Value
# Header-Key
Description
Describe the request body content. The body of all APIs consists of Json content. Therefore, the Content-Type
header value is always application/json
, which can be omitted in the document.
{
"requestId": "value"
}
# key (required)
The description of the key/value of the body content is provided like this.
Responses from API endpoints are provided in the following format.
Description of response headers
Header-Key: Value
Description the response body content. The body of all response consists of Json content. Therefore, the Content-Type
header value is always application/json
, which can be omitted in the document.
{
"statusCode": 200,
"message": "OK",
"response": {
}
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Response Contents
Batch reload certificates of all Virtual Hosts. In case of failure, the existing certificate will continue to be used.
Request
Responses
The request has succeeded
Header
Content-Type: application/json
Body
{
"message": "OK",
"statusCode": 200
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
Failed to reload certificate. Keep the existing certificate. The reason for the failure can be found in the server logs.
Reload the certificate of the specified Virtual Hosts. In case of failure, the existing certificate will continue to be used.
Request
Responses
List all application names in the virtual host.
Request
Responses
The request has succeeded
Content-Type: application/json
{
"statusCode": 200,
"message": "OK",
"response": [
"app",
"app2",
"app3"
]
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Json array containing a list of application names
Create application in the virtual host
Request
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
Configure applications to be created in Json array format.
[
{
"name": "app",
"type": "live",
"outputProfiles": {
"outputProfile": [
{
"name": "default",
"outputStreamName": "${OriginStreamName}",
"encodes": {
"audios": [
{
"name": "opus",
"codec": "opus",
"samplerate": 48000,
"bitrate": 128000,
"channel": 2,
"bypassIfMatch": {
"codec": "eq"
}
},
{
"name": "aac",
"codec": "aac",
"samplerate": 48000,
"bitrate": 128000,
"channel": 2,
"bypassIfMatch": {
"codec": "eq"
}
}
],
"videos": [
{
"name": "bypass_video",
"bypass": true
}
]
}
}
]
},
"providers": {
"ovt": {},
"rtmp": {},
"rtspPull": {},
"srt": {},
"webrtc": {}
},
"publishers": {
"llhls": {},
"ovt": {},
"webrtc": {}
}
}
]
# name (required)
Application name to create
# type (required)
live - currently only support live
# outputProfiles (optional)
Set OutputProfile for Transcoding. See the ABR and Transcoding chapter for more details. If no outputProfiles are present in the request, a default outputProfile as above is configured.
# providers (optional)
Configure providers. See the Live Source chapter for details. If providers are not present in the request, they are configured with default providers as above.
# publishers (optional)
Configure publishers. See the Streaming chapter for details. If publishers are not present in the request, they are configured with default publishers as above.
Responses
The request has succeeded
Content-Type: application/json
It responds with Json array for each request.
[
{
"statusCode": 200,
"message": "OK",
"response": {
"name": "app",
"outputProfiles": {
...
"providers": {
"ovt": {},
"rtmp": {},
...
},
{
"statusCode": 200,
"message": "OK",
"response": {
...
}
}
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Created application information
There might be a mixture of responses.
Content-Type: application/json
It responds with Json array for each request.
[
{
"statusCode": 200,
"message": "OK",
"response": {
"name": "app",
"outputProfiles": {
...
"providers": {
"ovt": {},
"rtmp": {},
...
},
{
"statusCode": 409,
"message": "Conflict",
"response": {
...
}
}
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Application information created when statusCode is 200
Request
Responses
The request has succeeded
Content-Type: application/json
{
"statusCode": 200,
"message": "OK",
"response": {
"dynamic": false,
"name": "app",
"type": "live",
"outputProfiles": {
"outputProfile": [
{
"encodes": {
"audios": [
{
"bitrate": 128000,
"bypassIfMatch": {
"codec": "eq"
},
"channel": 2,
"codec": "opus",
"name": "opus",
"samplerate": 48000
},
{
"bitrate": 128000,
"bypassIfMatch": {
"codec": "eq"
},
"channel": 2,
"codec": "aac",
"name": "aac",
"samplerate": 48000
}
],
"videos": [
{
"bypass": true,
"name": "bypass_video"
}
]
},
"name": "bypass",
"outputStreamName": "${OriginStreamName}"
}
]
},
"providers": {
"ovt": {},
"rtmp": {},
"rtspPull": {},
"srt": {},
"webrtc": {}
},
"publishers": {
"llhls": {},
"ovt": {},
"webrtc": {}
}
}
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Application information
Modify application settings. If this request succeeds, the Application will be restarted.
Request
Responses
The request has succeeded
Content-Type: application/json
{
"statusCode": 200,
"message": "OK",
"response": {
"dynamic": false,
"name": "app",
"type": "live",
"outputProfiles": {
"outputProfile": [
{
"encodes": {
"audios": [
{
"bitrate": 128000,
"bypassIfMatch": {
"codec": "eq"
},
"channel": 2,
"codec": "opus",
"name": "opus",
"samplerate": 48000
},
{
"bitrate": 128000,
"bypassIfMatch": {
"codec": "eq"
},
"channel": 2,
"codec": "aac",
"name": "aac",
"samplerate": 48000
}
],
"videos": [
{
"bypass": true,
"name": "bypass_video"
}
]
},
"name": "bypass",
"outputStreamName": "${OriginStreamName}"
}
]
},
"providers": {
"ovt": {},
"rtmp": {},
"rtspPull": {},
"srt": {},
"webrtc": {
"timeout": 60000
}
},
"publishers": {
"llhls": {},
"ovt": {},
"webrtc": {}
}
}
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Mofified application information
Invalid request.
{
"message": "[HTTP] Cannot change [name] using this API (400)",
"statusCode": 400
}
Request
Responses
Request
Responses
The request has succeeded
Content-Type: application/json
{
"statusCode": 200,
"message": "OK",
"response": [
"default",
"audio_only"
]
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Json array containing a list of output profile names
Add an Output Profile to the Application. If this request succeeds, the application will be restarted.
Request
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
Configure output profiles to be created in Json array format.
[
{
"name": "bypass_profile",
"outputStreamName": "${OriginStreamName}_bypass",
"encodes": {
"videos": [
{
"bypass": true
}
],
"audios": [
{
"bypass": true
}
]
}
}
]
# name (required)
The name of the output profile. cannot be duplicated
# outputStreamName (required)
The name of the output stream to be created through this profile.
# encodes (required)
encode profile list. It must have videos or audios, and must have at least one item.
Responses
The request has succeeded
Content-Type: application/json
It responds with Json array for each request.
[
{
"statusCode": 200,
"message": "OK",
"response": {
"name": "bypass_profile",
"outputStreamName": "${OriginStreamName}_bypass",
"encodes": {
"audios": [],
"videos": [
{
"bypass": true
}
]
}
},
{
"statusCode": 200,
"message": "OK",
"response": {
...
}
}
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Created output profile information
There might be a mixture of responses.
Content-Type: application/json
It responds with Json array for each request.
[
{
"statusCode": 200,
"message": "OK",
"response": {
"name": "app",
"outputProfiles": {
...
"providers": {
"ovt": {},
"rtmp": {},
...
},
{
"statusCode": 409,
"message": "Conflict",
"response": {
...
}
}
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Output profile information created when statusCode is 200
Request
Responses
The request has succeeded
Content-Type: application/json
{
"statusCode": 200,
"message": "OK",
"response": {
"name": "bypass_profile2",
"outputStreamName": "${OriginStreamName}_bypass"
"encodes": {
"audios": [],
"videos": [
{
"bypass": true
}
]
}
}
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Output Profile information
Delete output profile settings. If this request succeeds, the Application will be restarted.
Request
Responses
Request
Responses
The request has succeeded
Content-Type: application/json
{
"statusCode": 200,
"message": "OK",
"response": [
"default",
"service",
"poc"
]
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Json array containing a list of virtual host names
Request
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
Configure virtual hosts to be created in Json array format.
[
{
"name": "vhost",
"host": {
"names": [
"ome-dev.airensoft.com",
"prod.airensoft.com"
],
"tls": {
"certPath": "/etc/pki/airensoft.com/_airensoft_com.crt",
"chainCertPath": "/etc/pki/airensoft.com/_airensoft_com.ca-bundle",
"keyPath": "/etc/pki/airensoft.com/_airensoft_com.key"
}
},
"signedPolicy": {
"enables": {
"providers": "rtmp,webrtc,srt",
"publishers": "webrtc,llhls"
},
"policyQueryKeyName": "policy",
"secretKey": "aKq#1kj",
"signatureQueryKeyName": "signature"
},
"admissionWebhooks": {
"controlServerUrl": "https://control.server/admission",
"enables": {
"providers": "rtmp,webrtc,srt",
"publishers": "webrtc,llhls"
},
"secretKey": "",
"timeout": 3000
},
"origins": {
"origin": [
{
"location": "/app/rtsp",
"pass": {
"scheme": "rtsp",
"urls": {
"url": [
"rtsp.server:8554/ca-01"
]
}
}
}
]
},
"originMapStore": {
"originHostName": "ome-dev.airensoft.com",
"redisServer": {
"auth": "!@#ovenmediaengine",
"host": "redis.server:6379"
}
}
},
{
"name": "vhost2",
"host": {
"names": [
"ovenmediaengine.com"
],
"tls": {
"certPath": "/etc/pki/ovenmediaengine.com/_ovenmediaengine_com.crt",
"chainCertPath": "/etc/pki/ovenmediaengine.com/_ovenmediaengine_com.ca-bundle",
"keyPath": "/etc/pki/ovenmediaengine.com/_ovenmediaengine_com.key"
}
}
}
]
# name (required)
The virtual host name. Cannot be duplicated.
# host (required)
## names (required)
The addresses(IP or Domain)of the host.
## tls (optional)
The certificate file path. Required if using TLS.
# signedPolicy (optional)
The SignedPolicy setting. Please refer to the manual for details.
# admissionWebhooks (optional)
The AdmissionWebhooks setting. Please refer to the manual for details.
# origins (optional)
The Origins setting. Please refer to the manual for details.
# originMapStore (optional)
The OriginMapStore setting. Please refer to the manual for details.
Responses
The request has succeeded
Content-Type: application/json
It responds with Json array for each request.
[
{
"message": "OK",
"statusCode": 200,
"response": {
"name": "enterprise",
"host": {
"names": [
"ome-dev.airensoft.com",
"prod.airensoft.com"
],
"tls": {
"certPath": "/etc/pki/airensoft.com/_airensoft_com.crt",
"chainCertPath": "/etc/pki/airensoft.com/_airensoft_com.ca-bundle",
"keyPath": "/etc/pki/airensoft.com/_airensoft_com.key"
}
},
"signedPolicy": {
"enables": {
"providers": "rtmp,webrtc,srt",
"publishers": "webrtc,llhls"
},
"policyQueryKeyName": "policy",
"secretKey": "aKq#1kj",
"signatureQueryKeyName": "signature"
},
"admissionWebhooks": {
"controlServerUrl": "https://control.server/admission",
"enables": {
"providers": "rtmp,webrtc,srt",
"publishers": "webrtc,llhls"
},
"secretKey": "",
"timeout": 3000
},
"origins": {
"origin": [
{
"location": "/app/rtsp",
"pass": {
"scheme": "rtsp",
"urls": {
"url": [
"rtsp.server:8554/ca-01"
]
}
}
}
]
},
"originMapStore": {
"originHostName": "ome-dev.airensoft.com",
"redisServer": {
"auth": "!@#ovenmediaengine",
"host": "redis.server:6379"
}
}
}
},
{
"message": "OK",
"statusCode": 200,
"response": {
"name": "free",
"host": {
"names": [
"ovenmediaengine.com"
],
"tls": {
"certPath": "/etc/pki/ovenmediaengine.com/_ovenmediaengine_com.crt",
"chainCertPath": "/etc/pki/ovenmediaengine.com/_ovenmediaengine_com.ca-bundle",
"keyPath": "/etc/pki/ovenmediaengine.com/_ovenmediaengine_com.key"
}
}
}
}
]
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Created virtual host information
There might be a mixture of responses.
Content-Type: application/json
It responds with Json array for each request.
[
{
"statusCode": 200,
"message": "OK",
"response": {
"name": "enterprise",
"host": {
"names": [
...
},
{
"statusCode": 409,
"message": "Conflict",
"response": {
...
}
}
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Virtual host information created when statusCode is 200
Request
Responses
The request has succeeded
Content-Type: application/json
"message": "OK",
"statusCode": 200
"response": {
"name": "default",
"distribution": "ovenServer",
"host": {
"name": "default",
"distribution": "ovenServer",
"host": {
"names": [
"ome-dev.airensoft.com",
"*"
],
"tls": {
"certPath": "/etc/pki/airensoft.com/_airensoft_com.crt",
"chainCertPath": "/etc/pki/airensoft.com/_airensoft_com.ca-bundle",
"keyPath": "/etc/pki/airensoft.com/_airensoft_com.key"
}
},
"signedPolicy": {
"enables": {
"providers": "rtmp,webrtc,srt",
"publishers": "webrtc,llhls"
},
"policyQueryKeyName": "policy",
"secretKey": "aKq#1kj",
"signatureQueryKeyName": "signature"
},
"admissionWebhooks": {
"controlServerUrl": "https://control.server/admission",
"enables": {
"providers": "rtmp,webrtc,srt",
"publishers": "webrtc,llhls"
},
"secretKey": "",
"timeout": 3000
},
"origins": {
"origin": [
{
"location": "/app/rtsp",
"pass": {
"scheme": "rtsp",
"urls": {
"url": [
"rtsp.server:8554/ca-01"
]
}
}
}
]
},
"originMapStore": {
"originHostName": "ome-dev.airensoft.com",
"redisServer": {
"auth": "!@#ovenmediaengine",
"host": "redis.server:6379"
}
}
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Virtual host information
Request
Responses
Start recording the stream. If the requested stream does not exist on the server, this recording task is reserved. And when the stream is created, it automatically starts recording.
Request
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
{
"id": "{unique_record_id}",
"stream": {
"name": "{output_stream_name}",
"variantNames": []
}
}
# id (required)
unique ID to identify the recording task
# stream (required)
## name (required)
output stream name
## variantNames (optional)
Array of track names to record. If empty, all tracks will be
recorded. This value is Encodes.[Video|Audio|Data].Name in the
OutputProfile setting.
{
"id": "{unique_record_id}",
"stream": {
"name": "{output_stream_name}"
},
"interval": 60000,
"segmentationRule": "discontinuity"
}
# id (required)
unique ID to identify the recording task
# stream (required)
## name (required)
output stream name
## variantNames (optional)
Array of track names to record. If empty, all tracks will be
recorded. This value is Encodes.[Video|Audio|Data].Name in the
OutputProfile setting.
# interval (optional)
Recording time per file (milliseconds). Not allowed to use with schedule
# segmentationRule (optional)
Define the policy for continuously or discontinuously timestamp
in divided recorded files.
continuity : timestamp of recorded files is continuous
discontinuity(default) : timestamp starts anew for each recorded file
{
"id": "{unique_record_id}",
"stream": {
"name": "{output_stream_name}"
},
"schedule" : "0 */1 *"
"segmentationRule": "continuity"
}
# id (required)
unique ID to identify the recording task
# stream (required)
## name (required)
output stream name
## variantNames (optional)
Array of track names to record. If empty, all tracks will be
recorded. This value is Encodes.[Video|Audio|Data].Name in the
OutputProfile setting.
# schedule (optional)
<Second Minute Hour> format, same as crontab syntax
"10 */1 *" means to output the recorded file every 10 minutes of the hour
Not allowed to use with schedule
# segmentationRule (optional)
Define the policy for continuously or discontinuously timestamp
in divided recorded files.
continuity : timestamp of recorded files is continuous
discontinuity(default) : timestamp starts anew for each recorded file
Responses
The request has succeeded
Content-Type: application/json
Please note that responses
are incorrectly returned in Json array format for version 0.15.3 and earlier.
{
"statusCode": 200,
"message": "OK",
"response": {
"id": "2",
"state": "ready",
"vhost": "default",
"app": "app",
"stream": {
"name": "stream",
"trackIds": [],
"variantNames": []
},
"interval": 60000,
"segmentationRule": "discontinuity",
"createdTime": "2023-03-15T21:15:20.113+09:00",
}
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Created recording task information
Request
Responses
Request
Responses
The request has succeeded
Content-Type: application/json
The response
is Json array format.
{
"statusCode": 200,
"message": "OK",
"response": [
{
"id": "2",
"state": "recording",
"vhost": "default",
"app": "app",
"stream": {
"name": "stream",
"trackIds": [],
"variantNames": []
},
"interval": 60000,
"segmentationRule": "discontinuity",
"createdTime": "2023-03-15T21:15:20.113+09:00",
},
{
"id": "3",
...
}
]
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Information of recording tasks. If there is no recording task,
response with empty array ("response": [])
The Recording task has the state shown in the table below. You can get the state
in the Start Recording and Get Recording State API response.
For live streaming of certain events, it may be necessary to immediately stop the HLS live stream and switch to VoD after the HLS live broadcast ends. This API transitions to VoD by stopping segment updates for LL-HLS and HLS streams and inserting #EXT-X-ENDLIST. By using this API with a , you can implement additional application services.
Request
Responses
It allows you to insert events into streams. Right now events only support the ID3v2 format and only the LLHLS publisher handles it. Events delivered to LLHLS Publisher are inserted as emsg boxes within the m4s container.
Request
Responses
The can be controlled with this API.
Request
Responses
Request
Responses
The info file is continuously updated after the dump file is written. It is in XML format and is as follows. will continue to be added.
Start push publishing the stream with SRT, RTMP or MPEG2-TS. If the requested stream does not exist on the server, this task is reserved. And when the stream is created, it automatically starts push publishing.
Request
Header
Body : SRT
In SRT Push Publisher, only the caller
connection mode is supported.
Body : RTMP
Body : MPEG2-TS
Responses
The request has succeeded
Header
Body
Please note that responses
are incorrectly returned in Json array format for version 0.15.3 and earlier.
Request
Responses
Request
Responses
The Push Publishing task has the state shown in the table below. You can get the state
in the Start Push Publishing and Get Push Publishing State API response.
Get all stream names in the {vhost name}/{app name} application.
Request
Responses
Create a stream by pulling an external URL. External URL protocols currently support RTSP and OVT.
Request
Responses
Get detailed information of stream.
Request
Responses
Delete Stream. This terminates the ingress connection.
Request
Responses
ScheduledChannel allows you to create a live channel by scheduling pre-recorded files has been added to OvenMediaEngine. Other services or software call this Pre-recorded Live or File Live, but OvenMediaEngine plans to expand the function to organize live channels as a source, so we named it Scheduled Channel.
ScheduledChannel can be controlled by API or file. For more information about ScheduledChannel, see below.
The body of the API all has the same structure as the ScheduledChannel schedule file.
Get all scheduled channels in the {vhost name}/{app name} application.
Request
Responses
Create a Scheduled channel.
Request
Responses
Update the schedule. <Stream>
cannot be PATCHed.
Request
Responses
Get detailed information of scheduled channel. It also provides information about the currently playing program and item.
Request
Responses
Delete Scheduled Channel
Request
Responses
State | Description |
---|
The sender can reconnect after the connection is terminated. To prevent reconnection, you must use .
Ready
Preparing to start or waiting for the stream to be created.
Started
In Progress
Stopping
Is stopping
Stopped
Stopped
Error
Error
ready | Waiting for the stream to be created. |
connecting | Connecting to destination |
pushing | Connected and streaming |
stopping | Disconnection / stop in progress |
stopped | Push is disconnected / stopped |
error | Push encountered an error |
Content-Type: application/json
<HLSDumpInfo>
<UserData>~~~</UserData>
<Stream>/default/app/stream</Stream>
<Status>Running | Completed | Error </Status>
<Items>
<Item>
<Seq>0</Seq>
<Time>~~~</Time>
<File>~~~</File>
</Item>
...
<Item>
<Seq>1</Seq>
<Time>~~~</Time>
<File>/tmp/abc/xxx/298182/chunklist_0_video_llhls.m3u8</File>
</Item>
...
<Item>
<Seq>2</Seq>
<Time>~~~</Time>
<File>chunklist_0_video_llhls.m3u8</File>
</Item>
</Items>
</HLSDumpInfo>
Content-Type: application/json
Content-Type: application/json
Content-Type: application/json
keyFrameInterval is GOP size
Content-Type: application/json
Content-Type: application/json
Content-Type: application/json
Content-Type: application/json
Content-Type: application/json
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
{}
{
"statusCode": 200,
"message": "OK",
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
WWW-Authenticate: Basic realm=”OvenMediaEngine”
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
{
"statusCode": 404,
"message": "Could not find the application: [default/non-exists] (404)"
}
Content-Type: application/json
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
{
"eventFormat": "id3v2",
"eventType": "video",
"events":[
{
"frameType": "TXXX",
"info": "AirenSoft",
"data": "OvenMediaEngine"
},
{
"frameType": "TIT2",
"data": "OvenMediaEngine 123"
}
]
}
# eventFormat
Currently only id3v2 is supported.
# eventType (Optional, Default : event)
Select one of event, video, and audio. event inserts an event into every track.
video inserts events only on tracks of video type.
audio inserts events only on tracks of audio type.
# events
It accepts only Json array format and can contain multiple events.
## frameType
Currently, only TXXX and T??? (Text Information Frames, e.g. TIT2) are supported.
## info
This field is used only in TXXX and is entered in the Description field of TXXX.
## data
If the frameType is TXXX, it is entered in the Value field,
and if the frameType is "T???", it is entered in the Information field.
{
"statusCode": 200,
"message": "OK",
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Json array containing a list of stream names
WWW-Authenticate: Basic realm=”OvenMediaEngine”
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
{
"statusCode": 404,
"message": "Could not find the application: [default/non-exists] (404)"
}
Content-Type: application/json
Authorization: Basic {credentials}
Content-Type: application/json
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
{
"outputStreamName": "stream",
"id": "unique_dump_id",
"outputPath": "/tmp/",
"playlist" : ["llhls.m3u8", "abr.m3u8"],
"infoFile": "/home/abc/xxx/unique_info_file_name.info",
"userData": "access_key_id='AKIAXFOT7EWH3ZA4XXXX'"
}
# outputStreamName (required)
The name of the output stream created with OutputProfile.
# id (required)
ID for this API request.
# outputPath (required)
Directory path to output. The directory must be writable by the OME process.
OME will create the directory if it doesn't exist.
# playlist (optional)
Dump the master playlist set in outputPath. It must be entered
in Json array format, and multiple playlists can be specified.
# infoFile (optional)
This is the name of the DB file in which the information of the dumped files is
updated. If this value is not provided, no file is created. An error occurs
if a file with the same name exists. (More details below)
# userData (optional)
If infoFile is specified, this data is written to infoFile. Does not work
if infoFile is not specified.
{
"statusCode": 200,
"message": "OK",
"response": [
"stream",
"stream2"
]
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Json array containing a list of stream names
WWW-Authenticate: Basic realm=”OvenMediaEngine”
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
Content-Type: application/json
{
"statusCode": 404,
"message": "Could not find the application: [default/non-exists] (404)"
}
Authorization: Basic {credentials}
Content-Type: application/json
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
{
"outputStreamName": "stream",
"id": "dump_id"
}
# outputStreamName (required)
The name of the output stream created with OutputProfile.
# id (optional)
This is the id passed when calling the startHlsDump API.
If id is not passed, all dump in progress at outputStreamName is aborted.
{
"statusCode": 200,
"message": "OK",
"response": [
"stream",
"stream2"
]
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Json array containing a list of stream names
WWW-Authenticate: Basic realm=”OvenMediaEngine”
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
Content-Type: application/json
{
"statusCode": 404,
"message": "Could not find the application: [default/non-exists] (404)"
}
Content-Type: application/json
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
{
"id": "{unique_push_id}",
"stream": {
"name": "{output_stream_name}",
"variantNames": []
},
"protocol": "srt",
"url": "srt://{host}[:port]?mode=caller&latency=120000&timeout=500000",
"streamKey": ""
}
# id (required)
unique ID to identify the task
# stream (required)
## name (required)
output stream name
## variantNames (optional)
Array of track names to publsh.
This value is Encodes.[Video|Audio|Data].Name in the OutputProfile
setting.
If empty, all tracks will be sent.
# protocol (required)
srt
# url (required)
address of destination.
options can be set in query-string format.
# streamKey (optional)
not used with mpegts
{
"id": "{unique_push_id}",
"stream": {
"name": "{output_stream_name}",
"variantNames": [ "h264_fhd", "aac" ]
},
"protocol": "rtmp",
"url":"rtmp://{host}[:port]/{app_name}",
"streamKey":"{stream_name}"
}
# id (required)
unique ID to identify the task
# stream (required)
## name (required)
output stream name
## variantNames (optional)
Array of track names to publsh.
This value is Encodes.[Video|Audio|Data].Name in the OutputProfile
setting.
If empty, The first track among video tracks (by ID) and the first
track among audio tracks (by ID) are selected automatically.
# protocol (required)
rtmp
# url (required)
address of destination
# streamKey (required)
RTMP stream key
{
"id": "{unique_push_id}",
"stream": {
"name": "{output_stream_name}",
"variantNames": []
},
"protocol": "mpegts",
"url": "udp://{host}[:port]",
"streamKey": ""
}
# id (required)
unique ID to identify the task
# stream (required)
## name (required)
output stream name
## variantNames (optional)
Array of track names to publsh.
This value is Encodes.[Video|Audio|Data].Name in the OutputProfile
setting.
If empty, all tracks will be sent.
# protocol (required)
mpegts
# url (required)
address of destination
# streamKey (optional)
not used with mpegts
{
"statusCode": 200,
"message": "OK",
"response": {
"id": "{unique_push_id}",
"state": "ready",
"vhost": "default",
"app": "app",
"stream": {
"name": "{output_stream_name}",
"trackIds": [],
"variantNames": []
},
"protocol": "rtmp",
"url": "rtmp://{host}[:port]/{app_name}",
"streamKey": "{stream_name}",
"sentBytes": 0,
"sentTime": 0,
"sequence": 0,
"totalsentBytes": 0,
"totalsentTime": 0,
"createdTime": "2023-03-15T23:02:34.371+09:00",
"startTime": "1970-01-01T09:00:00.000+09:00",
"finishTime": "1970-01-01T09:00:00.000+09:00"
}
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Created push publishing task information
WWW-Authenticate: Basic realm=”OvenMediaEngine”
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
{
"message": "[HTTP] Could not find the application: [vhost/app1] (404)",
"statusCode": 404
}
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
{
"id": "{unique_push_id}"
}
# id (required)
unique ID to identify the push publishing task
{
"statusCode": 200,
"message": "OK",
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
WWW-Authenticate: Basic realm=”OvenMediaEngine”
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
{
"message": "[HTTP] Could not find the application: [vhost/app1] (404)",
"statusCode": 404
}
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
{
"id": "{unique_push_id}"
}
# id (optional)
unique ID to identify the push publishing task. If no id is given in the request, the full list is returned.
{
"statusCode": 200,
"message": "OK",
"response": [
{
"id": "{unique_push_id}",
"state": "started",
"vhost": "default",
"app": "app",
"stream": {
"name": "{output_stream_name}",
"trackIds": [],
"variantNames": []
},
"protocol": "rtmp",
"url": "rtmp://{host}[:port]/{app_name}",
"streamKey": "{stream_name}",
"sentBytes": 0,
"sentTime": 0,
"sequence": 0,
"totalsentBytes": 0,
"totalsentTime": 0,
"createdTime": "2023-03-15T23:02:34.371+09:00",
"startTime": "1970-01-01T09:00:00.000+09:00",
"finishTime": "1970-01-01T09:00:00.000+09:00"
},
{
"id": "4",
...
}
]
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Information of recording tasks. If there is no recording task,
response with empty array ("response": [])
WWW-Authenticate: Basic realm=”OvenMediaEngine”
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
{
"message": "[HTTP] Could not find the application: [vhost/app1] (404)",
"statusCode": 404
}
Content-Type: application/json
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
{
"statusCode": 200,
"message": "OK",
"response": [
"stream",
"stream2"
]
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Json array containing a list of stream names
WWW-Authenticate: Basic realm=”OvenMediaEngine”
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
Content-Type: application/json
{
"statusCode": 404,
"message": "Could not find the application: [default/non-exists] (404)"
}
Authorization: Basic {credentials}
Content-Type: application/json
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
{
"name": "new_stream_name",
"urls": [
"rtsp://192.168.0.160:553/app/stream",
"url to pull the stream from - support OVT/RTSP",
"Only urls with the same scheme can be sent as a group."
],
"properties":{
"persistent": false,
"noInputFailoverTimeoutMs": 3000,
"unusedStreamDeletionTimeoutMs": 60000,
"ignoreRtcpSRTimestamp": false
}
}
# name (required)
Stream name to create
# urls (required)
A list of URLs to pull streams from, in Json array format.
All URLs must have the same scheme.
# properties (optional)
## persistent
Created as a persistent stream, not deleted until DELETE
## noInputFailoverTimeoutMs
If no data is input during this period, the stream is deleted,
but ignored if persistent is true
## unusedStreamDeletionTimeoutMs
If no data is output during this period (if there is no viewer),
the stream is deleted, but ignored if persistent is true
## ignoreRtcpSRTimestamp
No waits RTCP SR and start stream immediately
Content-Type: application/json
{
"message": "Created",
"statusCode": 201
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
WWW-Authenticate: Basic realm=”OvenMediaEngine”
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
{
"statusCode": 404,
"message": "Could not find the application: [default/non-exists] (404)"
}
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
{
"statusCode": 200,
"message": "OK",
"response": {
"input": {
"createdTime": "2021-01-11T03:45:21.879+09:00",
"sourceType": "Rtmp",
"tracks": [
{
"id": 0,
"type": "Video",
"video": {
"bitrate": "2500000",
"bypass": false,
"codec": "H264",
"framerate": 30.0,
"hasBframes": false,
"keyFrameInterval": 30,
"height": 720,
"width": 1280
}
},
{
"id": 1,
"audio": {
"bitrate": "128000",
"bypass": false,
"channel": 2,
"codec": "AAC",
"samplerate": 48000
},
"type": "Audio"
}
]
},
"name": "stream",
"outputs": [
{
"name": "stream",
"tracks": [
{
"id": 0,
"type": "Video",
"video": {
"bypass": true
}
},
{
"id": 1,
"audio": {
"bypass": true
},
"type": "Audio"
},
{
"id": 2,
"audio": {
"bitrate": "128000",
"bypass": false,
"channel": 2,
"codec": "OPUS",
"samplerate": 48000
},
"type": "Audio"
}
]
}
]
}
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Details of the stream
WWW-Authenticate: Basic realm=”OvenMediaEngine”
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
Content-Type: application/json
{
"statusCode": 404,
"message": "Could not find the application or stream (404)"
}
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
{
"statusCode": 200,
"message": "OK",
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
WWW-Authenticate: Basic realm=”OvenMediaEngine”
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
Content-Type: application/json
{
"message": "[HTTP] Could not find the stream: [default/#default#app/stream] (404)",
"statusCode": 404
}
Content-Type: application/json
{
"statusCode": 404,
"message": "Could not find the application: [default/non-exists] (404)"
}
Authorization: Basic {credentials}
Content-Type: application/json
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
{
"stream": {
"name": "stream2",
"bypassTranscoder": false,
"videoTrack": true,
"audioTrack": true
},
"fallbackProgram": {
"items": [
{
"url": "file://video/sample.mp4",
"start": 0,
"duration": 60000
}
]
},
"programs": [
{
"name": "1",
"scheduled": "2023-11-13T20:57:00.000+09",
"repeat": true,
"items": [
{
"url": "file://video/sample.mp4",
"start": 0,
"duration": 60000
},
{
"url": "file://video/1.mp4",
"start": 0,
"duration": 60000
}
]
},
{
"name": "2",
"scheduled": "2023-11-14T20:57:00.000+09",
"repeat": true,
"items": [
{
"url": "file://1.mp4",
"start": 0,
"duration": 60000
},
{
"url": "file://sample.mp4",
"start": 0,
"duration": 60000
}
]
}
]
}
Content-Type: application/json
{
"message": "Created",
"statusCode": 201
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
WWW-Authenticate: Basic realm=”OvenMediaEngine”
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
{
"statusCode": 404,
"message": "Could not find the application: [default/non-exists] (404)"
}
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
{
"fallbackProgram": {
"items": [
{
"url": "file://video/sample.mp4",
"start": 5000,
"duration": 30000
}
]
},
"programs": [
{
"name": "1",
"scheduled": "2023-11-10T20:57:00.000+09",
"repeat": true,
"items": [
{
"url": "file://video/1.mp4",
"start": 0,
"duration": 60000
}
]
},
{
"name": "2",
"scheduled": "2023-11-20T20:57:00.000+09",
"repeat": true,
"items": [
{
"url": "file://video/1.mp4",
"start": 0,
"duration": 60000
},
{
"url": "file://video/sample.mp4",
"start": 0,
"duration": 60000
}
]
}
]
}
{
"message": "Created",
"statusCode": 201
}
{
"message": "[HTTP] Cannot change [name] using this API (400)",
"statusCode": 400
}
WWW-Authenticate: Basic realm=”OvenMediaEngine”
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
{
"message": "[HTTP] Could not find the application: [default/app2] (404)",
"statusCode": 404
}
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
{
"message": "OK",
"response": {
"currentProgram": {
"currentItem": {
"currentPosition": 1700,
"duration": 60000,
"start": 0,
"url": "file://video/1.mp4"
},
"duration": -1,
"end": "2262-04-12T08:47:16.854+09:00",
"name": "2",
"repeat": true,
"scheduled": "2023-11-20T20:57:00.000+09:00",
"state": "onair"
},
"fallbackProgram": {
"items": [
{
"duration": -1,
"start": 0,
"url": "file://hevc.mov"
},
{
"duration": -1,
"start": 0,
"url": "file://avc.mov"
}
],
"name": "fallback",
"repeat": true,
"scheduled": "1970-01-01T00:00:00Z"
},
"programs": [
{
"name": "2",
"repeat": true,
"scheduled": "2023-11-20T20:57:00.000+09"
}
],
"stream": {
"audioTrack": true,
"bypassTranscoder": false,
"name": "stream",
"videoTrack": true
}
},
"statusCode": 200
}
WWW-Authenticate: Basic realm=”OvenMediaEngine”
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
Content-Type: application/json
{
"statusCode": 404,
"message": "Could not find the application or stream (404)"
}
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
{
"statusCode": 200,
"message": "OK",
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
WWW-Authenticate: Basic realm=”OvenMediaEngine”
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
Content-Type: application/json
{
"message": "[HTTP] Could not find the stream: [default/#default#app/stream] (404)",
"statusCode": 404
}
Provides statistics of virtual host, application, and stream.
Request
Header
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
Responses
The request has succeeded
Header
Content-Type: application/json
Body
{
"statusCode": 200,
"message": "OK",
"response": {
"connections": {
"file": 0,
"llhls": 0,
"mpegtspush": 0,
"ovt": 0,
"rtmppush": 0,
"thumbnail": 0,
"webrtc": 0
},
"createdTime": "2023-03-15T19:46:13.728+09:00",
"lastRecvTime": "2023-03-15T19:46:13.728+09:00",
"lastSentTime": "2023-03-15T19:46:13.728+09:00",
"lastUpdatedTime": "2023-03-15T19:46:13.728+09:00",
"lastThroughputIn": 0,
"lastThroughputOut": 0,
"maxTotalConnectionTime": "2023-03-15T19:46:13.728+09:00",
"maxTotalConnections": 0,
"totalBytesIn": 0,
"totalBytesOut": 0,
"totalConnections": 0,
"avgThroughputIn": 0,
"avgThroughputOut": 0,
"maxThroughputIn": 0,
"maxThroughputOut": 0
}
}
Authentication required
Header
WWW-Authenticate: Basic realm=”OvenMediaEngine”
Body
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
The given vhost name could not be found.
Body
{
"message": "[HTTP] Could not find the virtual host: [default1] (404)",
"statusCode": 404
}
Request
Header
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
Responses
The request has succeeded
Header
Content-Type: application/json
Body
{
"statusCode": 200,
"message": "OK",
"response": {
"connections": {
"file": 0,
"llhls": 0,
"mpegtspush": 0,
"ovt": 0,
"rtmppush": 0,
"thumbnail": 0,
"webrtc": 0
},
"createdTime": "2023-03-15T19:46:13.728+09:00",
"lastRecvTime": "2023-03-15T19:46:13.728+09:00",
"lastSentTime": "2023-03-15T19:46:13.728+09:00",
"lastUpdatedTime": "2023-03-15T19:46:13.728+09:00",
"lastThroughputIn": 0,
"lastThroughputOut": 0,
"maxTotalConnectionTime": "2023-03-15T19:46:13.728+09:00",
"maxTotalConnections": 0,
"totalBytesIn": 0,
"totalBytesOut": 0,
"totalConnections": 0,
"avgThroughputIn": 0,
"avgThroughputOut": 0,
"maxThroughputIn": 0,
"maxThroughputOut": 0
}
}
Authentication required
Header
WWW-Authenticate: Basic realm=”OvenMediaEngine”
Body
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
The given vhost or application name could not be found.
Body
{
"message": "[HTTP] Could not find the application: [default/app1] (404)",
"statusCode": 404
}
Request
Header
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
Responses
The request has succeeded
Header
Content-Type: application/json
Body
{
"statusCode": 200,
"message": "OK",
"response": {
"connections": {
"file": 0,
"llhls": 0,
"mpegtspush": 0,
"ovt": 0,
"rtmppush": 0,
"thumbnail": 0,
"webrtc": 0
},
"createdTime": "2023-03-15T19:46:13.728+09:00",
"lastRecvTime": "2023-03-15T19:46:13.728+09:00",
"lastSentTime": "2023-03-15T19:46:13.728+09:00",
"lastUpdatedTime": "2023-03-15T19:46:13.728+09:00",
"lastThroughputIn": 0,
"lastThroughputOut": 0,
"maxTotalConnectionTime": "2023-03-15T19:46:13.728+09:00",
"maxTotalConnections": 0,
"totalBytesIn": 0,
"totalBytesOut": 0,
"totalConnections": 0,
"avgThroughputIn": 0,
"avgThroughputOut": 0,
"maxThroughputIn": 0,
"maxThroughputOut": 0
}
}
Content-Type: application/json
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
{
"message": "OK",
"response": [
"stream"
],
"statusCode": 200
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Json array containing a list of stream names
WWW-Authenticate: Basic realm=”OvenMediaEngine”
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
Using MultiplexChannel, you can combine multiple internal streams into one ABR stream, or duplicate the stream and send it to another application.
MultiplexChannel can be controlled by API or file. See below for more information about MultiplexChannel.
The body of the API all has the same structure as the mux file.
Get all multiplex channels in the {vhost name}/{app name} application.
Request
Header
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
Responses
The request has succeeded
Header
Content-Type: application/json
Body
{
"message": "OK",
"response": [
"stream"
],
"statusCode": 200
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
# response
Json array containing a list of stream names
Authentication required
Header
WWW-Authenticate: Basic realm=”OvenMediaEngine”
Body
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
The given vhost name or app name could not be found.
Header
Content-Type: application/json
Body
{
"statusCode": 404,
"message": "Could not find the application: [default/non-exists] (404)"
}
Create a multiplex channel.
Request
Header
Authorization: Basic {credentials}
Content-Type: application/json
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
Body
{
"outputStream": {
"name": "stream"
},
"sourceStreams": [
{
"name": "input1",
"url": "stream://default/app/input1",
"trackMap": [
{
"sourceTrackName": "bypass_video",
"newTrackName": "input1_video",
"bitrateConf": 5000000,
"framerateConf": 30
},
{
"sourceTrackName": "bypass_audio",
"newTrackName": "input1_audio",
"bitrateConf": 128000
}
]
},
{
"name": "input2",
"url": "stream://default/app/input2",
"trackMap": [
{
"sourceTrackName": "bypass_video",
"newTrackName": "input2_video",
"bitrateConf": 1000000,
"framerateConf": 30
},
{
"sourceTrackName": "bypass_audio",
"newTrackName": "input2_audio",
"bitrateConf": 128000
}
]
}
],
"playlists": [
{
"name": "LLHLS ABR",
"fileName": "abr",
"options": {
"webrtcAutoAbr": true,
"hlsChunklistPathDepth": 0
},
"renditions": [
{
"name": "input1",
"video": "input1_video",
"audio": "input1_audio"
},
{
"name": "input2",
"video": "input2_video",
"audio": "input2_audio"
}
]
}
]
}
Responses
A stream has been created.
Header
Content-Type: application/json
Body
{
"message": "Created",
"statusCode": 201
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code
Authentication required
Header
WWW-Authenticate: Basic realm=”OvenMediaEngine”
Body
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
The given vhost name or app name could not be found.
Body
{
"statusCode": 404,
"message": "Could not find the application: [default/non-exists] (404)"
}
Get detailed information of multiplex channel. It also provides information about the currently playing program and item.
Request
Header
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
Responses
The request has succeeded
Header
Content-Type: application/json
Body
{
"message": "OK",
"statusCode": 200,
"response": {
"state": "Pulling",
"pullingMessage": "Multiplex Channel : #default#app/stream: Wait for stream input1",
"outputStream": {
"name": "stream"
},
"playlists": [
{
"fileName": "abr",
"name": "LLHLS ABR",
"options": {
"hlsChunklistPathDepth": 0,
"webrtcAutoAbr": true
},
"renditions": [
{
"audio": "input1_audio",
"name": "input1",
"video": "input1_video"
},
{
"audio": "input2_audio",
"name": "input2",
"video": "input2_video"
}
]
}
],
"sourceStreams": [
{
"name": "input1",
"trackMap": [
{
"bitrateConf": 128000,
"newTrackName": "input1_audio",
"sourceTrackName": "bypass_audio"
},
{
"bitrateConf": 5000000,
"framerateConf": 30,
"newTrackName": "input1_video",
"sourceTrackName": "bypass_video"
}
],
"url": "stream://default/app/input1"
},
{
"name": "input2",
"trackMap": [
{
"bitrateConf": 128000,
"newTrackName": "input2_audio",
"sourceTrackName": "bypass_audio"
},
{
"bitrateConf": 1000000,
"framerateConf": 30,
"newTrackName": "input2_video",
"sourceTrackName": "bypass_video"
}
],
"url": "stream://default/app/input2"
}
]
}
}
Authentication required
Header
WWW-Authenticate: Basic realm=”OvenMediaEngine”
Body
{
"message": "[HTTP] Authorization header is required to call API (401)",
"statusCode": 401
}
The given vhost name or app name could not be found.
Header
Content-Type: application/json
Body
{
"statusCode": 404,
"message": "Could not find the application or stream (404)"
}
Delete Multiplex Channel
Request
Header
Authorization: Basic {credentials}
# Authorization
Credentials for HTTP Basic Authentication created with <AccessToken>
Responses
The request has succeeded
Header
Content-Type: application/json
Body
{
"statusCode": 200,
"message": "OK",
}
# statusCode
Same as HTTP Status Code
# message
A human-readable description of the response code