Add devcontainer configuration and initial documentation for yt-dlp proxy server
This commit is contained in:
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"name": "Debian",
|
||||||
|
|
||||||
|
"image": "mcr.microsoft.com/devcontainers/base:trixie",
|
||||||
|
|
||||||
|
"runArgs": ["--add-host=ollama:host-gateway"],
|
||||||
|
|
||||||
|
"containerEnv": {
|
||||||
|
"OLLAMA_HOST": "ollama:11434"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
# Пишем прокси для yt-dlp, чтобы видосы смотреть в браузере без рекламы
|
||||||
|
|
||||||
|
## Введение
|
||||||
|
|
||||||
|
Прокси-сервер для yt-dlp позволяет обойти рекламу и ограничения, связанные с просмотром видео на платформах, таких как YouTube. Этот инструмент может быть полезен для тех, кто хочет наслаждаться контентом без перерывов на рекламу или для тех, кто сталкивается с региональными ограничениями и прочей цензурой.
|
||||||
|
|
||||||
|
## Задача
|
||||||
|
|
||||||
|
Наша цель - создать простой прокси-сервер, который будет обрабатывать запросы вида http://localhost/www.youtube.com/watch&v=VIDEO_ID и возвращать страницу с HLS плеером. Как понятно из URL - в query будет передаваться URL видео, который нужно проксировать.
|
||||||
|
|
||||||
|
Проксировать надо именно HLS поток, так как он позволяет минимизировать трафик и обеспечивает более плавное воспроизведение видео. Кроме того, HLS поддерживается большинством современных браузеров, что делает его идеальным выбором для нашего прокси-сервера.
|
||||||
|
|
||||||
|
Сам прокси должен обрабатывать запросы вида http://localhost/hls/www.youtube.com/watch(v=VIDEO_ID), где содержимоее Query String экранируется для использования query string и добавления к пути файлов HLS, таких как index.m3u8 и ts файлы. Например, запрос http://localhost/hls/www.youtube.com/watch(v=VIDEO_ID)/index.m3u8 должен возвращать HLS плейлист для видео с указанным VIDEO_ID.
|
||||||
|
|
||||||
|
Задача же прокси будет в том, чтобы на запрос http://localhost/hls/www.youtube.com/watch(v=VIDEO_ID)/index.m3u8, проксировать запрос к yt-dlp, который будет скачивать HLS плейлист для видео с указанным VIDEO_ID и возвращать его клиенту. Аналогично, при запросе http://localhost/hls/www.youtube.com/watch(v=VIDEO_ID)/segment.ts, прокси должен проксировать запрос к yt-dlp для получения соответствующего сегмента видео и возвращать его клиенту.
|
||||||
|
|
||||||
|
Очевдино надо будет временно кэшировать сессии yt-dlp на какой-то срок в избежание повторного парсинга страницы видео при каждом запросе к HLS плейлисту и сегментам. Это позволит значительно улучшить производительность и снизить нагрузку на сервер.
|
||||||
|
|
||||||
|
## Реализация
|
||||||
|
|
||||||
|
Для реализации прокси-сервера для yt-dlp можно использовать Python и библиотеку Flask для создания веб-сервера. Также потребуется библиотека yt-dlp для взаимодействия с YouTube и другими платформами и получения HLS потоков.
|
||||||
|
|
||||||
|
### Правила реализации
|
||||||
|
|
||||||
|
1. Минимальный MVP: реализуем только необходимое для HLS-проксирования одного URL видео на один запрос через `yt-dlp`.
|
||||||
|
2. Минимальный стек: только Python, Flask, `yt-dlp` и внешний плеер для HLS; без Node.js и без сложных фреймворков.
|
||||||
|
3. Один формат: поддерживаем только HLS (`.m3u8` + сегменты).
|
||||||
|
4. Одна платформа в MVP: сначала PornHub; расширение на другие платформы — только после стабилизации.
|
||||||
|
5. Простая маршрутизация: короткие и предсказуемые URL без лишней магии.
|
||||||
|
6. Кэш внешний. Только HTTP заголовки для управления кэшем, без сложных in-memory решений. TTL кэша — 365 дней.
|
||||||
|
7. Безопасность по минимуму, но обязательно: валидация входного URL, ограничение целевых доменов теми, которые поддерживаются yt-dlk, таймауты запросов.
|
||||||
|
8. Ошибки и логи — только практичный минимум: понятные HTTP-ошибки и базовое структурированное логирование.
|
||||||
|
9. Конфигурация только через переменные окружения: порт, TTL кэша, уровень логов и таймауты.
|
||||||
|
10. HTTPS не в приложении: TLS завершается внешним reverse proxy (Nginx/Caddy/Traefik), Flask работает за ним.
|
||||||
|
11. Тесты только на критичный путь: парсинг URL, кэш, проксирование плейлиста и сегмента, обработка ошибок.
|
||||||
|
12. Документация и лицензия: только `README.md`, `AGENTS.md` и лицензия MIT.
|
||||||
Reference in New Issue
Block a user