惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Security Archives - TechRepublic
Security Archives - TechRepublic
Project Zero
Project Zero
K
Kaspersky official blog
G
Google Developers Blog
T
Threat Research - Cisco Blogs
T
The Blog of Author Tim Ferriss
Cyberwarzone
Cyberwarzone
Y
Y Combinator Blog
Recorded Future
Recorded Future
Blog — PlanetScale
Blog — PlanetScale
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Cisco Talos Blog
Cisco Talos Blog
Latest news
Latest news
Microsoft Security Blog
Microsoft Security Blog
H
Help Net Security
S
Schneier on Security
P
Palo Alto Networks Blog
H
Hacker News: Front Page
N
News and Events Feed by Topic
N
Netflix TechBlog - Medium
博客园 - Franky
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
SecWiki News
SecWiki News
Cloudbric
Cloudbric
TaoSecurity Blog
TaoSecurity Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The Hacker News
The Hacker News
C
Check Point Blog
L
LangChain Blog
腾讯CDC
小众软件
小众软件
T
Tenable Blog
Google DeepMind News
Google DeepMind News
GbyAI
GbyAI
L
LINUX DO - 最新话题
A
About on SuperTechFans
Google Online Security Blog
Google Online Security Blog
C
Cisco Blogs
Recent Announcements
Recent Announcements
Hacker News: Ask HN
Hacker News: Ask HN
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Vercel News
Vercel News
雷峰网
雷峰网
美团技术团队
D
DataBreaches.Net
Martin Fowler
Martin Fowler
Help Net Security
Help Net Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
F
Full Disclosure
博客园_首页

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
Desconstruyendo la Extracción de Media en Telegram: Construyendo un Motor de Descarga de Alto Rendimiento con MTProto y Async I/O
yqqwe · 2026-05-01 · via DEV Community

Introducción

Como desarrolladores, a menudo nos fascina cómo las plataformas a escala global gestionan y distribuyen volúmenes masivos de datos multimedia. Telegram no es solo una aplicación de mensajería; desde una perspectiva de ingeniería, es un sistema de almacenamiento de objetos distribuido colosal construido sobre un protocolo de cifrado personalizado conocido como MTProto.
Sin embargo, para los desarrolladores que construyen herramientas de archivado web o usuarios que necesitan extraer recursos de forma multiplataforma, el "jardín vallado" de Telegram (específicamente su enfoque en caché móvil y protocolo binario) representa un desafío significativo. Para cerrar esta brecha, he desarrollado el Telegram Video Downloader.
En este post, nos sumergiremos en la "caja negra" técnica: desde la ingeniería inversa de las interacciones de MTProto hasta la optimización de algoritmos de descarga segmentada y el aprovechamiento del streaming del lado del servidor para construir un motor que elude los cuellos de botella de velocidad manteniendo la integridad original del archivo.

1. El Protocolo bajo el Capó: Entendiendo MTProto

A diferencia de la distribución de recursos web típica basada en HTTP/HTTPS, el núcleo de Telegram es el protocolo MTProto. Cuando un usuario hace clic en "descargar" en un video, el cliente no simplemente realiza un GET de una URL. Inicia una serie compleja de solicitudes RPC (Remote Procedure Call).
1.1 Fragmentación de Archivos (Sharding) y Centros de Datos (DC)
En la arquitectura subyacente de Telegram, los archivos grandes se dividen en "chunks" o fragmentos de tamaño fijo. Cada archivo está asociado con un access_hash único y se almacena en un Centro de Datos (DC) específico.
• Mapeo de DC: Los videos pueden estar almacenados en los DC1 a DC5, distribuidos globalmente.
• Obtención Segmentada: El cliente debe calcular el offset y el limit basándose en el tamaño total del archivo para solicitar datos bloque por bloque.
El Desafío de Ingeniería: Un descargador de alto rendimiento no puede depender únicamente de la API de Bot de Telegram. La API de Bot tiene límites estrictos en el tamaño del archivo (2GB) y una limitación de velocidad (rate-limiting) significativa. Nuestro motor supera esto simulando una UserSession, comunicándose directamente con el entorno de producción de los DC de Telegram para evitar el cuello de botella del intermediario de la API.

2. Ingeniería Inversa: Mapeo de Rutas Web a IDs de Media

La mayoría de los usuarios quieren descargar un video usando un simple enlace de canal o grupo de Telegram. Esto implica una capa de traducción de una vista previa web pública a un ID de Media interno.
2.1 Extracción de Metadatos
Cuando un usuario ingresa un enlace como t.me/channel/123, nuestro backend primero utiliza clientes HTTP ligeros para extraer las etiquetas OpenGraph de esa página. Sin embargo, las vistas previas web suelen proporcionar solo miniaturas o flujos de baja resolución. Para obtener el video original en 1080p o 4K, implementamos un algoritmo de mapeo:

  1. Identificación de Peer: Resolución del identificador del canal.
  2. Direccionamiento de MessageID: Localización exacta del mensaje.
  3. Extracción del Objeto Media: Recuperación del objeto document que contiene la huella digital del archivo, el tamaño y el tipo MIME.

3. Arquitectura Backend: Alta Concurrencia vía Async I/O

Para manejar solicitudes de descarga globales, el backend de Telegram Downloader descarta completamente el modelo de solicitud de bloqueo tradicional en favor de un stack completo de Python Asyncio + Telethon (Personalizado) + Redis.
3.1 Aceleración de Segmentos Asíncronos
Las descargas secuenciales tradicionales resultan en una espera de I/O severa. Desarrollamos un Algoritmo de Ventana Deslizante Paralela:
• Paralelismo de Conexiones Múltiples: Para el mismo archivo de video, abrimos múltiples conexiones a los DC.
• Solicitud Desordenada, Ensamblaje Ordenado: Solicitamos simultáneamente los fragmentos 1-5 y los reensamblamos en el búfer.
• Streaming Write-out: Crucialmente, no almacenamos todo el video en la RAM. Usando StreamingResponse, los datos que llegan del DC de Telegram se reenvían inmediatamente al usuario final a través de HTTP.
Métrica Técnica: Esta arquitectura de "tubería directa" reduce la sobrecarga de memoria del servidor en más del 90% y disminuye significativamente el tiempo hasta el primer byte (TTFB).

4. Resolviendo los Límites de Velocidad de Telegram (Flood Wait)

Telegram es altamente sensible a las solicitudes de gran tráfico en intervalos cortos, activando el error FloodWaitError.
4.1 Programación Inteligente y Equilibrio de Carga
Para garantizar la estabilidad del servicio, implementamos varias estrategias:
• Pooling de Cuentas Múltiples: Utilizando almacenamiento de sesiones distribuido, repartimos las solicitudes entre múltiples nodos con equilibrio de carga.
• Exponential Backoff: Cuando el sistema detecta alta presión en un DC específico, cambia automáticamente a un nodo de reserva y ejecuta reintentos con retrasos a nivel de microsegundos.
• Caché de Metadatos con Redis: Para descargas repetidas de recursos populares, el sistema lee las propiedades del archivo directamente de la caché, reduciendo las interacciones redundantes con los DC de Telegram.

5. Procesamiento del Lado del Servidor: Muxing Lossless con FFmpeg

Algunos videos de Telegram existen como flujos de audio y video separados, o utilizan contenedores que no son amigables con la web.
5.1 Integración de Pipeline en Tiempo Real con FFmpeg
Canalizamos el flujo de datos descargado directamente a FFmpeg en tiempo real:
• Muxing Lossless: Siempre que la codificación de video (ej. H.264/H.265) siga los estándares modernos, solo realizamos una operación -c copy. Esto significa que solo cambiamos el contenedor (ej. de .mkv a .mp4) sin recalcular los píxeles.
• Conversión en Milisegundos: Esta conversión consume poca CPU y se completa casi instantáneamente, asegurando que los usuarios obtengan un MP4 reproducible en cualquier dispositivo de inmediato.

6. Optimización Front-End: Filosofía Utility-First

El desarrollo del front-end sigue el principio de "velocidad extrema":
• Vanilla JS: Evitamos frameworks pesados para asegurar que la página cargue instantáneamente incluso en condiciones de red deficientes.
• PWA (Progressive Web App): El sitio soporta especificaciones PWA, permitiendo a los usuarios "instalarlo" en su escritorio para una experiencia similar a una aplicación nativa.
• Seguridad: Toda la lógica de análisis está encapsulada en el lado del servidor; los usuarios no necesitan instalar extensiones de navegador riesgosas.

7. Conclusión y Perspectivas del Proyecto

Construir un Telegram Video Downloader de alto rendimiento es más que una simple tarea de scraping; es un ejercicio de comprensión de protocolos modernos, I/O de red y programación de recursos. Al optimizar las interacciones de MTProto y aprovechar un backend asíncrono, hemos logrado un análisis de recursos 4K casi instantáneo.
Si eres un desarrollador que busca una forma limpia, sin anuncios y técnicamente sólida de archivar recursos de video de Telegram, no dudes en probar nuestra herramienta.
👉 URL del Proyecto: Telegram Video Downloader (Versión en Español)
Resumen del Stack Tecnológico:
• Backend: Python / Django / Redis / FFmpeg
• Core: Implementación personalizada de MTProto
• Arquitectura: Asyncio / Obtención de segmentos concurrentes
• Frontend: HTML5 / Tailwind CSS / Vanilla JS
• Infraestructura: Cloudflare / Nginx / Docker
¿Tienes preguntas sobre la lógica de distribución de archivos de MTProto o el manejo de flujos de FFmpeg? ¡Hablemos en los comentarios!

WebDev #Telegram #Python #FFmpeg #OpenSource #Programming #VideoStreaming #DevTools