2022-06-21 17:10:38 -04:00
**ffplayout-api**
================
2022-06-22 15:25:30 -04:00
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:
```BASH
ffpapi -i
```
Then add an admin user:
```BASH
ffpapi -u < USERNAME > -p < PASSWORD > -e < EMAIL ADDRESS >
```
Then run the API thru the systemd service, or like:
```BASH
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:
```JSON
{
"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:
```JSON
{
"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:
```JSON
"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:
```JSON
{
"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:
```JSON
{
"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