web13.bozztv.com — User manual
This manual explains everything a broadcaster or viewer needs: how the service works, how to sign up, what your stream must look like, how to embed the player, how to verify that peer-to-peer (P2P) delivery is working, what the limits are, and how to fix the most common problems.
Short version: sign up, paste the address of your HLS stream (a
.m3u8URL), and you get a public page athttps://web13.bozztv.com/your_nameplus an embed code. Viewers of that page share the video with each other through their browsers, so your streaming server or CDN delivers the stream once instead of once per viewer.
How it works
Every channel page contains a standard HLS player (hls.js) with a P2P engine attached to it.
- The first viewer of a channel downloads the playlist and video segments from your origin (the
.m3u8address you entered) exactly like any other player. - Every additional viewer opens the same page. The players find each other through this site's signaling server (a small WebSocket service) and connect directly, browser to browser, over WebRTC data channels.
- Each video segment is downloaded from the origin by one viewer (the swarm leader) and then forwarded to the other viewers over the P2P connections. If a segment does not arrive from a peer in time, the player fetches it from the origin itself, so playback never depends on peers.
- Every segment is verified (hash and content sniffing) before it is handed to the player. A peer cannot inject bad data into another viewer's playback.
- The players report anonymous statistics (bytes from origin, bytes from peers, stalls, connected peers) so you can see the offload ratio in your dashboard.
What this means for you:
- Bandwidth: with 50 viewers your origin serves roughly the load of 1–3 viewers. The more viewers a channel has, the higher the offload (typically 80–97 %).
- Quality: viewers still watch the same HLS stream at the same quality. P2P only changes where the bytes come from.
- Reliability: if peers are slow or disappear the player silently falls back to the origin. The origin must therefore always be reachable; P2P reduces its load, it does not replace it.
- Privacy: peers exchange video segments and small control messages only. No personal data is exchanged between viewers. Viewers can see each other's IP addresses through WebRTC, as with any P2P video service.
Requirements
Your stream must satisfy these requirements. The dashboard's Check stream now button tests most of them for you.
| Requirement | Why | How to check |
|---|---|---|
HLS (.m3u8 playlist) over http:// or https:// | The player is an HLS player. RTMP, RTSP, DASH, WebRTC ingest and plain MP4 files are not supported directly. | Open the URL in a browser: it should download a small text file starting with #EXTM3U. |
CORS header Access-Control-Allow-Origin: * on playlists and segments | Browsers refuse cross-site requests without it. Without CORS the stream will not play at all, P2P or not. | Dashboard → Check stream now → "CORS". Or curl -sI -H 'Origin: https://web13.bozztv.com' YOUR_URL and look for the header. |
| https:// if your viewers use https (this site uses https) | Browsers block http:// media on https:// pages (mixed content). | Make sure the URL starts with https://. |
| Stable segment URLs | Peers exchange segments by name. If every viewer receives a differently named URL for the same segment (per-viewer tokens, load-balancer hints), peers cannot share. | Open the media playlist twice: segment names should be the same. Signed URLs that are identical for all viewers are fine. |
| Segment duration 2–10 s | Very short segments (< 1 s) add signaling overhead; very long ones (> 10 s) delay peer sharing. | #EXT-X-TARGETDURATION in the media playlist. |
| Codecs: H.264 video, AAC or MP3 audio (TS or fMP4 segments); H.265/HEVC only where the browser supports it | Browser decoders. | Check with the debug view or the dashboard check. |
CORS
The most common problem by far. Your origin must send Access-Control-Allow-Origin: * (or the exact site origin https://web13.bozztv.com) on every response: the master playlist, the media playlists and the segments. Examples:
nginx
location /live/ {
add_header Access-Control-Allow-Origin * always;
add_header Access-Control-Allow-Headers Range always;
add_header Access-Control-Expose-Headers Content-Length always;
types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; video/mp4 m4s mp4; }
}
Apache (.htaccess in the HLS directory)
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Headers "Range"
Wowza Streaming Engine: Application → Properties → Custom → add cupertinoUserHTTPHeaders = Access-Control-Allow-Origin: * (module cupertinostreaming), or use the HTTP origin's CORS setting.
CDNs (Cloudflare, Akamai, CloudFront, Bunny…): enable CORS in the origin/pull-zone settings, with * as the allowed origin. Cloudflare "Transform Rules → Response headers" can add the header.
Test from the command line (the header must be present in the output):
curl -sI -H "Origin: https://web13.bozztv.com" https://your-server.example.com/live/stream/playlist.m3u8 | grep -i access-control
Sources that work well
- Wowza, nginx-rtmp / nginx with the hls module, Ant Media, Red5, MistServer, SRS, OvenMediaEngine (HLS output), Unified Streaming, Flussonic.
- OBS / vMix / hardware encoders → RTMP → any of the above → HLS.
- Any CDN pulling from the above, including the Tulix / SSH101 network.
- FFmpeg writing HLS to a web server:
ffmpeg -re -i input -c:v libx264 -preset veryfast -g 60 -c:a aac -f hls -hls_time 4 -hls_list_size 10 -hls_flags delete_segments /var/www/live/stream.m3u8. - Video-on-demand HLS (a playlist with
#EXT-X-ENDLIST) also works; P2P works even better there, since viewers are at different positions and can share more.
Signing up
- Go to https://web13.bozztv.com/signup.
- Choose a user name: 3–20 characters, lowercase letters, digits and underscore. It becomes your public address
https://web13.bozztv.com/user_nameand cannot be changed later. - Enter your e-mail and a password (8 characters minimum).
- Optionally paste your
.m3u8address and a channel title now, or add them later in the dashboard. - Accept the Terms of Use and the Acceptable Use Policy. You must own the rights to everything you stream.
- Click Create channel. You are logged in immediately and land on your dashboard.
Some sites have registration closed; in that case use the contact page.
Your dashboard
https://web13.bozztv.com/dashboard shows:
- Stream status (online/offline), when it was last checked, and the error if it failed.
- Viewers now and the peak number of simultaneous viewers.
- P2P offload: the share of video bytes that viewers received from other viewers instead of your origin, and the totals.
- Quality: resolution, bitrate, number of variants, codecs and the CORS check result, as detected from your playlist.
- The stream settings form: address, title, description, thumbnail URL, 18+ flag, unlisted flag.
- Share & embed: your page URL, the embed code, the embed URL and a link to the debug view.
- A 24-hour viewer chart (once someone watched).
Check stream now downloads your playlist from the server side and shows: online/offline, live or VOD, target duration, variants, best resolution/bitrate, codecs and whether the CORS header is present. Streams are also checked automatically every few minutes; the home page only lists channels that are online.
Channel options
- Title / description / thumbnail are shown on your page and in the channel grid on the home page. The thumbnail must be an https image URL (JPEG/PNG/WebP, 16:9 recommended).
- Adult (18+) marks your channel with a badge. Adult channels are hidden from the home page unless the site administrator enables them; the page and the embed always work. Streaming adult content without this flag is a violation of the AUP.
- Unlisted removes the channel from the home page and from the sitemap. The page and the embed keep working. Useful for private events or while testing.
Your channel page
https://web13.bozztv.com/user_name shows the player, the title, description, current viewer count, share link, embed code and a short diagnostics box.
Under the video there is a P2P status strip:
| Status | Meaning |
|---|---|
| P2P working | This viewer receives segments from peers (or is the swarm leader serving others). |
| P2P pending | Connected to signaling, waiting for peers or for the first shared segment. Normal for the first viewer and during the first 10–20 seconds. |
| P2P not working | See the text next to it: WebRTC unavailable, native playback (iOS Safari), signaling unreachable, or all peers failed. Video still plays from the origin. |
The page never blocks playback because of P2P. If anything goes wrong the viewer simply watches from the origin.
Mobile: Android Chrome/Firefox support P2P. iOS Safari plays HLS natively (no Media Source Extensions), so iPhones and iPads always play from the origin and do not take part in P2P. Desktop Safari does take part.
Embedding
Copy the embed code from your dashboard or channel page:
<iframe src="https://web13.bozztv.com/embed/user_name" width="854" height="480" frameborder="0" scrolling="no"
allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
Options:
- Responsive: wrap the iframe in a container and make it fill it:
<div style="position:relative;aspect-ratio:16/9;max-width:960px">
<iframe src="https://web13.bozztv.com/embed/user_name" style="position:absolute;inset:0;width:100%;height:100%;border:0"
allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
</div>
- No autoplay:
https://web13.bozztv.com/embed/user_name?autoplay=0shows a Play button. - Autoplay starts muted (browsers require it); a tap on the Unmute overlay enables sound.
- WordPress: paste the iframe in a "Custom HTML" block. Wix/Squarespace/Webflow: use their "Embed code" element.
- The
allow="autoplay …"attribute matters: without it many browsers refuse to autoplay inside an iframe. - Viewers of your embedded player and viewers of your channel page are in the same swarm; they share segments with each other.
A raw player without any site chrome exists at https://web13.bozztv.com/?src=YOUR_M3U8 (production) and https://web13.bozztv.com/debug.html?src=YOUR_M3U8 (debug). They use the same P2P engine and the same swarm as your channel page, because the swarm is derived from the stream URL.
Testing
You need two players to see P2P; a single viewer always downloads from the origin.
- Open your channel page in one browser (e.g. Chrome). Wait until the video plays.
- Open the same page in a second browser (Firefox, Edge, another Chrome profile, an incognito window, or another computer/phone on any network).
- Within ~10–20 seconds the second player's status strip should say P2P working. The first one becomes the leader and shows that it serves peers.
- For details open the Debug view link (also
https://web13.bozztv.com/debug.html?src=YOUR_M3U8). It shows each segment with its source (ORIGIN or PEER), the connected peers, bytes in each direction, the signaling state, a verdict block that says exactly why P2P is or is not working, and a built-in test procedure.
Notes:
- Two tabs in the same browser also work, but browsers throttle background tabs; keep both visible.
- Corporate networks and some mobile carriers block WebRTC (UDP). A TURN server (configured by the site administrator) helps in most such cases.
- The first viewer always shows origin downloads; that is expected. Look at the second viewer.
- Playback from the origin while P2P is "pending" is normal for the first few segments.
Limits
| Item | Value | Notes |
|---|---|---|
| Channels per account | 1 | Create additional accounts for additional streams. |
| Viewers per channel (swarm) | up to 500 by default | Set by the administrator. Above the limit new viewers still watch from the origin but without P2P. |
| Peers per viewer | 5 nearest + up to 15 random | Automatically managed. |
| Stream address length | 1024 characters | |
| Title / description | 120 / 600 characters | |
| Origin load | 1 to a few full downloads per swarm | The leader plus viewers whose peers are too slow. |
| Player upload | limited per peer and in total | Viewers with slow upload automatically serve less. |
Troubleshooting
"Stream offline" in the dashboard / no video at all
- Open your
.m3u8in a browser: a#EXTM3Utext file must download. If not, your origin is down or the URL is wrong. - Run Check stream now: read the error.
403/404mean the URL is wrong or protected;timeoutmeans the server does not respond from the internet;no segmentsmeans the playlist is empty (encoder not running). - The address must start with
https://when viewers use this https site (mixed content is blocked by browsers).
Plays in VLC but not in the browser
- Almost always CORS. See CORS. VLC does not need CORS, browsers do.
- Or the codec: browsers cannot play MPEG-2 video, HEVC without hardware support, or AC-3/E-AC-3 audio in most cases. Use H.264 + AAC.
"P2P not working: signaling unreachable"
- The viewer's network blocks WebSocket connections, or a browser extension interferes. Video still plays from the origin.
- If it happens for everyone, the site is being restarted or a proxy in front of it does not pass WebSocket upgrades (administrator issue).
"P2P not working: no WebRTC" / "native playback"
- Very old browsers, some privacy browsers with WebRTC disabled, and iOS Safari. Nothing to do on your side.
"P2P pending" forever with two viewers
- Both viewers are behind restrictive NATs/firewalls and there is no TURN server. Ask the administrator to configure TURN.
- Segment names differ per viewer (per-session tokens in URLs). Peers announce segments by name; if names differ they cannot match. Use a URL that is identical for all viewers.
- The two players are not in the same swarm: they must use exactly the same stream URL (the swarm id is derived from it). A
?token=that differs, orhttpvshttps, creates different swarms.
Video stalls / rebuffering
- Check the origin first: if the stream stalls for the first viewer, the origin or encoder is too slow. Reduce the bitrate or fix the encoder.
- Keep segments short (2–4 s) and the playlist window at 6 segments or more; with a 3-segment window there is no room to catch up.
- Peers that are too slow are ignored automatically; the player fetches from origin within the deadline.
Home page does not show my channel
- The channel must be online (checked every few minutes; use Check stream now), not unlisted, not 18+ (unless enabled by the admin), not blocked and the account not disabled.
Embed shows a black frame
- Use the exact iframe code including
allow="autoplay; …". Check the browser console for mixed-content or CORS errors. Try?autoplay=0.
I forgot my password
- https://web13.bozztv.com/reset if the site has e-mail configured; otherwise contact the administrator.
Frequently asked questions
Does this record or re-stream my video? No. The site only tells the players about each other. Video is fetched from your origin by the viewers' browsers and forwarded between them. Nothing is stored on the server.
Can I use a stream from another provider (e.g. my Tulix/SSH101 channel)? Yes, if you have the right to distribute it and the origin sends CORS headers. The SSH101 directory page shows an example integration.
Is it free? Yes. The service is provided as-is under the Terms of Use. Abuse (copyright infringement, illegal content) leads to blocking; see the AUP.
How many viewers can I have? As many as your origin can serve without P2P at roughly 5–20 % of the load. In practice the swarm limit configured by the administrator (500 by default) applies per channel.
Can viewers see each other? Only technically (IP addresses inside WebRTC, as with any P2P video service). No names, no chat, no history.
Which browsers? Chrome, Edge, Firefox, Opera, Brave (with WebRTC allowed), desktop Safari, Android Chrome/Firefox. iOS Safari plays without P2P.
Does it work with DRM / encrypted HLS? AES-128 encrypted playlists work (segments are shared encrypted; each viewer fetches the key from your key server). FairPlay/Widevine DRM is not supported.
Can I change my user name? No, it is your permanent page address. Create a new account for a new name.
Can I remove my account? Use the contact page; an administrator deletes it together with all its data.
Contact
Questions and abuse reports: contact page · e-mail: info@tulix.com · abuse/DMCA: https://web13.bozztv.com/report.