WWBN/AVideo

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

JavaScript

2,106

9,047 commits

updated Oct 14, 2026

See the code

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

Tests Status GitHub Stars GitHub Forks
Last Commit Contributors Code Size

[!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

chrome-capture-2026-10-09

The video gallery on AVideo Tutorials, a running AVideo installation.

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.
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.

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.

Technical architecture and decisions (for server administrators)

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.

Older installation references (for existing sites)

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.1 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.

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.

avideo
avideo-platform
encoder
free
free-software
media
mediamanager
media-player
media-server
open-source
opensource
social-features
streamer
streamer-site
streamer-tool
video
video-player
video-sharing
videosharing
video-streaming

WWBN/AVideo

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

JavaScript

2,106

9,047 commits

updated Oct 14, 2026

See the code

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

Tests Status GitHub Stars GitHub Forks
Last Commit Contributors Code Size

[!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

chrome-capture-2026-10-09

The video gallery on AVideo Tutorials, a running AVideo installation.

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.
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.

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.

Technical architecture and decisions (for server administrators)

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.

Older installation references (for existing sites)

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.1 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.

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.

avideo
avideo-platform
encoder
free
free-software
media
mediamanager
media-player
media-server
open-source
opensource
social-features
streamer
streamer-site
streamer-tool
video
video-player
video-sharing
videosharing
video-streaming

Project health

Overall

4.5/10

Maintained

10/10

Code review

0/10
OpenSSF Scorecard

Significant stargazers

Joshua M. Boniface

342 followers · starred Aug 2020

Jefferson González

106 followers · starred Aug 2021

R4SAS

89 followers · starred Oct 2018

Sławomir Kaleta

207 followers · starred May 2020