ffplayout/ffplayout-api
2022-06-22 21:29:48 +02:00
..
debian refractor code 2022-06-21 23:10:38 +02:00
src spelling, reorganize code 2022-06-22 21:25:46 +02:00
unit refractor code 2022-06-21 23:10:38 +02:00
Cargo.toml add file move/copy, add file delete and file upload 2022-06-22 18:00:31 +02:00
README.md spelling 2022-06-22 21:29:48 +02:00

ffplayout-api

ffplayout-api (ffpapi) is a on strict REST API for ffplayout. It makes it possible to control the engine, read and manipulate the config, save playlist, etc.

To be able to use the API it is necessary to initialize the settings database first. To do that, run:

ffpapi -i

Then add an admin user:

ffpapi -u <USERNAME> -p <PASSWORD> -e <EMAIL ADDRESS>

Then run the API thru the systemd service, or like:

ffpapi -l 127.0.0.1:8080

Possible endpoints

For all endpoints an (Bearer) authentication is required.
{id} represent the channel id, and at default is 1.

Login is

  • POST /auth/login/
    JSON Data: {"username": "<USER>", "password": "<PASS>"}
    JSON Response:
{
	"message": "login correct!",
	"status": 200,
	"data": {
		"id": 1,
		"email": "user@example.org",
		"username": "user",
		"token": "<TOKEN>"
	}
}

From here on all request must contain the authorization header:
"Authorization: Bearer <TOKEN>"

User

  • PUT /api/user/{user id}
    JSON Data: {"email": "<EMAIL>", "password": "<PASS>"}

  • POST /api/user/
    JSON Data:

{
    "email": "<EMAIL>",
    "username": "<USER>",
    "password": "<PASS>",
    "role_id": 1
}

API Settings

  • GET /api/settings/{id}
    HEADER: Response is in JSON format

  • PATCH /api/settings/{id}
    JSON Data:

    "id": 1,
    "channel_name": "Channel 1",
    "preview_url": "http://localhost/live/stream.m3u8",
    "config_path": "/etc/ffplayout/ffplayout.yml",
    "extra_extensions": ".jpg,.jpeg,.png"

Playout Config

  • GET /api/playout/config/{id}
    Response is in JSON format

  • PUT /api/playout/config/{id}
    JSON Data: { <CONFIG DATA> }
    Response is in TEXT format

Text Presets

  • GET /api/presets/
    Response is in JSON format

  • PUT /api/playout/presets/{id}
    JSON Data:

{
    "name": "<PRESET NAME>",
    "text": "<TEXT>",
    "x": "<X>",
    "y": "<Y>",
    "fontsize": 24,
    "line_spacing": 4,
    "fontcolor": "#ffffff",
    "box": 1,
    "boxcolor": "#000000",
    "boxborderw": 4,
    "alpha": "<alpha>"
}

Response is in TEXT format

  • POST /api/playout/presets/
    JSON Data: { <PRESET DATA> }
    Response is in TEXT format

Playout Process Control

  • POST /api/control/{id}/text/¸ JSON Data:
{
    "text": "Hello from ffplayout",
    "x": "(w-text_w)/2",
    "y": "(h-text_h)/2",
     "fontsize": "24",
     "line_spacing": "4",
     "fontcolor": "#ffffff",
     "box": "1",
     "boxcolor": "#000000",
     "boxborderw": "4",
     "alpha": "1.0"
}

Response is in TEXT format

  • POST api/control/{id}/playout/next/
    Response is in TEXT format

  • POST api/control/{id}/playout/back/
    Response is in TEXT format

  • POST api/control/{id}/playout/reset/
    Response is in TEXT format

  • GET /api/control/{id}/media/current/
    Response is in JSON format

  • GET /api/control/{id}/media/next/
    Response is in JSON format

  • GET /api/control/{id}/media/last/
    Response is in JSON format

Playlist Operations

  • GET /api/playlist/{id}/2022-06-20
    Response is in JSON format

  • POST /api/playlist/1/
    JSON Data: { <PLAYLIST DATA> }
    Response is in TEXT format

  • GET /api/playlist/{id}/generate/2022-06-20
    Response is in JSON format

  • DELETE /api/playlist/{id}/2022-06-20
    Response is in TEXT format

File Operations

  • GET /api/file/{id}/browse/
    Response is in JSON format

  • POST /api/file/{id}/move/
    JSON Data: {"source": "<SOURCE>", "target": "<TARGET>"}
    Response is in JSON format

  • DELETE /api/file/{id}/remove/
    JSON Data: {"source": "<SOURCE>"}
    Response is in JSON format

  • POST /file/{id}/upload/
    Multipart Form: name=<TARGET PATH>, filename=<FILENAME>
    Response is in TEXT format