Pular para o conteúdo principal

Streaming de Vídeos Grandes com Node.js e ReactJS


Se você precisa exibir vídeos grandes (mais de 1GB) sem sobrecarregar o frontend, a melhor solução é o streaming progressivo.

1. Configurando o Servidor Node.js

Crie um servidor com Express para servir o vídeo em partes, permitindo que o player carregue apenas o necessário.



const express = require("express"); const fs = require("fs"); const path = require("path");
const app = express(); const PORT = 3000;
app.get("/video", (req, res) => { const videoPath = path.join(__dirname, "videos", "meu_video.mp4"); const stat = fs.statSync(videoPath); const fileSize = stat.size; const range = req.headers.range;

if (range) {
    const parts = range.replace(/bytes=/, "").split("-");
    const start = parseInt(parts[0], 10);
    const end = parts[1] ? parseInt(parts[1], 10) : fileSize - 1;
    const chunkSize = (end - start) + 1;
    const fileStream = fs.createReadStream(videoPath, { start, end });
    res.writeHead(206, {
        "Content-Range": `bytes ${start}-${end}/${fileSize}`,
        "Accept-Ranges": "bytes",
        "Content-Length": chunkSize,
        "Content-Type": "video/mp4",
    });
    fileStream.pipe(res);
} else {
    res.writeHead(200, {
        "Content-Length": fileSize,
        "Content-Type": "video/mp4",
    });
	   fs.createReadStream(videoPath).pipe(res);
}
});

app.listen(PORT, () => console.log(Servidor rodando na porta ${PORT})); 

2. Consumindo o Vídeo no ReactJS

No frontend, usamos a tag <video> para carregar o vídeo do backend.



import React from "react";

const VideoPlayer = () => { return (<\video controls width="800"> <\source src="http://localhost:3000/video" type="video/mp4" /> Seu navegador não suporta a reprodução de vídeos. <\/video>" ); };

export default VideoPlayer; 

3. Benefícios da Abordagem

  • Streaming eficiente: O navegador carrega apenas o necessário.
  • Menos uso de memória: O servidor não carrega o arquivo inteiro.
  • Suporte a saltos no vídeo: O usuário pode avançar ou retroceder sem baixar tudo.

Conclusão

Com essa abordagem, conseguimos melhorar a experiência do usuário e otimizar o consumo de recursos. Para vídeos ainda maiores, podemos utilizar HLS (HTTP Live Streaming). Caso precise dessa solução, deixe um comentário!

Comentários

Postagens mais visitadas deste blog

Como Subir o ChromaDB com Docker-Compose

Como Subir o ChromaDB com Docker-Compose Como Subir o ChromaDB com Docker-Compose O ChromaDB é um banco de dados vetorial de alto desempenho, ideal para aplicações que utilizam inteligência artificial e busca semântica. Neste post, vamos mostrar como subir o ChromaDB utilizando o Docker-Compose . Pré-requisitos Docker instalado ( Instruções ) Docker Compose instalado ( Instruções ) Passo 1: Criando o arquivo docker-compose.yml Crie um diretório para o projeto e dentro dele, crie o arquivo docker-compose.yml com o seguinte conteúdo: version: '3.8' services: chromadb: image: ghcr.io/chroma-core/chroma:latest container_name: chromadb restart: always ports: - "8000:8000" volumes: - chroma_data:/chroma volumes: chroma_data: driver: local Passo 2: Subindo o ChromaDB Agora, no terminal, navegue até a pasta onde está o arquivo ...

Guia de instalação e configuração do Portainer no Ubuntu

  Guia Completo de Instalação do Portainer.io no Docker O Portainer.io é uma ferramenta poderosa e amigável para o gerenciamento de containers Docker, Swarm e Kubernetes. Se você trabalha com containers, essa é uma solução essencial para facilitar sua administração. Vamos aprender como instalar e configurar o Portainer no Docker. O que é o Portainer.io? O Portainer.io é uma interface gráfica simples, que permite gerenciar de maneira centralizada seus containers, volumes, redes e imagens Docker. Ele pode ser utilizado por iniciantes e profissionais, pois oferece uma administração visual dos seus ambientes. Benefícios do Portainer Interface amigável : Gerencie containers de forma visual, tornando a administração mais simples e intuitiva. Gerenciamento centralizado : Administre múltiplos ambientes Docker/Kubernetes em um único local. Facilidade para iniciantes : Reduz a curva de aprendizado do Docker com sua interface gráfica. Gerenciamento de volumes e redes : ...