3.8 KiB
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