Vidtreo
Configuração

Callbacks

Manipule eventos de gravação e mudanças de estado com callbacks do VIDTREO.

Callbacks

VIDTREO fornece callbacks para manipular eventos de gravação, progresso de upload e erros. Isso permite construir UIs responsivas e integrar com a lógica da sua aplicação.

Ciclo de Vida da Gravação

onRecordingStart

Dispara quando a gravação começa (após a contagem regressiva terminar).

<VidtreoRecorder
  onRecordingStart={() => {
    console.log('Gravação iniciada');
    setIsRecording(true);
    // Ocultar outros elementos de UI
    // Iniciar um timer
    // Registrar evento de analytics
  }}
/>

onRecordingStop

Dispara quando a gravação termina (antes do upload começar).

<VidtreoRecorder
  onRecordingStop={() => {
    console.log('Gravação parada');
    setIsRecording(false);
    setIsProcessing(true);
    // Mostrar indicador de processamento
  }}
/>

Eventos de Upload

onUploadProgress

Dispara periodicamente durante o upload com o valor de progresso (0-1).

<VidtreoRecorder
  onUploadProgress={(progress) => {
    // progress está entre 0 e 1
    const percent = Math.round(progress * 100);
    console.log(`Progresso do upload: ${percent}%`);
    setUploadProgress(percent);
  }}
/>

Exemplo de Barra de Progresso:

function Recorder() {
  const [progress, setProgress] = useState(0);
  const [isUploading, setIsUploading] = useState(false);

  return (
    <>
      <VidtreoRecorder
        onRecordingStop={() => setIsUploading(true)}
        onUploadProgress={(p) => setProgress(Math.round(p * 100))}
        onUploadComplete={() => setIsUploading(false)}
      />

      {isUploading && (
        <div className="progress-bar">
          <div
            className="progress-fill"
            style={{ width: `${progress}%` }}
          />
          <span>{progress}%</span>
        </div>
      )}
    </>
  );
}

onUploadComplete

Dispara quando o upload completa com sucesso.

<VidtreoRecorder
  onUploadComplete={(result) => {
    console.log('URL do Vídeo:', result.uploadUrl);
    console.log('ID da Gravação:', result.recordingId);

    // Salvar no seu banco de dados
    saveVideoToDatabase({
      url: result.uploadUrl,
      id: result.recordingId
    });

    // Mostrar mensagem de sucesso
    showNotification('Vídeo enviado com sucesso!');

    // Navegar para página do vídeo
    router.push(`/videos/${result.recordingId}`);
  }}
/>

Objeto Result:

interface UploadCompleteResult {
  uploadUrl: string;    // URL direta para o arquivo de vídeo
  recordingId: string;  // Identificador único da gravação
}

onUploadError

Dispara quando o upload falha.

<VidtreoRecorder
  onUploadError={(error) => {
    console.error('Upload falhou:', error.message);

    // Mostrar erro ao usuário
    showNotification('Upload falhou. Por favor tente novamente.', 'error');

    // Registrar em serviço de tracking de erros
    errorTracker.capture(error);

    // Oferecer opção de retry
    setShowRetryButton(true);
  }}
/>

Tratamento de Erros

onError

Dispara para qualquer erro durante o processo de gravação.

<VidtreoRecorder
  onError={(error) => {
    console.error('Erro do gravador:', error);

    // Tratar tipos específicos de erros
    if (error.message.includes('permission')) {
      showNotification('Por favor permita acesso à câmera');
    } else if (error.message.includes('NotSupported')) {
      showNotification('Seu navegador não suporta gravação');
    } else {
      showNotification('Ocorreu um erro');
    }
  }}
/>

Erros Comuns:

ErroCausaSolução
NotAllowedErrorUsuário negou permissão de câmera/micSolicitar ao usuário que permita acesso
NotFoundErrorCâmera ou microfone não encontradoVerificar conexões de dispositivos
NotSupportedErrorNavegador não suporta WebCodecsUsar um navegador suportado
OverconstrainedErrorRestrições solicitadas não satisfatóriasUsar restrições padrão
Upload failedErro de rede durante uploadRetry com backoff exponencial

Exemplo Completo

import { VidtreoRecorder } from '@vidtreo/recorder-react';
import { useState } from 'react';

function VideoRecorderWithCallbacks() {
  const [status, setStatus] = useState<'idle' | 'recording' | 'uploading' | 'complete' | 'error'>('idle');
  const [progress, setProgress] = useState(0);
  const [videoUrl, setVideoUrl] = useState<string | null>(null);
  const [error, setError] = useState<string | null>(null);

  return (
    <div className="recorder-container">
      <VidtreoRecorder
        apiKey={import.meta.env.VITE_VIDTREO_API_KEY}
        lang="pt"
        onRecordingStart={() => {
          setStatus('recording');
          setError(null);
        }}
        onRecordingStop={() => {
          setStatus('uploading');
        }}
        onUploadProgress={(p) => {
          setProgress(Math.round(p * 100));
        }}
        onUploadComplete={(result) => {
          setStatus('complete');
          setVideoUrl(result.uploadUrl);
          setProgress(0);
        }}
        onUploadError={(err) => {
          setStatus('error');
          setError(`Upload falhou: ${err.message}`);
        }}
        onError={(err) => {
          setStatus('error');
          setError(err.message);
        }}
      />

      {/* Indicador de status */}
      <div className="status">
        {status === 'idle' && <span>Pronto para gravar</span>}
        {status === 'recording' && <span className="recording">● Gravando</span>}
        {status === 'uploading' && <span>Enviando: {progress}%</span>}
        {status === 'complete' && <span className="success">✓ Completo</span>}
        {status === 'error' && <span className="error">✗ {error}</span>}
      </div>

      {/* Resultado do vídeo */}
      {videoUrl && (
        <div className="result">
          <video src={videoUrl} controls />
          <a href={videoUrl} download>Baixar Vídeo</a>
        </div>
      )}
    </div>
  );
}

Eventos do Web Component

Para Web Components, use addEventListener:

const recorder = document.querySelector('vidtreo-recorder');

recorder.addEventListener('recording-start', () => {
  console.log('Gravação iniciada');
});

recorder.addEventListener('recording-stop', () => {
  console.log('Gravação parada');
});

recorder.addEventListener('upload-progress', (e) => {
  console.log('Progresso:', e.detail.progress);
});

recorder.addEventListener('upload-complete', (e) => {
  console.log('URL:', e.detail.uploadUrl);
});

recorder.addEventListener('upload-error', (e) => {
  console.log('Erro:', e.detail.error);
});

recorder.addEventListener('error', (e) => {
  console.log('Erro:', e.detail.error);
});

Callbacks do Hook

Quando usar useVidtreoRecorder, passe callbacks para a configuração:

const { state, actions } = useVidtreoRecorder({
  apiKey: '...',
  onRecordingStart: () => console.log('Iniciado'),
  onRecordingStop: () => console.log('Parado'),
  onUploadProgress: (p) => console.log(`${p * 100}%`),
  onUploadComplete: (result) => console.log(result.uploadUrl),
  onUploadError: (error) => console.error(error),
  onError: (error) => console.error(error),
});

Callbacks são opcionais. O SDK manipula toda a lógica de gravação e upload automaticamente. Use callbacks para atualizar sua UI ou integrar com sua aplicação.

Próximos Passos

Nesta página