IPVTL Web API

HTTP + JSON interface for automation, OEM integration, and enterprise workflows.

IPVTL web API

Starting with version 6.1.4.4, the IPVTL transcoding web API is delivered as part of the software license at no additional cost whatsoever.

The API is based on the HTTP interface and uses JSON format. Integration is simple and cost-free for web developers to incorporate IPVTL functions into their own applications.

For OEM resellers, white-label options are available, including custom UI text and logo re-branding, at a one-time cost.

For experienced developers, we provide the IPVT SDK with a native C/C++ interface. Please contact our sales team for details if you are interested.

The IPVT web API requires IPVTL software to run. To evaluate the IPVT transcoding API, please download the IPVTL trial version first. Once IPVTL is running, the APIs listed below are accessible through the HTTP interface.

Note: If you are accessing the IPVT web API from a computer different from the IPVTL host, please ensure that the firewall is configured to allow traffic on the IPVTL HTTP port, and that network connectivity is verified.

Web API Authorization

If IPVTL login password is enabled in Global Settings, web API requires authorization to work as well. To do that, add HTTP cookie auth=<passwd> in the header to each GET/POST API below.

Note: The IPVT web API will not function if authentication fails.

Transcoding Config API

1. Set Config

POST http://<server_ip>:<service_port>/config

Example: http://127.0.0.1:9527/config

Request Body

{
  "name": "IP Video Transcoding Live Configuration",
  "global": { # global settings
    "log": 0, # 32 if enable channel log file
    "httpPort": 9527, # web service port
    "sslEnable": false, # enable SSL
    "sslCert": "", # SSL certificate file path
    "sslKey": "", # SSL key file path
    "ipACL": "allow all", # IP ACL rules
    "autoRun": false, # auto start program on system boot (windows only)
    "autoRestart": 1, # auto restart channel on failure
    "folderRecur": false, # recursive folder streaming
    "folderShuffle": false, # shuffle folder streaming
    "altInput":	"", # alternative input stream url
    "omxPath": "C:\\Program Files\\MainConcept\\FFmpeg-PlugIns\\bin\\omxil_core.dll", # omx core library path
    "loginPass": "" # login password
  },
  "channels": [ # channel configurations
    { # channel 1
      "enable": false, # true if start streaming on program start
      "input": { # transcoding input
        "sources": [
          {
            "format": "file", # input format
            "url": "", # source address
            "video": {
              "options": [] # gpu decode options
            }
          }
        ],
        "formatOptions": [], # blackmagic card options
        "customOptions": "", # custom source options
        "filters": [], # source filters
        "map": [] # source map 
      },
      "output": { # transcoding output
        "targets": [
          { # 1st target
            "format": "udp", # output format
            "url": "udp://127.0.0.1:1234", # target address
            "video": {
              "enable": true, # enable video output
              "codec": "h264", # video codec (see more)
              "width": 0, # video frame width
              "height": 0, # video frame height
              "frameRate": 0, # video frame rate
              "keyFrameInterval": 5, # key frame interval in seconds
              "quality": 0,
              "bitRate": 0, # video bitrate in Kb/s
              "scanType": 0, # 0: none;
                             # 1: deinterlace;
                             # 2: top-first interlace;
                             # 3: bottom-first interlace
              "options": ["-preset:v faster"] # codec specific options
            },
            "audio": {
              "enable": true, # enable audio output
              "codec": "aac", # audio codec (see more)
              "sampleRate": 0, # audio sample rate in Hz
              "channels": 2, # audio channels
              "bitRate": 0 # audio bitrate in Kb/s
            },
            "mux": {
              "bitRate": 0, # mux bitrate in Kb/s, should be larger than
                            # <video bitrate> + <audio bitrate>
              "cbr": false # true if output strict CBR
            },
            "rtmp": {
              "flashVer": "",
              "swfUrl": "",
              "user": "", # rtmp login username
              "passwd": "" # rtmp login password
            }
          },
          { # 2nd target (if multi bitrate output)
            ...
          },
          ...
        ],
        "formatOptions": [], # hls output options
        "customOptions": "" # custom target options
      },
      "memo": ""
    },
    { # channel 2
      ...
    },
    ...
  ]
}

2. Get Config

GET http://<server_ip>:<service_port>/config

Example: http://127.0.0.1:9527/config

Response Body

# Same as Set Config request body above.

Transcoding Control API

1. Start Transcoding Channel

GET http://<server_ip>:<service_port>/channel<id>?start

Example: http://127.0.0.1:9527/channel1?start

2. Stop Transcoding Channel

GET http://<server_ip>:<service_port>/channel<id>?stop

Example: http://127.0.0.1:9527/channel1?stop

3. Get Transcoding Status

GET http://<server_ip>:<service_port>/status

Example: http://127.0.0.1:9527/status

Response Body

{
  "channels": [
    {
      "state": "idle", # channel state (idle/running/stopping)
      "status": "12:34:56 30fps@1234Kbps" # channel running status
                                          # (onair time, fps, bitrate, etc)
    },
    ...
  ],
  "cpu": [
    10,11,12,13 # cpu load in percentage (per core)
  ]
}