SDK y ejemplos de código — Integra la API de FFHub en tu aplicación
Ejemplos de código para integrar la API de FFHub en tu aplicación.
FFHub expone una API REST sencilla. A continuación encontrarás ejemplos de código en los lenguajes más populares para empezar rápidamente.
Node.js / JavaScript
const response = await fetch('https://api.ffhub.io/v1/tasks', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
command: 'ffmpeg -i input.mp4 -c:v libx264 -crf 28 output.mp4'
})
});
const { task_id } = await response.json();
// Consulta el estado hasta que la tarea termine (polling)
const checkStatus = async (taskId) => {
const res = await fetch(`https://api.ffhub.io/v1/tasks/${taskId}`, {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});
return res.json();
};
Python
import requests
response = requests.post(
'https://api.ffhub.io/v1/tasks',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={'command': 'ffmpeg -i input.mp4 -c:v libx264 -crf 28 output.mp4'}
)
task_id = response.json()['task_id']
# Consulta el estado de la tarea (polling)
def check_status(task_id):
res = requests.get(
f'https://api.ffhub.io/v1/tasks/{task_id}',
headers={'Authorization': 'Bearer YOUR_API_KEY'}
)
return res.json()
cURL
curl -X POST https://api.ffhub.io/v1/tasks \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"command": "ffmpeg -i input.mp4 -c:v libx264 output.mp4"}'
Consulta el estado de la tarea:
curl https://api.ffhub.io/v1/tasks/TASK_ID \
-H "Authorization: Bearer YOUR_API_KEY"
Callback mediante webhook
En lugar de hacer polling, puedes indicar una URL de webhook para recibir una notificación cuando la tarea finalice:
const response = await fetch('https://api.ffhub.io/v1/tasks', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
command: 'ffmpeg -i input.mp4 -c:v libx264 -crf 28 output.mp4',
webhook: 'https://your-server.com/api/ffhub-callback'
})
});
Cuando la tarea finaliza, FFHub envía una solicitud POST a tu URL de webhook con el resultado:
{
"task_id": "task_abc123",
"status": "completed",
"outputs": [
{
"filename": "output.mp4",
"url": "https://storage.ffhub.io/outputs/task_abc123/output.mp4",
"size": 10485760
}
]
}
Flujo de subida de archivos
Si el archivo de origen es local (no es una URL pública), súbelo primero y luego usa la URL devuelta en tu comando de FFmpeg:
Paso 1: Sube el archivo
const formData = new FormData();
formData.append('file', fileBlob, 'input.mp4');
const uploadRes = await fetch('https://api.ffhub.io/v1/files', {
method: 'POST',
headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
body: formData
});
const { url } = await uploadRes.json();
Paso 2: Usa la URL en tu comando de FFmpeg
const taskRes = await fetch('https://api.ffhub.io/v1/tasks', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
command: `ffmpeg -i ${url} -c:v libx264 -crf 28 output.mp4`
})
});