Passer au contenu principal

Vue d’ensemble

L’API Video 360 vous permet de televerser des videos 360 de vehicules, d’extraire automatiquement des images et de generer des vues 360 interactives pour une meilleure experience client. Ideale pour presenter l’exterieur, l’interieur et des inspections detaillees.

Fonctionnalites cles

Televersement video

Televerser des videos 360 jusqu’a 100 Mo par fichier

Extraction d'images

Extraction automatique d’images a des intervalles optimaux

Multiples cotes

Prise en charge des vues OUTSIDE, INSIDE et OPEN (coffre/capot)

Stockage cloud

Stockage S3 securise avec acces via URL signee

Formats video pris en charge

L’API accepte les formats suivants :
  • MP4 (.mp4) - Recommande
  • AVI (.avi)
  • MOV (.mov)
  • WMV (.wmv)
  • FLV (.flv)
  • WebM (.webm)
  • MKV (.mkv)
  • QuickTime (.mov, .qt)

Endpoints

Televerser une video 360

POST
endpoint
/360/upload
Televerser un fichier video 360 vers S3 et declencher l’extraction d’images. Type de contenu : multipart/form-data Parametres de formulaire :
video
file
requis
Fichier video (max 100 Mo)
side
enum
requis
Cote du vehicule : OUTSIDE, INSIDE, OPEN
Reponse :
{
  "success": true,
  "message": "360 video uploaded successfully",
  "data": {
    "message": "Video uploaded and processing started",
    "jobId": "job_550e8400-e29b-41d4-a716",
    "video": {
      "key": "360/videos/job_550e8400/OUTSIDE/video.mp4",
      "url": "https://s3.amazonaws.com/bucket/360/videos/job_550e8400/OUTSIDE/video.mp4",
      "originalName": "exterior_360.mp4",
      "size": 45678901,
      "mimetype": "video/mp4",
      "jobId": "job_550e8400-e29b-41d4-a716"
    }
  }
}
Champs de reponse :
jobId
string
Identifiant unique pour suivre le traitement
key
string
Cle d’objet S3 pour la video televersee
url
string
URL publique de la video televersee
originalName
string
Nom de fichier d’origine
size
number
Taille du fichier en octets
mimetype
string
Type MIME du fichier
Exemple de requete :
curl -X POST "https://api.steerai.autos/v1/360/upload" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "video=@exterior_360.mp4" \
  -F "side=OUTSIDE"

Recuperer les images traitees

GET
endpoint
/360/frames
Recuperer les images extraites d’une video 360 traitee avec des URLs signees. Parametres de requete :
jobId
string
requis
ID du job issu du televersement video
side
enum
requis
Cote du vehicule : OUTSIDE, INSIDE, OPEN
Reponse :
{
  "success": true,
  "message": "Frames retrieved successfully",
  "data": {
    "message": "360 frames found",
    "jobId": "job_550e8400-e29b-41d4-a716",
    "side": "OUTSIDE",
    "frames": [
      "https://s3.amazonaws.com/bucket/360/frames/job_550e8400/OUTSIDE/frame_001.jpg?X-Amz-Signature=...",
      "https://s3.amazonaws.com/bucket/360/frames/job_550e8400/OUTSIDE/frame_002.jpg?X-Amz-Signature=...",
      "https://s3.amazonaws.com/bucket/360/frames/job_550e8400/OUTSIDE/frame_003.jpg?X-Amz-Signature=..."
    ],
    "frameCount": 72
  }
}
Champs de reponse :
frames
array
Tableau d’URLs signees des images (valides 1 heure)
frameCount
number
Nombre total d’images extraites
Les URLs des images sont signees et expirent apres 1 heure. Regenerer les URLs en rappelant cet endpoint.

Recuperer les masques d’images

GET
endpoint
/360/mask-frames
Recuperer les masques d’images traites (utilises pour les overlays de detection IA) avec des URLs signees. Parametres de requete :
carId
string
requis
UUID du vehicule
side
enum
requis
Cote du vehicule : OUTSIDE, INSIDE, OPEN
Reponse :
{
  "success": true,
  "message": "Mask frames retrieved successfully",
  "data": {
    "message": "360 mask frames found",
    "carId": "car_550e8400-e29b-41d4-a716",
    "side": "OUTSIDE",
    "frames": [
      "https://s3.amazonaws.com/bucket/360/masks/car_550e8400/OUTSIDE/mask_001.png?X-Amz-Signature=...",
      "https://s3.amazonaws.com/bucket/360/masks/car_550e8400/OUTSIDE/mask_002.png?X-Amz-Signature=..."
    ],
    "frameCount": 72
  }
}
Les masques montrent les zones de dommages detectes par l’IA superposees aux images du vehicule.

Nettoyer les donnees 360

POST
endpoint
/360/cleanup
Supprimer les donnees 360 et les images pour un vehicule et un cote. Utilise pour gerer le stockage et supprimer le contenu obsolete. Corps de requete :
{
  "carId": "car_550e8400-e29b-41d4-a716",
  "side": "OUTSIDE",
  "removeProcessed": true
}
carId
string
requis
UUID du vehicule
side
enum
requis
Cote du vehicule : OUTSIDE, INSIDE, OPEN
removeProcessed
boolean
Supprimer aussi les images traitees (defaut : true)
Reponse :
{
  "success": true,
  "message": "360 data cleaned up successfully",
  "data": {
    "filesDeleted": 73,
    "rawVideoDeleted": true,
    "framesDeleted": true,
    "masksDeleted": true
  }
}
Cette operation supprime definitivement les videos et les images. Cette action est irreversible.

Workflow video 360

Cotes du vehicule

OUTSIDE

Vue 360 complete de l’exterieur :
  • Les quatre cotes du vehicule
  • Roues et pneus
  • Etat exterieur
  • Qualite de peinture
  • Dommages ou bosses
Bonne pratique : Marcher autour du vehicule en cercle complet, en gardant une hauteur constante.

INSIDE

Vue 360 complete de l’interieur :
  • Tableau de bord et commandes
  • Sieges avant et arriere
  • Console centrale
  • Etat interieur
  • Toutes les fonctionnalites de l’habitacle
Bonne pratique : Filmer depuis le siege conducteur, puis cote passager pour une couverture complete.

OPEN

Compartiments ouverts et stockage :
  • Coffre
  • Compartiment moteur
  • Inspection sous capot
  • Compartiments de rangement
Bonne pratique : Positionner la camera pour montrer toute la profondeur et les elements visibles.

Considerations de taille de fichier

QualiteResolutionDureeTaille approx.Recommande
Standard1080p30-60s20-40 MB✅ Yes
High2K30-60s40-70 MB✅ Yes
Ultra4K30-60s70-100 MB⚠️ Max limit
Too Large4K+60s+100+ MB❌ Exceeds limit
Les fichiers de plus de 100 Mo seront refuses. Compresser les videos si necessaire tout en conservant la qualite.

Details d’extraction d’images

Extraction automatique

  • Frame Rate: 5 images par seconde (configurable)
  • Total Frames: ~60-120 images par video
  • Format: Images JPEG (qualite optimisee)
  • Resolution: Conserve la resolution d’origine
  • Temps de traitement: 1-3 minutes en general

Convention de nommage des images

Les images sont nommees de facon sequentielle :
frame_001.jpg
frame_002.jpg
frame_003.jpg
...
frame_072.jpg

Cas d’usage

Exemple 1 : Televerser un vehicule complet

# Upload exterior 360 video
curl -X POST "https://api.steerai.autos/v1/360/upload" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "video=@exterior_360.mp4" \
  -F "side=OUTSIDE"

# Upload interior 360 video
curl -X POST "https://api.steerai.autos/v1/360/upload" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "video=@interior_360.mp4" \
  -F "side=INSIDE"

# Upload trunk/engine 360 video
curl -X POST "https://api.steerai.autos/v1/360/upload" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "video=@open_360.mp4" \
  -F "side=OPEN"

Exemple 2 : Recuperer et afficher des images

// Fetch frames after processing
async function get360Frames(jobId, side) {
  const response = await fetch(
    `https://api.steerai.autos/v1/360/frames?jobId=${jobId}&side=${side}`,
    {
      headers: { 'Authorization': `Bearer ${API_KEY}` }
    }
  );

  const { data } = await response.json();
  return data.frames;
}

// Display in 360 viewer
async function display360View(jobId) {
  const frames = await get360Frames(jobId, 'OUTSIDE');

  // Initialize 360 viewer library
  const viewer = new Viewer360({
    container: '#viewer-container',
    frames: frames,
    autoRotate: true,
    rotationSpeed: 2
  });
}

Exemple 3 : Gestion du stockage

# Clean up old 360 data
curl -X POST "https://api.steerai.autos/v1/360/cleanup" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "carId": "car_550e8400-e29b-41d4-a716",
    "side": "OUTSIDE",
    "removeProcessed": true
  }'

Codes d’erreur

CodeStatutDescription
FILE_TOO_LARGE413La video depasse la limite de 100 Mo
INVALID_FILE_TYPE400Format video non pris en charge
MISSING_VIDEO_FILE400Aucun fichier video fourni
INVALID_SIDE400Cote du vehicule invalide
JOB_NOT_FOUND404ID de job introuvable
FRAMES_NOT_READY404Les images ne sont pas encore pretes
UPLOAD_FAILED500Erreur de televersement S3
PROCESSING_FAILED500Echec de l’extraction d’images

Bonnes pratiques

La lumiere naturelle ou un showroom bien eclaire donne les meilleurs resultats. Evitez les ombres et les reflets.
Marchez a un rythme regulier autour du vehicule. Trop vite cree des images floues.
Conservez une hauteur et un angle constants pour un rendu professionnel.
Retirez la salete, les debris et le desordre pour la meilleure presentation.
Compressez les grandes videos tout en conservant la qualite pour rester sous 100 Mo.
Les vues OUTSIDE, INSIDE et OPEN offrent une couverture complete.
Utilisez l’endpoint de nettoyage pour gerer les couts de stockage et supprimer les videos obsoletes.

Integration avec l’API Vehicles

L’API Video 360 s’integre parfaitement a l’API Vehicles :
// Complete vehicle listing workflow
async function createVehicleWith360(vehicleData, videoFiles) {
  // Step 1: Create vehicle
  const vehicle = await createVehicle(vehicleData);

  // Step 2: Upload 360 videos
  const outsideJob = await upload360Video(videoFiles.outside, 'OUTSIDE');
  const insideJob = await upload360Video(videoFiles.inside, 'INSIDE');
  const openJob = await upload360Video(videoFiles.open, 'OPEN');

  // Step 3: Wait for processing
  await waitForProcessing([outsideJob.jobId, insideJob.jobId, openJob.jobId]);

  // Step 4: Get frames
  const outsideFrames = await get360Frames(outsideJob.jobId, 'OUTSIDE');
  const insideFrames = await get360Frames(insideJob.jobId, 'INSIDE');
  const openFrames = await get360Frames(openJob.jobId, 'OPEN');

  // Step 5: Update vehicle with frame URLs
  await updateVehicle(vehicle.id, {
    media360: {
      outside: outsideFrames,
      inside: insideFrames,
      open: openFrames
    }
  });

  return vehicle;
}

Ressources associees