AVideo

WWBN活跃维护

开源自建视频流媒体平台,集编码、媒体库管理、播放器与社交功能于一体,帮你搭建自己的广播网络。

Create Your Own Broadcast Network With AVideo Platform Open-Source. OAVP OVP

v29.7.1发布于 2026-11-09 12:12 UTC2,112star1,017fork同步于 2026-11-10 23:46 UTC

怎么上手

由 README 提炼,执行前请确认
git clone https://github.com/WWBN/AVideo.git
cd AVideo
cp -n env.example .env
docker compose up -d --build
硬件要求按 README 说明

README 未说明具体显存或 CPU 型号要求,仅要求一台装有 Docker 与 Docker Compose 插件的 Linux 服务器,并需按服务器容量调整 CPUS_LIMIT 和 MEMORY_LIMIT

有 Docker 镜像
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

自托管视频平台,在自己的服务器上发布、管理点播视频和直播并实现变现

开源自建视频流媒体平台,集编码、媒体库管理、播放器与社交功能于一体,帮你搭建自己的广播网络。

核心能力

  • 用 Docker Compose 一键启动 Streamer、Encoder、直播服务器、数据库和缓存
  • 提供 Gallery、Flix、频道优先等多种首页布局,可在后台切换
  • 支持订阅、单片付费、直播付费门票等多种变现方式
  • 通过用户组控制非公开视频的访问权限
  • 可自定义域名、Logo、主题,或用 API 自建 React 前端

容易踩的坑

首次启动前必须编辑 .env,设置 SERVER_NAME、管理员密码和数据库密码等,否则无法正常初始化;域名需解析到服务器并开放 80 和 443 端口,否则 HTTPS 证书无法签发;上传的视频若格式不兼容,需等 Encoder 队列转码完成后再检查播放

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v29.7.1
  1. v29.7.1最新正式版2026-11-09 · 2026-11-09 12:12 UTC

    29.7.1 (2026-11-09)

    Dependencies

    • bump aws/aws-sdk-php from 3.402.4 to 3.403.0 (ad2296a)
    • bump google/apiclient-services from 0.465.0 to 0.465.1 (2d3b02c)
    • bump james-heinrich/getid3 from 1.9.27 to 1.9.28 (28c2ca4)
    • bump zircote/swagger-php from 7.0.0 to 7.3.0 (09584a3)

    Other changes

    • Add email message HTML purification and related tests for subscriber notifications (6c8cfa9)
    • Add mandatory playback group rules with category inheritance (9d59938)
    • Add playback access unlock functionality with regression tests (c3086fc)
    • Add security review comment for potential SQL injection in videoName handling (94e7d5b)
    • Add security review comment regarding password-protected channel About text visibility (38cc2fb)
    • Add security review comments for cleartext storage of passwords in LiveTransmition and Live_schedule (ce0b379)
    • Add security review comments regarding spoofed User-Agent and CDN-Host in HLS handling (424be05)
    • Enhance Playback Access Control and User Permissions (373fb4f)
    • Improve error handling in HTTP request test by logging server output on failure (e5b57ae)
    • Let the CDN marketplace reach plugin/CDN/status.json.php (1f744ca)
    • Optimize validURL function regex to improve performance and prevent exponential time complexity; add tests for validation accuracy (fff5cdc)
    • Refactor PlaybackAccessTest to conditionally require VideoHLS plugin and improve test structure (9fbfa78)
    • Refactor theme.css.php to use the normal startup session and add ThemeCssSessionTest for session handling validation (e7f0f68)
    • Skip test if Subscription plugin is not installed (b69e53f)
    • Synchronize fresh installer with playback access schema (d4c63b3)

    Release commit: 3a8097750b27

  2. v29.7.02026-11-02 · 2026-11-02 12:12 UTC
    查看更新说明

    29.7.0 (2026-11-02)

    Features

    • add good_until_utc and good_until_unix to PayPerView rows in signIn (d344218)

    Fixes

    • clarify session handling and CSRF guard behavior in copilot instructions (e3125c0)
    • update playlist total calculation and pagination logic in channel views (69b126d)

    Dependencies

    • bump abraham/twitteroauth from 7.0.0 to 8.2.0 (24b0f31)
    • bump aws/aws-sdk-php from 3.401.2 to 3.402.4 (6d21a87)
    • bump chillerlan/php-qrcode from 5.0.5 to 6.0.1 (677e7a9)
    • bump google/apiclient-services from 0.464.0 to 0.465.0 (2cc522b)
    • bump google/auth from 1.55.2 to 1.55.3 (3d183ff)
    • bump hls.js from 1.7.3 to 1.7.4 (9a144e7)
    • bump moment-timezone from 0.6.5 to 0.6.6 (8ecac31)
    • bump stripe/stripe-php from 22.0.0 to 22.1.0 (8839cac)
    • bump symfony/yaml from 5.4.53 to 7.4.22 (9dfdb29)
    • bump tinymce from 8.10.0 to 8.10.1 (6485767)
    • bump zircote/swagger-php from 5.7.7 to 7.0.0 (ede1217)

    Other changes

    • Add documentation maintenance guidelines for code changes and wiki updates (2a89d73)
    • Add guideline to prohibit AI attribution in commits and PRs (616ebc4)
    • Add scoped Encoder job preflight and explicit destination status (c431d52)
    • Add security review comments regarding user credentials handling for Encoder integration (920f87c)
    • Add unit tests for site URL change functionality (071faed)
    • Add validation for dynamic links in liveVideo.php and implement unit tests for XSS protection (3704160)
    • Clarify security filter application and validation requirements in security guidelines (08ab385)
    • Enhance downloadVideoFromDownloadURL function to validate temp file extensions and add unit tests for edge cases (7cf7d02)
    • Enhance YPTSocket handling of MSG_BATCH messages and update security review comments (13dd338)
    • Ensure video links are validated to require http(s) scheme before saving and rendering; add unit tests for security against script URLs. (fdb75d2)
    • Fix oversized login response headers behind reverse prox
  3. v29.6.02026-10-26 · 2026-10-26 13:51 UTC
    查看更新说明

    29.6.0 (2026-10-26)

    Features

    • channel: enhance channel layout and branding features, improve responsiveness and tab logic (bdb1857)
    • Enhance PayPerView integration and payment processing (a08d758)
    • gallery: add ellipsis menu action buttons and corresponding unit tests (a4f57ae)
    • health_check: implement XSendFile response validation and add unit tests (f26c362)
    • live: enable FIFO output recovery by default for YouTube and enhance stream mapping logic (7c660bf)
    • live: enhance restream process management and add regression tests (508760d)
    • logging: implement HTTP error diagnostics and request ID logging (da7b895)
    • tests: add unit tests for ImagesPlaceHolders and Stripe autoloading behavior (5263191)

    Fixes

    • AI: address security concerns regarding token expiration and path traversal in VTT file handling (d0e3078)
    • BTCPayments: ensure sensitive data is not exposed in error messages and logs (0c9dc2c)
    • deps: resolve four release tooling security alerts (ac517d7)
    • deps: restore video.js 8 so npm ci works again in CI (310c425), closes #10651
    • Dockerfile: adjust memcached session lock wait times to improve concurrency handling (3a34da7)
    • docs: clean up formatting in README.md for better readability (a6c5cc7)
    • embed: build playable Vimeo iframe URLs for live events and unlisted videos (28854d3)
    • gallery: adjust title focus behavior to prevent click issues on thumbnail expansion (0b504e0)
    • Improve error logging in Wallet save method by excluding sensitive arguments (e8778bd)
    • player: load the YouTube tech for live links and play Vimeo live links in an iframe (f04b2c4)

    Dependencies

    • bump chart.js from 4.5.1 to 4.6.1 (74bb1c1)
    • bump dexie from 4.4.6 to 4.4.7 (ca6693b)
    • bump google/apiclient-services from 0.463.0 to 0.464.0 (95c3791)
    • bump google/auth from 1.55.1 to 1.55.2 (016c61a)
    • bump video.js from 8.24.1 to 10.1.0 (03f8a7f)
    • bump video.js from 8.24.1 to 8.24.2 ([122cfeb](http
  4. v29.5.02026-10-19 · 2026-10-19 12:17 UTC
    查看更新说明

    29.5.0 (2026-10-19)

    Features

    • add admin check to listRemoteFiles.php to restrict access for non-admin users (e8f32ab)
    • add CFR sync option detection for FFmpeg compatibility (34c389b)
    • add Local Encoder information to README for video conversion on personal computers (c381d6d)
    • add Local Encoder promotion and functionality to enhance video upload experience (3d51fd5)
    • add Persian translations for various UI elements and features (cc85438)
    • add security review note for streaming media access control in xsendfile.php (7d31ff8)
    • add security tests for isValidM3U8Link to prevent SSRF vulnerabilities (7a7d862)
    • add stop screen share functionality and update related UI elements (1e3e5af)
    • add validation for language codes to prevent directory traversal vulnerabilities (22e8c73)
    • enhance Local Encoder integration with launcher and UI updates (db19ebb)
    • implement Local Encoder login functionality with authorization handling (4a4ffc9)
    • include dangerousConfigurations.php in save.json.php and pluginAddDataObject.json.php (e099647)
    • self-host Google Fonts used by themes and error pages (a0fdbba)

    Fixes

    • import theme CSS from theme.css.php so relative URLs resolve (3dd3688)
    • remove stale Apache PID file on container start and restart (46a6380)

    Dependencies

    • bump aws/aws-sdk-php from 3.399.0 to 3.400.1 (763aed1)
    • bump aws/aws-sdk-php from 3.400.1 to 3.401.2 (f1baa9d)
    • bump google/apiclient-services from 0.461.0 to 0.462.0 (0841afa)
    • bump google/apiclient-services from 0.462.0 to 0.463.0 (8aee237)
    • bump moment-timezone from 0.6.4 to 0.6.5 (7ae0aca)
    • bump the fullcalendar group with 6 updates (5071b79)
    • bump tinymce from 8.9.2 to 8.9.3 (1796043)
    • bump tinymce from 8.9.3 to 8.10.0 (06a6e44)

    Other changes

  5. v29.4.02026-10-12 · 2026-10-12 12:23 UTC
    查看更新说明

    Highlights

    • Security hardening release. This release fixes the findings of a security scan review, adds a failed-login penalty to every password check and a CSRF guard to the API, and closes several XSS paths in Markdown comments and AI responses. The full triage, including what was and was not verified, is in security-reviews/scan-bundle-2026-10-09.md and security-reviews/scan-bundle-2026-10-10-independent-review.md (b82c34c).
    • Payments: a signed Stripe or Razorpay delivery that is retried or replayed no longer credits the wallet twice. Verified deliveries are processed once, under a database lock and a transaction, and a failed subscription renewal no longer discards the paid credit (b82c34c).
    • New "Verify SSL certificates" option in CustomizeAdvanced, off by default, for the Encoder, SMTP, WordPress login and CloneSite connections. BTCPay requests are verified by default (b82c34c).
    • Statistics auto clean: setting "Auto clean statistics table" to 0 ("Do not delete") no longer deletes every record (70c8422).
    • WebRTC: the WebRTC2RTMP server is restarted after its Let's Encrypt certificate is renewed, so browsers no longer fail to connect once the old certificate expires (6c86195).

    New features

    • WebRTC2RTMP certificate renewal. The server reads its certificate only at startup. The cron now compares the served certificate with the one on disk and restarts the server, at most once per hour and only while no WebRTC live is running. A lock prevents concurrent callers from starting a second instance (6c86195).
    • API documentation access by IP. The API plugin has a new "Documentation allowed IPs" option. The exact IPv4/IPv6 addresses listed there can open the Swagger documentation without logging in. Empty keeps it admin only. It does not authorize API operations (72d84d1).
    • AI image callback: the image URL returned by the AI service must be a valid URL, so local paths are never read through it (a767217).

    Fixes

    Security

    • Failed-login penalty for every password check (login form, API, user/pass in a URL, remember-me cookie): 10 failures per account and IP, and 100 per IP, within 15 minutes. While blocked, the password is not checked, the login form shows "Too many failed login attempts" and the API answers HTTP 429. Successful logins do not count. The limits can be changed with $global['failedLoginMaxPerAccount'] and $global['failedLoginMaxPerIP'] (92e6286).
    • API CSRF guard: plugin/API/set.json.php now tells credentials sent with the request apart from an existing cookie session. API clients that send another account's user/pass switch to that account; normal pages never switch accounts (92e6286).
    • Admin accounts: a delegated "Users Admin" can no longer edit or delete an admin account (users manager, API and delete confirmation). Account edits, promotion and deletion now share a lock (

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    First thing...

    I thank God for graciously, through His mercy, giving me all the necessary knowledge acquired throughout my life and throughout the development of this project. It is only through His grace and provision that this was possible, and I am truly grateful for His presence every step of the way.

    For of Him, and through Him, and to Him, are all things: to whom be glory forever. Amen. Apostle Paul in Romans 11:36

    [!IMPORTANT] Domain Update Notice

    Our previous domains — youphptube.com and youphp.tube — are being retired following a dispute initiated by Google LLC (YouTube). Although we firmly believe that YouPHPTube has always been an independent, open-source project, created to empower developers and organizations to host their own video platforms, we have decided to respect the process and move forward peacefully.

    🆕 Please update your bookmarks and references to the new official domain:

    👉 https://streamphp.com/

    Thank you for your continued support and for standing with open-source freedom.

    AVideo

    AVideo is a self-hosted video platform for publishing, managing, and monetizing on-demand videos and live broadcasts on your own infrastructure.

    Try the live demo · Use cases · White label and layouts · Monetization · Content tools · Quickstart · Installation · How it works · Wiki · Website · Releases

    Use cases

    Use caseHow you can use AVideo
    Community video portalLet creators publish videos and organize discovery around Gallery sections and channels.
    Education and staff trainingPublish recorded lessons and tutorials, with user groups controlling access for students, teams, or members.
    Premium video catalogPresent films, series, or lessons in a Flix layout, and sell memberships or individual video access.
    Live eventsBroadcast conferences, concerts, or sports, with optional paid event tickets.
    Churches and nonprofit communitiesShare recorded talks and live broadcasts, with optional donation links or wallet donations to support creators.

    White label and layouts

    AVideo can run as a video website under your own brand. Start with Site Design and Templates:

    • Your identity: use your own domain, site title, logo, and favicon. Configure these through the site settings; see the Quick Start Guide.
    • White-label branding: the paid Customize plugin lets you replace the Powered by AVideo footer, customize the About page and site colors, and replace default placeholder images.
    • Custom design: add your own CSS or JavaScript, or build a separate frontend connected to the AVideo API.

    Choose a presentation that fits your content:

    LayoutPresentationGuide
    GalleryA video portal with sections for categories, trending videos, playlists, and channels.Gallery plugin
    FlixA movie or series catalog with featured artwork and horizontal content rows.Configure the Flix layout
    ChannelsPut creators and their channels at the center of browsing.FirstPageChannelList plugin
    Player first pageOpen directly to a video player and related content.Homepage Layout Options
    React frontendDevelop your own viewer interface as a separate application using the API and embed player.Build Your Own Frontend

    The built-in homepage layouts are free and selected in Admin Panel → Design → First Page Style. The React frontend is deployed separately. See layout options for the differences.

    You can also choose light and dark themes, change the player appearance, and adjust menus, buttons, and extra HTML with the free CustomizeAdvanced plugin.

    Monetization

    You can combine several revenue models on the same site. See the monetization overview for setup and payment flows.

    ModelHow it worksGuide
    SubscriptionsSell membership plans that unlock a premium video library for the subscription period.Subscription
    Pay-per-viewCharge for time-limited access to individual videos or tickets to live events.Video PPV · Live PPV
    AdvertisingShow banner, overlay, or video ads; run your own campaigns or connect a VAST/VMAP ad provider.Advertising options
    Fan membershipsCreators sell access to their own fans-only videos and broadcasts, with an optional share for the site owner.FansSubscriptions
    Creator donationsLet viewers support creators through external donation links or transfers from their site wallet.Donation options

    Subscription, PayPerView, PayPerView Live, and FansSubscriptions are paid add-ons. Advertising includes free plugins and the paid GoogleAds IMA integration; see each guide for requirements.

    Wallet-based purchases require YPTWallet and a configured payment gateway, such as PayPal or Stripe. Payment-provider fees and infrastructure costs apply; configure prices and creator shares for your business model.

    For sites with multiple creators, see creator payment options for sales commissions, wallet withdrawals, and direct creator payments through the supported Stripe PPV configuration.

    Content tools and platform growth

    What do I need to install?

    Start with the website and the features you want to offer:

    What you want to doWhat you needWhat it does for you
    Run your video websiteStreamer — this repository — with its database and media storage.Provides the home page, video pages, search, channels, user accounts, and administration.
    Upload videos that need conversionEncoder.Prepares video files for browser playback. It can run on the same server as your site.
    Convert videos on your own computerLocal Encoder (Windows, macOS, Linux).Encodes on your computer and uploads the result to your site. It complements the Web Encoder, which remains required for server-side media services.
    Broadcast liveLive server.Receives your broadcast and delivers it to visitors watching on your site.
    Use remote media storageAn optional storage plugin and provider, such as S3 or B2.Keeps media on a storage provider; local disk is the default starting option.

    The Docker Compose option below installs the bundled components together. You can begin with recorded videos and configure live broadcasting or remote storage as you need them.

    Why use your own Encoder?

    A public Encoder is an option for a publicly reachable site. Install a private Encoder when you need:

    • Your own processing capacity: uploads use your queue instead of sharing a public service. Processing speed depends on your server and workload.
    • Control over your files: keep video conversion on infrastructure you control instead of sending files to a public service.
    • A site on a private network: a public Encoder cannot send finished videos back to a site reachable only inside your network, such as localhost or a home or office network. Your own Encoder must be able to reach the site.

    The Encoder can share the website's server for a small installation, or run on another server as uploads grow. Docker Compose already includes an Encoder.

    Use Local Encoder to prepare videos on your computer and upload the finished files to your site. It also works with sites on a private network, as long as your computer can reach the site. Download the latest version · Source code

    AVideo includes a download guide at plugin/CustomizeAdvanced/localEncoder.php on your site, linked from the upload menu and upload form. With the updated Web Encoder, the same guide is recommended when a video-link import fails. Administrators can hide this promotion in Plugins → CustomizeAdvanced → Show Local Encoder (enabled by default). Keep a working Web Encoder configured for AVideo's media services; Local Encoder does not replace it. Update both the Streamer and Web Encoder to enable all these entry points.

    Quickstart (Docker Compose)

    The included Compose stack runs the Streamer, Encoder, live server, databases, and cache. You need a Linux server with Docker and the Docker Compose plugin.

    git clone https://github.com/WWBN/AVideo.git
    cd AVideo
    cp -n env.example .env
    

    Edit .env before the first start:

    • Set SERVER_NAME to your domain, without https:// or a path.
    • Set CONTACT_EMAIL and WEBSITE_TITLE.
    • Set strong, unique values for SYSTEM_ADMIN_PASSWORD and DB_MYSQL_PASSWORD.
    • Adjust CPUS_LIMIT and MEMORY_LIMIT to your server's capacity.

    Your domain must point to the server, with ports 80 and 443 open for HTTPS certificate setup. Then start the stack:

    docker compose up -d --build
    docker compose ps
    docker compose logs -f avideo
    

    Wait for the initial installation to finish, open https://your-domain.com/, and sign in as admin with your SYSTEM_ADMIN_PASSWORD. Press Ctrl+C to stop watching the logs; the containers keep running.

    See the Docker guide for certificates, persistent data, backups, updates, and troubleshooting.

    How your site works

    Each diagram answers a different question:

    DiagramWhat it explains
    1. Visitor navigationHow visitors find and watch content on your site.
    2. Video publicationHow an upload becomes a published video, with or without conversion.
    3. Video processingWhat happens while the Encoder prepares an uploaded video.
    4. System componentsHow the website, Encoder, live server, database, and storage connect. Optional technical detail.

    Diagram 1: Visitor navigation

    Purpose: Shows the steps a visitor takes to find and watch a video or live broadcast. Your theme, settings, and enabled plugins determine the exact layout and available features.

    flowchart LR
        Home["Open your site"] --> Browse["Browse or search<br/>videos, categories, channels"]
        Browse --> Choose["Choose a video<br/>or an available live broadcast"]
        Choose --> Watch["Watch on a computer<br/>or phone"]
        Watch -.->|optional| Account["Sign in and interact"]
    

    When enabled and permitted by your settings, signed-in visitors can comment and use playlists.

    Diagram 2: Video publication

    Purpose: Shows the overall path from uploading a file to making the video available on your site. The Encoder prepares files that need conversion; already compatible files can use direct upload.

    flowchart LR
        Upload["Upload a video"] --> Convert{"Needs conversion?"}
        Convert -->|Yes| Encoder["Encoder prepares<br/>the video"]
        Convert -->|Already compatible| Ready["Video ready<br/>on your site"]
        Encoder --> Ready
        Ready --> Publish["Publication follows<br/>your site settings"]
        Publish --> Watch["Visitors watch<br/>the published video"]
    

    Choose the title, category, and publication options for your content, and allow processing to finish before checking playback. Embedded videos remain hosted by their external provider. See upload options for the available methods.

    Diagram 3: Video processing in the Encoder

    Purpose: Shows what happens behind the scenes when you choose an upload method that uses the Encoder. The Encoder is the service that prepares video files for playback on your website.

    flowchart TB
        Upload["Video uploaded<br/>for conversion"] --> Queue["Wait for its turn<br/>in the Encoder queue"]
        Queue --> Prepare["Prepare playback versions<br/>and preview images"]
        Prepare --> Transfer["Transfer prepared media<br/>back to your website"]
        Transfer --> Storage["Save media in<br/>the configured storage"]
        Storage --> Ready["Website updates the video<br/>and applies publication settings"]
        Ready --> Watch["Visitors watch through<br/>the website player"]
    

    Preparation can produce different video qualities and cover or preview images. The exact formats, qualities, and images depend on your Encoder settings and enabled features. Media can stay on the server or use a supported remote storage plugin.

    After the file upload finishes, the video can still be waiting in the queue or undergoing conversion and transfer. Wait for the job to finish, then check playback on your site. Direct uploads of already compatible files and external embeds follow their own paths; they skip this conversion workflow. See upload methods for the differences.

    For live broadcasts, you send a live feed to the live server, and visitors open the broadcast on your website. Follow the live setup guide when you are ready to add this feature.

    Diagram 4: System components

    Purpose: Shows how the installed services connect, including recorded video and live broadcasting. This is a component overview for server administrators.

    The Streamer handles the website and application data; the Encoder processes uploads; the live server handles broadcast ingest and delivery. Socket carries real-time application messages.

    flowchart TB
        Browser["Browser / player"] <-->|HTTPS| Streamer["Streamer<br/>PHP + Apache"]
        Streamer -->|conversion jobs| Encoder["Encoder<br/>FFmpeg / FFprobe"]
        Encoder -->|processed media| Streamer
        Streamer -->|site data| Database[("MariaDB / MySQL<br/>Site and Encoder databases")]
        Encoder -->|encoding queue| Database
        Streamer <-->|application events| Socket["Socket<br/>YPTSocket"]
        Socket <-->|WebSocket messages| Browser
        Publisher["OBS / broadcaster"] -->|RTMP| Live["Live server<br/>nginx-rtmp"]
        Live -->|publish / play callbacks| Streamer
        Live -->|HLS playback| Browser
        Streamer -->|media files| Local[("Local storage")]
        Streamer -.->|optional storage plugins| Cloud[("S3 / Backblaze B2")]
        Cloud -.->|video playback| Browser
    

    This diagram shows logical components. In the included Compose stack, Streamer, Encoder, and Socket run inside the avideo container; live, database, database_encoder, and memcached run as separate services. S3/B2 is optional and requires a provider account and the corresponding storage plugin.

    ComponentPurposeWhen you need it
    Streamer — this repositoryThe website, player, video library, user accounts, and administration.Every AVideo installation.
    EncoderConverts uploaded video and audio into formats suitable for browser playback.When uploads need conversion. It can run on the same server or a separate server.
    Live serverReceives live broadcasts and delivers them to viewers, typically using NGINX with RTMP and HLS.When you want live streaming.
    SocketDelivers real-time application messages through YPTSocket.Features that use real-time updates; it runs as a long-lived PHP process.
    MariaDB / MySQLStores users, video metadata, settings, and the Encoder queue in their respective databases.Every Streamer installation; the Encoder also has its own database.
    StorageStores media on local disk or through providers such as S3 and Backblaze B2.Local disk by default; remote storage depends on your deployment and plugins.

    Technical decisions

    ChoiceWhat it enablesOperational trade-off
    PHP + Apache for the StreamerDeployment on a LAMP stack, using the supplied .htaccess routing rules.The server must provide compatible PHP extensions and Apache configuration.
    A separate Encoder componentVideo conversion can run on a different server, keeping encoding CPU load away from the website.The Encoder and Streamer must communicate and transfer the processed media.
    nginx-rtmp + HLS for live videoBroadcasters publish with RTMP; viewers play HLS in the browser.A live server, its callbacks, and sufficient bandwidth must be configured.
    WebSocket messages through YPTSocketReal-time application events can reach browsers independently of video delivery.Requires a running Socket process and a browser-accessible WebSocket endpoint.
    Relational data separate from media filesMySQL/MariaDB stores application data while local disk or storage plugins hold the media.Backups must cover both the databases and media; cloud providers add configuration and usage costs.
    Plugins for optional featuresAdd monetization, storage, and integrations to suit each installation.Feature availability depends on installed plugins; some are distributed separately and require purchase.

    Installation

    For Docker, use the quickstart and Docker installation guide. For an installation directly on a server, follow the Ubuntu steps below.

    Ubuntu server

    Use a fresh Ubuntu Server with sudo access and no hosting control panel such as cPanel, Plesk, or Webmin. The installation guide assumes direct control of Apache, PHP, the database, and system packages.

    1. Point your domain to the server and open ports 80 and 443.
    2. Follow the Ubuntu installation guide to install the dependencies, download AVideo, and configure HTTPS.
    3. Open https://your-domain.com/install/. Resolve any failed required checks, enter the database and site settings, and choose your administrator password. See the installation setup page for each field.
    4. Sign in as admin with the password you chose.
    5. Add a private Encoder if you need video conversion. Configure a live server if you need live broadcasts.

    For a video walkthrough, watch Installing AVideo for Ubuntu 24. Follow the written installation guide for the current commands.

    These pages describe older Ubuntu and AVideo setups and may be archived or superseded. For a new installation, use the guide above. For an existing site, start with the backup and update guides.

    Publish your first video

    After either installation:

    1. Open the Admin Panel, set the site name and logo, and configure email.
    2. Run Health Check and follow the Quick Start Guide to finish configuration and scheduled tasks.
    3. Upload a short test video. If using the Encoder, wait for conversion and transfer to finish.
    4. Confirm playback in a private browser window and on a phone before inviting users.

    Server requirements

    RequirementDetails
    PHP8.2 or later, as required by Composer and the installer. Use a maintained PHP release compatible with your installation.
    PHP extensionsmysqli, curl, gd, mbstring, zip, zlib, and openssl are checked by the installer. Additional features may need other extensions.
    DatabaseMySQL or MariaDB. Follow the installation guide for the database setup.
    Web serverApache 2.x with mod_rewrite and support for the supplied .htaccess rules.
    Application dependenciesThe supplied vendor/ and node_modules/ assets. The installer checks for missing dependencies.
    Media toolsFFmpeg, FFprobe, and ExifTool for media processing; requirements vary by component and feature.
    CapacityDisk space for media and processing, CPU for encoding, and bandwidth for viewers.

    For sizing and deployment planning, see hardware and server requirements.

    Administrators: see the PHP runtime security notice for CVE-2026-109618 and CVE-2026-109619, the local admin warning, fixed versions, backport uncertainty and rollout checks. Updating AVideo alone does not fix PHP; installations must receive this code to display the warning.

    Features and plugins

    Availability depends on the plugins installed and enabled. Some plugins are distributed separately and require purchase; review their documentation and the marketplace before planning your deployment.

    Demos

    Open a demo and sign in with one of the public test accounts below:

    DemoAccessUsernamePassword
    Platform demoAdministrator — explore the admin paneladmin123
    Platform demoNon-admin test account — commentingtesttest
    Flix demoTest user — explore the Flix layouttesttest

    These are shared, public demo accounts. Choose your own administrator password when installing your site.

    Flix demo payments are real: paid subscriptions use real money. Review the price, billing period, and renewal terms on the Flix subscription plans before paying.

    Tutorials / Gallery demo — videos about setup and features, with likes, channel subscriptions, and comments for signed-in users. Video uploads are disabled on this demo.

    Documentation and support

    ResourceUse it for
    WikiInstallation, configuration, and plugin documentation.
    Admin ManualManaging users, videos, settings, and plugins.
    Updates and releasesKeeping an existing installation current.
    BackupsSaving and restoring site data.
    TroubleshootingFinding logs and diagnosing errors.
    GitHub IssuesReporting bugs with reproduction steps, versions, and relevant logs. Remove passwords and other secrets before posting.
    Professional supportPaid installation, plugins, and consulting from Daniel Neto.

    License and intended use

    See LICENSE for the software license, including its requirement that the software be used for Good, not Evil.

    The project's installation agreement prohibits using this software to create sexually explicit material, pornography, or adult-themed content.