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
- Captura: O vídeo é capturado pela câmera e armazenado temporariamente
- Conversão: O vídeo é convertido para Base64 e armazenado no banco de dados local
- Preparação para Envio: Quando necessário, o vídeo é convertido de Base64 para arquivo temporário
- Envio: O arquivo é enviado para o servidor via FormData
- 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
- Compressão: Comprimir vídeos antes do envio para reduzir o tamanho
- Cache: Implementar estratégia de cache para evitar downloads repetidos
- Limpeza: Remover arquivos temporários após o uso
- Timeout: Configurar timeouts adequados para operações de rede
- Retry: Implementar mecanismo de retry para falhas de rede