jananathbanuka
fix issues
4b12e15
# Video Cut Endpoint
## 1. Overview
The `/v1/video/cut` endpoint is part of the Video API and allows users to cut specified segments from a video file with optional encoding settings. This endpoint fits into the overall API structure as a part of the version 1 (`v1`) routes, specifically under the `video` category.
## 2. Endpoint
```
POST /v1/video/cut
```
## 3. Request
### Headers
- `x-api-key` (required): The API key for authentication.
### Body Parameters
The request body must be a JSON object with the following properties:
- `video_url` (required, string): The URL of the video file to be cut.
- `cuts` (required, array of objects): An array of cut segments, where each object has the following properties:
- `start` (required, string): The start time of the cut segment in the format `hh:mm:ss.ms`.
- `end` (required, string): The end time of the cut segment in the format `hh:mm:ss.ms`.
- `video_codec` (optional, string): The video codec to use for encoding the output video. Default is `libx264`.
- `video_preset` (optional, string): The video preset to use for encoding the output video. Default is `medium`.
- `video_crf` (optional, number): The Constant Rate Factor (CRF) value for video encoding. Must be between 0 and 51. Default is 23.
- `audio_codec` (optional, string): The audio codec to use for encoding the output video. Default is `aac`.
- `audio_bitrate` (optional, string): The audio bitrate to use for encoding the output video. Default is `128k`.
- `webhook_url` (optional, string): The URL to receive a webhook notification when the job is completed.
- `id` (optional, string): A unique identifier for the request.
### Example Request
```json
{
"video_url": "https://example.com/video.mp4",
"cuts": [
{
"start": "00:00:10.000",
"end": "00:00:20.000"
},
{
"start": "00:00:30.000",
"end": "00:00:40.000"
}
],
"video_codec": "libx264",
"video_preset": "medium",
"video_crf": 23,
"audio_codec": "aac",
"audio_bitrate": "128k",
"webhook_url": "https://example.com/webhook",
"id": "unique-request-id"
}
```
```bash
curl -X POST \
https://api.example.com/v1/video/cut \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"video_url": "https://example.com/video.mp4",
"cuts": [
{
"start": "00:00:10.000",
"end": "00:00:20.000"
},
{
"start": "00:00:30.000",
"end": "00:00:40.000"
}
],
"video_codec": "libx264",
"video_preset": "medium",
"video_crf": 23,
"audio_codec": "aac",
"audio_bitrate": "128k",
"webhook_url": "https://example.com/webhook",
"id": "unique-request-id"
}'
```
## 4. Response
### Success Response
The response follows the general response format defined in the main application context (`app.py`). Here's an example of a successful response:
```json
{
"endpoint": "/v1/video/cut",
"code": 200,
"id": "unique-request-id",
"job_id": "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6",
"response": "https://example.com/processed-video.mp4",
"message": "success",
"pid": 12345,
"queue_id": 6789,
"run_time": 5.234,
"queue_time": 0.123,
"total_time": 5.357,
"queue_length": 0,
"build_number": "1.0.0"
}
```
The `response` field contains the URL of the processed video file.
### Error Responses
- **400 Bad Request**
```json
{
"code": 400,
"message": "Invalid request payload"
}
```
This error occurs when the request payload is missing required fields or contains invalid data.
- **401 Unauthorized**
```json
{
"code": 401,
"message": "Invalid API key"
}
```
This error occurs when the provided `x-api-key` header is missing or invalid.
- **429 Too Many Requests**
```json
{
"code": 429,
"id": "unique-request-id",
"job_id": "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6",
"message": "MAX_QUEUE_LENGTH (100) reached",
"pid": 12345,
"queue_id": 6789,
"queue_length": 100,
"build_number": "1.0.0"
}
```
This error occurs when the maximum queue length has been reached, and the request cannot be processed immediately.
- **500 Internal Server Error**
```json
{
"code": 500,
"message": "An error occurred during video processing"
}
```
This error occurs when an unexpected error occurs during the video processing or encoding.
## 5. Error Handling
The endpoint handles the following common errors:
- **Missing or invalid request parameters**: If any required parameters are missing or invalid, the endpoint returns a 400 Bad Request error with an appropriate error message.
- **Invalid API key**: If the provided `x-api-key` header is missing or invalid, the endpoint returns a 401 Unauthorized error.
- **Queue limit reached**: If the maximum queue length has been reached, the endpoint returns a 429 Too Many Requests error with the current queue length and the maximum queue length.
- **Unexpected errors during video processing**: If an unexpected error occurs during the video processing or encoding, the endpoint returns a 500 Internal Server Error with a generic error message.
The main application context (`app.py`) also includes error handling for the queue system and webhook notifications.
## 6. Usage Notes
- The `video_url` parameter must be a valid URL that points to a video file accessible by the server.
- The `cuts` parameter must be an array of objects, where each object represents a cut segment with a start and end time in the format `hh:mm:ss.ms`.
- The optional encoding parameters (`video_codec`, `video_preset`, `video_crf`, `audio_codec`, `audio_bitrate`) allow you to customize the encoding settings for the output video file.
- If the `webhook_url` parameter is provided, the server will send a webhook notification to the specified URL when the job is completed.
- The `id` parameter can be used to associate the request with a unique identifier for tracking purposes.
## 7. Common Issues
- Providing an invalid or inaccessible `video_url`.
- Specifying overlapping or invalid cut segments in the `cuts` parameter.
- Providing invalid encoding settings that are not supported by the server.
- Reaching the maximum queue length, which can cause requests to be rejected with a 429 Too Many Requests error.
## 8. Best Practices
- Validate the `video_url` parameter before sending the request to ensure it points to a valid and accessible video file.
- Ensure that the cut segments in the `cuts` parameter are correctly formatted and do not overlap or exceed the duration of the video.
- Use the optional encoding parameters judiciously, as they can impact the processing time and output video quality.
- Implement retry mechanisms for handling 429 Too Many Requests errors, as the queue length may fluctuate over time.
- Monitor the webhook notifications or poll the server for job status updates to track the progress of long-running jobs.