web13.bozztv.comFree live streaming · peer-to-peer delivery

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 .m3u8 URL), and you get a public page at https://web13.bozztv.com/your_name plus 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.

  1. The first viewer of a channel downloads the playlist and video segments from your origin (the .m3u8 address you entered) exactly like any other player.
  2. 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.
  3. 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.
  4. 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.
  5. 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:

Requirements

Your stream must satisfy these requirements. The dashboard's Check stream now button tests most of them for you.

RequirementWhyHow 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 segmentsBrowsers 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 URLsPeers 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 sVery 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 itBrowser 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

Signing up

  1. Go to https://web13.bozztv.com/signup.
  2. Choose a user name: 3–20 characters, lowercase letters, digits and underscore. It becomes your public address https://web13.bozztv.com/user_name and cannot be changed later.
  3. Enter your e-mail and a password (8 characters minimum).
  4. Optionally paste your .m3u8 address and a channel title now, or add them later in the dashboard.
  5. Accept the Terms of Use and the Acceptable Use Policy. You must own the rights to everything you stream.
  6. 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:

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

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:

StatusMeaning
P2P workingThis viewer receives segments from peers (or is the swarm leader serving others).
P2P pendingConnected 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 workingSee 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:

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

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.

  1. Open your channel page in one browser (e.g. Chrome). Wait until the video plays.
  2. Open the same page in a second browser (Firefox, Edge, another Chrome profile, an incognito window, or another computer/phone on any network).
  3. 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.
  4. 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:

Limits

ItemValueNotes
Channels per account1Create additional accounts for additional streams.
Viewers per channel (swarm)up to 500 by defaultSet by the administrator. Above the limit new viewers still watch from the origin but without P2P.
Peers per viewer5 nearest + up to 15 randomAutomatically managed.
Stream address length1024 characters
Title / description120 / 600 characters
Origin load1 to a few full downloads per swarmThe leader plus viewers whose peers are too slow.
Player uploadlimited per peer and in totalViewers with slow upload automatically serve less.

Troubleshooting

"Stream offline" in the dashboard / no video at all

Plays in VLC but not in the browser

"P2P not working: signaling unreachable"

"P2P not working: no WebRTC" / "native playback"

"P2P pending" forever with two viewers

Video stalls / rebuffering

Home page does not show my channel

Embed shows a black frame

I forgot my password

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.