What a linear channel actually is
A linear channel plays one programme for everybody, like broadcast TV: a viewer who tunes in at 9:40 joins the show already under way, rather than picking a title and starting it from the beginning. That is the whole difference from a video library, where each viewer presses play on their own file. A channel feels alive because something is always on, and it asks nothing of the viewer except to open it.
People build them for many reasons: a church that keeps past services playing between Sundays, a local news team with a back catalogue, a fitness brand looping classes, a film club with public-domain features, a music label with its videos. What they share is a library of finished files and a wish to have the screen never go dark.
| Linear channel | On-demand library | |
|---|---|---|
| What the viewer does | Opens it and watches whatever is on | Chooses a title and starts it |
| Where everyone is | At the same point in the same programme | Each at their own point |
| Your job | Keep a programme running with no gaps | Keep a catalogue organised and findable |
| Suits | Lean-back watching, TV apps, background viewing | Search, courses, replays on request |
How many hours do you need before going on air?
Fewer than you might fear, because a channel repeats. A day is 24 hours, so a library of 24 hours plays each title once a day; a library of 72 hours lets each title come round every three days. That arithmetic is ours, and it is the useful way to think about it: the size of your library decides how often a regular viewer sees a repeat, not whether you can start.
- Evergreen titles carry the schedule. Shows that do not date (tutorials, nature, music videos, classic episodes) can come round often without anyone minding.
- Newer or topical titles go in sparingly, so they stay a reason to tune in.
- Short pieces fill the joins. Station idents, trailers for your own shows and sponsor spots make the running order feel like a channel rather than a playlist.
If the library is thin, Primcast's Production tab can help fill it: on every paid video plan it makes songs, jingles, voice-overs, sponsor spots, cover art and music videos with your own Google Gemini, ElevenLabs, OpenAI or Stability AI account, and files each one in your library as a 1080p MP4 marked as AI-generated. That company bills you directly for what you make.
Plan the programme like a broadcaster
Think in blocks, not single videos. A block is a run of titles that belong together: a set of workouts, a string of documentaries, an hour of music videos. Blocks give the channel a shape regular viewers recognise, and they make it easier for you to maintain, because you edit a block rather than a hundred loose clips. The running order decides when each block comes round, not the clock.
- List your titles with their running times (the script in the next section adds them up for you).
- Group them into blocks of similar length and mood.
- Decide which titles are evergreen and can rotate, and which should air only now and then.
- Place sponsor or promo breaks between titles, not in the middle of them, unless the video was cut with a natural pause.
- Watch a few hours of the result from start to finish before you announce the channel.
Only put on air what you have the rights to show. Music in the background of a video, licensed film clips and footage someone else shot all need permission for public broadcast. This is general information, not legal advice; when in doubt, ask the rights holder.
Prepare the files so the stream never stumbles
Files that all share one format are the single biggest thing you can do for a smooth channel. Primcast's library publishes the sheet its files should match: an MP4 (.mp4 or .m4v) with H.264 video in Baseline, Main or High profile, 8-bit 4:2:0, at most 1920×1080 and 60 fps, and AAC-LC sound at 44.1 or 48 kHz, mono or stereo. A file that matches plays exactly as uploaded. MKV and other wrappers are turned into MP4 without re-encoding on every plan; HEVC, VP9, ProRes and other formats are converted for you only on Platinum.
To see where your files stand, install FFmpeg (it includes ffprobe), open a terminal in the folder that holds your videos (on macOS type bash and press Enter first, since the Mac's default shell stops on file types the folder does not have; on Linux, or a bash shell on Windows, paste straight away) and paste this. It checks the first video stream and the first audio stream of each file separately against the sheet, prints OK or FIX with the reasons, and ends with the total running time of the MP4s already in the folder.
vp() { ffprobe -v error -select_streams v:0 -show_entries stream="$@" -of default=nw=1:nk=1 "$f" 2>/dev/null | head -n 1; }
ap() { ffprobe -v error -select_streams a:0 -show_entries stream="$@" -of default=nw=1:nk=1 "$f" 2>/dev/null | head -n 1; }
for f in *.mp4 *.m4v *.mov *.mkv; do
[ -e "$f" ] || continue
why=""
[ "$(vp codec_name)" = h264 ] || why="$why video-codec"
case "$(vp profile)" in Baseline|"Constrained Baseline"|Main|High) ;; *) why="$why profile" ;; esac
[ "$(vp pix_fmt)" = yuv420p ] || why="$why pix_fmt"
{ [ "$(vp width)" -le 1920 ] && [ "$(vp height)" -le 1080 ]; } 2>/dev/null || why="$why size"
fr=$(vp avg_frame_rate)
{ [ "${fr#*/}" -gt 0 ] && [ "${fr%/*}" -le $(( 60 * ${fr#*/} )) ]; } 2>/dev/null || why="$why fps"
if [ -n "$(ap codec_name)" ]; then
[ "$(ap codec_name)" = aac ] && [ "$(ap profile)" = LC ] || why="$why audio-codec"
case "$(ap sample_rate)" in 44100|48000) ;; *) why="$why sample-rate" ;; esac
case "$(ap channels)" in 1|2) ;; *) why="$why channels" ;; esac
fi
if [ -z "$why" ]; then echo "OK $f"; else echo "FIX $f ($why )"; fi
done
find . -maxdepth 1 -type f \( -name '*.mp4' -o -name '*.m4v' \) -exec ffprobe -v error -show_entries format=duration -of default=nw=1:nk=1 {} \; | awk '{s+=$NF} END {printf "MP4 hours in this folder = %.2f\n", s/3600}'
On the video side it wants the h264 codec in Baseline, Constrained Baseline, Main or High profile, yuv420p pixels, at most 1920×1080 and at most 60 frames a second. On the audio side it wants aac in the LC profile, 44.1 or 48 kHz, one or two channels; a file with no audio at all passes, since the sheet allows silence. It does not flag an MKV whose streams already match, because the upload turns that wrapper into MP4 for you.
Move the files marked FIX into a folder of their own, open the terminal there, and run the block below. It writes conformed copies into a ready folder inside it and leaves your originals alone. It also runs FFmpeg's loudnorm filter, which levels each file to the same loudness target (by its documented defaults, an integrated target of -24 with a true-peak ceiling of -2), so viewers are not reaching for the remote between programmes. In this single-pass mode loudnorm upsamples audio to 192 kHz, so the block sets a 48 kHz output with -ar, as FFmpeg's documentation advises.
mkdir -p ready
for f in *.mp4 *.m4v *.mov *.mkv; do
[ -e "$f" ] || continue
out="ready/${f%.*}.mp4"
[ -e "$out" ] && { echo "skip $f (already in ready/)"; continue; }
ffmpeg -nostdin -hide_banner -i "$f" -map 0:v:0 -map '0:a:0?' -sn -dn \
-vf "scale=w='min(1920,iw)':h='min(1080,ih)':force_original_aspect_ratio=decrease:force_divisible_by=2" \
-c:v libx264 -preset medium -crf 20 -profile:v high -pix_fmt yuv420p -fpsmax 60 \
-af loudnorm -c:a aac -b:a 160k -ar 48000 -ac 2 \
-movflags +faststart "$out" || { rm -f "$out"; echo "STOP - $f did not convert, check it by hand"; }
done
-map 0:v:0 -map 0:a:0?keeps only the first picture and the first sound track (the?lets a silent file through), and-sn -dnleave out subtitle and data tracks. If a show needs captions on screen, burn them into the picture in your editor before you export.-fpsmax 60caps the frame rate at 60, the sheet's limit; a file already at 60 or below keeps its own rate.- A file that fails to convert has its half-written copy deleted and prints a STOP line, and the loop moves on to the next file. Run the check again inside
readybefore you upload.
Our choices, not FFmpeg defaults: CRF 20, 160 kb/s stereo AAC and +faststart, which moves the MP4 index to the front of the file. The medium preset is written out only to make it visible; it is libx264's default. The block re-encodes every file in the folder, which is why the flagged files get a folder of their own; watch a converted copy before uploading.
Running the channel on Primcast
Primcast's video on demand hosting with a 24/7 TV station runs both halves from one account: you upload the library once, and the same files feed a station that plays around the clock, like a live channel on the CDN. Every library plan includes the TV station at no extra cost, alongside its live channels.
- Programme. Group your videos into playlists, set the running order one time and let the evergreen shows come round again; once that is done the station runs without you.
- Breaks. Put your own sponsors' spots in the breaks on any library plan; on Platinum the station can also run ads from your own VAST ad server. No plan puts Primcast's ads in front of your viewers.
- Delivery. Viewers play from the nearest of our 5 cities, and the library and your live channels share one monthly transfer allowance.
- Keeping the library tidy. Replacing a video while its player, embed code and links stay the same, cutting clips and expiring signed links are covered on the video content management page.
Our public pages describe ordering playlists and rotating shows; they do not describe booking a programme at a fixed clock time. If your channel must start a show at exactly 8 pm every night, ask in the chat how that would work before you buy.
Getting the channel in front of viewers
A channel nobody can find is a screensaver. There are four places to put it, and most channels use more than one.
- Your own website. Every video in your library has its own player and embed code, so the shows that run on the channel can also sit on your pages, in WordPress, Wix, Squarespace or plain HTML. The Cue Player behind it plays through hls.js in Chrome, Edge and Firefox and through Apple's built-in HLS in Safari, choosing for itself. For putting the 24/7 station itself on your site, ask in the chat.
- Samsung and LG TVs. Every paid video plan includes a smart TV app in your channel's name for Samsung and LG sets made in 2018 or later, published from your own seller accounts. Samsung certification takes a few weeks and LG's check several weeks, so start early.
- Roku. Your control panel can also build a Roku channel; our Roku publishing guide walks through packaging it on your own Roku and submitting it.
- A public channel page. Turn on a page in our TV guide from the control panel; Primcast approves each listing before it appears.
Your library's MRSS feed can also be handed to services that read one, such as Roku and Google, and the video CDN page lists every plan with its viewer and transfer figures.
When this is not the right setup
- Mostly live shows? If the channel is a camera feed with the odd replay, a live channel plan suits you better; the library and TV station begin at Starter, while the free plan is live only.
- Huge archives in many formats. On Starter and Pro you export files to the sheet yourself; automatic conversion of HEVC, ProRes and similar formats is Platinum only.
- A paid subscription channel. The Samsung and LG app has no paywall or sign-in. If viewers must pay, look at the paywall in the Cue Player and your own apps instead.
- Audiences above the plan limits. The number of viewers at once is a hard limit on each channel, at the figure its plan sets, and transfer past the monthly allowance is billed per terabyte (see the video CDN page). Past Platinum, Enterprise is arranged in the chat.
Questions people ask
- Can I make my own TV channel with no studio or camera?
- Yes. A linear channel can be built entirely from finished videos: past episodes, recorded events, music videos or anything else you hold the rights to. You arrange them into a programme and the station plays them one after another, all day. A camera only matters if you also want to go live.
- Do viewers need an account to watch?
- Not on the Samsung and LG app: viewers open it and watch, with no sign-up, no paywall and no advertising. On your website the embedded player starts like any other video. A sign-in only appears if you turn on the paywall for content you sell.
- How long does it take to get onto smart TVs?
- The app itself is built in your control panel, but the stores set the pace. Samsung's certification usually takes a few weeks and LG's quality check several weeks, and both review every update again. New Samsung sellers can publish in the United States only until Samsung grants partner status.
- What if one of my files is in the wrong format?
- An MKV or similar wrapper is turned into MP4 for you on every plan, without re-encoding. Other codecs, such as HEVC, VP9 or ProRes, are converted automatically only on Platinum; on Starter and Pro, export or convert them to the H.264 and AAC sheet first, as in the FFmpeg block above.
- Can I earn from a 24/7 channel?
- You can sell breaks to sponsors and play their spots on any library plan, and on Platinum the channel can take ads from your own VAST ad server. Selling access is a separate route, through the Cue Player's paywall into your own Stripe or PayPal account, with no percentage taken by Primcast.
- Is the TV station a separate purchase?
- No. The 24/7 TV station comes with every library plan, Starter, Pro and Platinum, together with the plan's live channels. Current prices and limits are on the video on demand page.