Pular para o conteúdo principal

Serviços de Vídeo

Última atualização: 30 de julho de 2024

Visão Geral

Este documento descreve os serviços responsáveis pelo processamento, envio e download de vídeos no aplicativo Promoter.

Serviços Principais

Envio de Vídeos

Localização: src/services/Activity/sendVideoAttachment.ts

Este serviço é responsável por enviar vídeos para o servidor.

const sendVideoAttachment = async (NUPRM: string, formData: FormData) => {
try {
const response = await api.post(`/note/${NUPRM}/saveVideo`, formData);
return response;
} catch (error) {
console.log("❌ Erro ao enviar vídeo:", error);
throw error;
}
};

Download de Vídeos

Localização: src/services/Records/downloadRecordVideoService.ts

Este serviço é responsável por baixar vídeos do servidor.

const downloadRecordVideoService = async (
NUPRM: string,
body: { FILENAME: string; NUVIDEO: string }
) => {
try {
const response = await api.post(`/note/${NUPRM}/downloadVideo`, body, {
responseType: "arraybuffer",
});
return response;
} catch (error) {
console.log("erro no downloadRecordVideoService", error);
}
};

Conversão de Vídeos

Localização: src/services/backgroundTasks/convertToSend.ts

Este serviço é responsável por converter vídeos para o formato adequado para envio.

const convertVideoToSend = async (base64: string, id: string, type: string) => {
try {
// Converter Base64 para arquivo temporário
const filePath = await getVideoFilePathFromBase64(base64, id, type);

// Criar FormData para upload
const formData = new FormData();
formData.append("file", {
uri: filePath,
name: `video_${type}_${Date.now()}.mp4`,
type: "video/mp4",
} as any);

return formData;
} catch (error) {
console.log("❌ Erro ao converter vídeo:", error);
throw error;
}
};

Utilitários

Conversão de Base64 para Arquivo

Localização: src/utils/getVideoFilePathFromBase64.ts

Este utilitário converte vídeos em formato Base64 para arquivos temporários.

const getVideoFilePathFromBase64 = async (
base64: string,
id: string,
type: string
): Promise<string> => {
try {
// Remover cabeçalho do Base64 se existir
const base64Data = base64.includes("base64,")
? base64.split("base64,")[1]
: base64;

// Definir caminho do arquivo temporário
const fileDir = FileSystem.cacheDirectory + "videos/";
const filePath = fileDir + `${id}_${type}.mp4`;

// Criar diretório se não existir
await FileSystem.makeDirectoryAsync(fileDir, { intermediates: true });

// Escrever arquivo
await FileSystem.writeAsStringAsync(filePath, base64Data, {
encoding: FileSystem.EncodingType.Base64,
});

return filePath;
} catch (error) {
console.log("❌ Erro ao converter Base64 para arquivo:", error);
throw error;
}
};

Fluxo de Processamento

  1. Captura: O vídeo é capturado pela câmera e armazenado temporariamente
  2. Conversão: O vídeo é convertido para Base64 e armazenado no banco de dados local
  3. Preparação para Envio: Quando necessário, o vídeo é convertido de Base64 para arquivo temporário
  4. Envio: O arquivo é enviado para o servidor via FormData
  5. Download: Quando necessário, o vídeo é baixado do servidor e armazenado localmente

Considerações de Performance

  • Tamanho dos Arquivos: Vídeos podem ser grandes, o que pode impactar o desempenho do aplicativo
  • Memória: A conversão de Base64 para arquivo pode consumir muita memória
  • Rede: O envio e download de vídeos podem consumir muita largura de banda

Boas Práticas

  1. Compressão: Comprimir vídeos antes do envio para reduzir o tamanho
  2. Cache: Implementar estratégia de cache para evitar downloads repetidos
  3. Limpeza: Remover arquivos temporários após o uso
  4. Timeout: Configurar timeouts adequados para operações de rede
  5. Retry: Implementar mecanismo de retry para falhas de rede