Self-hosted live and VOD streaming with USDT TRC-20 payment verification. Deploy the Media Node on your Linux server and connect it to the StreamDeal Payment Gateway.
StreamDeal helps publishers run a private paid streaming site without building the streaming and payment workflow from scratch.
StreamDeal is designed for publishers who already have an audience in a private community or through their own communication channels.
Choose videos, attach multiple SRT subtitle files to each video, then upload individually. Subtitle tracks use their filenames and can be added or removed later without retranscoding. Publisher base URLs now open the dashboard directly.
The publisher operates the Media Node host and domain. StreamDeal provides the packaged software and payment verification service; the publisher should keep deployment secrets, wallet information, and persistent data protected.
The viewer's payment goes to the publisher's payout address. Publisher prepayments settle StreamDeal platform fees and are separate from viewer payments. The publisher may need TRX or sufficient Energy/Bandwidth resources when sending USDT on TRON, including platform balance deposits. Some wallets or services may sponsor eligible fees, but this depends on their current policy and limits.
All Live and VOD media segments are AES-128 encrypted, including free channels, and can be served through a CDN. HLS playlists use short cache lifetimes; playback keys remain access-controlled and are never cached.
Run the installer with sudo: it downloads the Linux amd64 release package, verifies its SHA256 checksum, loads the packaged Docker images, and installs the Media Node. Publishers do not need to download the package manually.
curl, sha256sum, zstd, openssl, and sufficient disk space./etc/streamdeal-media-node/.env and stops for configuration. Set one public URL in PLATFORM_BASE_URL (including /streamdeal when using a path prefix); the start script derives the host automatically. Register a receiving address in Publisher Settings before offering paid channels..env file, where it can be retrieved later.curl -fsSL https://streamdeal.top/media-node/install.sh | sudo sh
The installer downloads a ~366 MB package. On a network where the direct route to this site is slow, configure an HTTP proxy in ~/.curlrc (for example proxy = "http://172.16.50.4:7897"); sudo reads /root/.curlrc, so set the proxy there as well. If your machine can reach an internal mirror directly, install from that origin instead for the fastest download.
After the installer finishes, use sudo to edit the private file /etc/streamdeal-media-node/.env and set the single public Media Node URL. The start script derives the hostname for Nginx and backend use. Check for updates with sudo /opt/streamdeal-media-node/scripts/update.sh; explicitly apply a verified release with sudo /opt/streamdeal-media-node/scripts/update.sh upgrade. The Payment Gateway address is fixed by StreamDeal and is not a publisher setting.
PLATFORM_BASE_URL=https://your-media-domain.example/streamdeal MEDIA_NODE_COOKIE_SECURE=true
After starting your Media Node, register a dedicated USDT TRC-20 receiving address in Publisher Settings to enable paid channels. Free channels do not need a registered address.
Releases 0.5.9 and 0.5.10 change the database schema. Existing installations must apply the matching migrations before starting the new version. The updater deliberately does not run migrations itself, because rolling a schema back automatically is not safe. Back up the database first, then run the migrations that ship inside the installed release:
sudo docker exec -i streamdeal-media-node-mysql-1 \ mysql -ustreamdeal -p"$(sudo grep '^MYSQL_PASSWORD=' /etc/streamdeal-media-node/.runtime.env | cut -d= -f2-)" streamdeal \ < /opt/streamdeal-media-node/deploy/mysql/migrations/008_viewer_messages.sql sudo docker exec -i streamdeal-media-node-mysql-1 \ mysql -ustreamdeal -p"$(sudo grep '^MYSQL_PASSWORD=' /etc/streamdeal-media-node/.runtime.env | cut -d= -f2-)" streamdeal \ < /opt/streamdeal-media-node/deploy/mysql/migrations/009_vod_archive_status.sql sudo docker exec -i streamdeal-media-node-mysql-1 \ mysql -ustreamdeal -p"$(sudo grep '^MYSQL_PASSWORD=' /etc/streamdeal-media-node/.runtime.env | cut -d= -f2-)" streamdeal \ < /opt/streamdeal-media-node/deploy/mysql/migrations/010_vod_archived_at.sql
Which migrations to run: run 008 when upgrading from 0.5.8 or earlier, and 009 and 010 when upgrading from 0.5.9. A node already on 0.5.10 has all three applied. The 009 migration rewrites the vod_item table to add the archived state, so keep the backup. Then apply the release with sudo /opt/streamdeal-media-node/scripts/update.sh upgrade. The updater takes a rollback backup of the configuration, the data directory and the running images under /var/backups/streamdeal-media-node/. A fresh installation needs no migration step, because the schema is created at first start.
sudo sh /opt/streamdeal-media-node/scripts/start.sh up -d
On first start, the publisher login token is saved in the private /etc/streamdeal-media-node/.env. Retrieve it with sudo grep '^PUBLISHER_LOGIN_TOKEN=' /etc/streamdeal-media-node/.env. Change that value and restart to rotate the token and revoke existing sessions:
sudo sh /opt/streamdeal-media-node/scripts/rotate-login-token.sh sudo sh /opt/streamdeal-media-node/scripts/start.sh up -d
The publisher console and the public viewing pages can share one address or have one each. By default they share the public URL and the node behaves as before. Give the console its own hostname and the public domain serves viewers only: the dashboard and the management API answer on the console hostname, and reaching the console through the public hostname redirects to the right place.
# In /etc/streamdeal-media-node/.env — optional, defaults to PLATFORM_BASE_URL PUBLISHER_BASE_URL=https://console.your-media-domain.example/streamdeal
The hostname must resolve to this node and be routed to it the same way as the public one. Change the setting and restart the node; the backend applies the same rule, so a routing mistake in the reverse proxy cannot leave the management API open under the public hostname.
sudo sh /opt/streamdeal-media-node/scripts/start.sh ps curl -fsS https://your-media-domain.example/streamdeal/health
Viewer pages are served under https://your-media-domain.example/streamdeal/. Configure your reverse proxy to preserve that path prefix and forward requests to the Media Node HTTP entrypoint.
Release: 0.5.21 · Linux amd64 · USDT TRC-20 · Docker Compose