Story 2 Β· VLC
The Traffic Cone That Plays Everything
βSome software asks you to install codecs, buy a licence and update your drivers. VLC just plays the file.β
12 min read Β· by Syed Jafer K
1. The Wedding Video Nobody Could Open
Ravi's cousin got married in 2009. The wedding videographer handed the family a stack of DVDs, a USB stick of .mts files, and one mysterious .avi that had been copied halfway. Fifteen years later, Ravi's grandmother asked him to put "everything" on the living-room TV.
His laptop's default player shrugged at the .mts files. The phone player played the .avi for ten seconds and froze. The TV said "Unsupported format" for everything else. Worse, the audio on one clip ran a full two seconds ahead of the picture, so every blessing looked like a badly dubbed film.
His friend Nisha, who maintains the community Wi-Fi at their apartment complex, leaned over his shoulder.
"Stop installing codec packs. Open this." She typed a word into his browser: VLC.
"The orange traffic cone?"
"The orange traffic cone. It's free, open source, ships with its own decoders, and has no ads, no tracking, no account. It's made by VideoLAN, a non-profit, and its engine, libVLC, is used inside hundreds of other apps. Install it and I'll show you why people call it a Swiss Army knife."
2. Why VLC Is Open Source Gold
Before the demo, Nisha explained why this belongs in a book about self-hosting.
- Free software, for real. VLC is licensed under the GPL (the core library under the LGPL), so you can read the source, build it, and embed
libVLCin your own app. - No spyware, no nag screens. It is developed by volunteers and the non-profit VideoLAN project. There is nothing to sign into.
- It carries its own codecs. H.264, H.265/HEVC, VP9, AV1, MPEG-2, FLAC, Opus, and a long list of ancient formats, all built in.
- It runs everywhere: Windows, macOS, Linux, Android, iOS, and even some smart-TV and console platforms.
- It is a server as much as a player. This is the part that surprises people, and the part she wanted Ravi to meet next.
# Ubuntu / Debian
sudo apt install vlc
# Fedora
sudo dnf install vlc
# Arch
sudo pacman -S vlc
# Or Flatpak / Snap
flatpak install flathub org.videolan.VLC
On Windows and macOS, Ravi simply downloaded the installer from videolan.org. (Always get it from the official site.)
3. The First Play: It Just Works
Ravi dragged the .mts file onto the window. It played. He dragged the half-copied .avi in. VLC offered a dialog:
"This AVI file is broken. Do you want to repair it?"
"Repair," said Nisha. "VLC can rebuild a damaged AVI index on the fly. If you want that behaviour always on, it lives in Tools β Preferences β Input / Codecs β Damaged or incomplete AVI file."
He clicked Build index then play. It slowly came to life, and the fifteen-year-old wedding appeared on screen.
Things he learned in the first five minutes:
| I want to⦠| Shortcut |
|---|---|
| Play / pause | Space |
| Full screen | F |
| Jump forward / back (short) | Shift + β / Shift + β (3 s) |
| Jump (medium) | Alt + β / Alt + β (10 s) |
| Jump (long) | Ctrl + β / Ctrl + β (1 min) |
| Faster / slower | ] / [ |
| Normal speed | = |
| Volume up / down | Ctrl + β / Ctrl + β (or the scroll wheel) |
| Mute | M |
| Screenshot | Shift + S |
| Frame by frame | E |
| Open a file | Ctrl + O |
Shortcut keys differ slightly per platform and can all be remapped under Tools β Preferences β Hotkeys.
4. Fixing the Out-of-Sync Audio
The clip with the two-second audio lag was next. Nisha tapped one key.
Jdelays the audio by 50 ms;Kbrings it earlier. (Hold or tap repeatedly.)GandHdo the same for subtitles: earlier or later.
Ravi pressed K forty times, watched the lips match the voice, and the blessing finally made sense. For a permanent fix, he could save the timing in Tools β Track Synchronization and then convert the file (see Β§6).
Subtitles got their own treat:
- Drop a
.srtfile with the same name next to the video, and VLC loads it automatically. - Choose Subtitle β Add Subtitle Fileβ¦ for any other name.
- The VLSub extension (a Lua add-on from the VLC add-ons site) can search and download subtitles from OpenSubtitles without leaving the player.
- Fonts, size, colour, and outline are adjustable in Preferences β Subtitles / OSD.
5. Seeing and Hearing Better
His grandmother complained the old video looked dark and washed out. Nisha opened Tools β Effects and Filters (Ctrl + E):
- Basic tab: equalizer, compressor, spatializer, stereo widening. The wedding band's dholak finally sounded round.
- Video Effects: brightness, contrast, hue, saturation, gamma, sharpen, de-interlace, rotate, crop, and add a text or logo watermark.
- De-interlacing (Video menu β Deinterlace) cleaned the ugly horizontal combing on the DVD clips.
- Synchronisation tab: the audio and subtitle timing tools from the previous section.
Other tricks that came out in the next hour:
- A-B loop (button in Advanced Controls, or
Playback β AβB Loop): replay a favourite 10-second segment on repeat. - Bookmarks and Jump to Time (
Ctrl + T): hop to exactly00:42:17. - Playback speed from 0.25Γ to 4Γ: watch hour-long speeches in a fraction of the time.
- Snapshots (
Shift + S): save a still frame to the Pictures folder. - Audio track and subtitle track menus: switch the language on multi-language files, which is a big deal for DVDs and MKVs.
- Chapters: skip between scenes on DVDs and MKV chapter markers.
- 360Β° video, HDR tone mapping and hardware decoding (VA-API, DXVA2, VideoToolbox) for smooth 4K on modest hardware.
6. Rescuing the Old Formats: Convert & Save
The family TV only played .mp4. Nisha opened Media β Convert / Saveβ¦ (Ctrl + R):
- Add the source file.
- Press Convert / Save.
- Choose a Profile: Video - H.264 + MP3 (MP4) for the TV.
- Set a destination file and click Start.
A progress bar ran along the timeline. For batch jobs, she showed him the command-line form:
vlc -I dummy input.mts \
--sout '#transcode{vcodec=h264,acodec=mp4a,ab=128,vb=2500}:std{access=file,mux=mp4,dst=output.mp4}' \
vlc://quit
-I dummyruns without a window.#transcode{β¦}converts the streams.#std{β¦}chooses where the result goes (a file, a network streamβ¦).vlc://quitexits when the job is done.
She also showed a trick for audio extraction (pick Audio - MP3) to turn the speeches into podcasts for elderly relatives to listen to in the car.
7. Recording What's on Screen
For a family video call on a bad connection, Ravi wanted to record the screen as a tutorial for his uncle. Nisha showed him:
Media β Open Capture Device β Capture mode: Desktop (or Screen on some platforms). Choose a frame rate (e.g. 15 or 30 fps), and use Convert instead of Play to save the recording.
There's also a built-in Record button (View β Advanced Controls) that captures whatever is currently playing, handy when watching an internet radio stream or a live broadcast and wanting to keep part of it.
She mentioned webcams and TV tuner cards, too: VLC can open capture devices, so the old USB tuner in the cupboard was suddenly useful.
8. From Player to Server: Streaming Across the House
Now the part that made Ravi sit forward.
"The wedding video is on my laptop. Grandma wants it on the TV, and my cousin in Chennai wants to watch it too."
"VLC can broadcast it," said Nisha.
Media β Streamβ¦ opens a wizard that streams a file or capture source over the network:
| Protocol | Good for |
|---|---|
| HTTP | Easy viewing from VLC, browsers and many smart TVs on the same network |
| RTSP | IP-camera-style streaming, with seek support |
| RTP / UDP | Multicast and low-latency use (e.g. a whole building watching the same live feed) |
| HLS | Chunked streaming for wide device compatibility |
| Icecast | Internet radio |
She did it from the command line as well, no GUI needed:
# Stream a file over HTTP on port 8080
cvlc wedding.mp4 --sout '#standard{access=http,mux=ts,dst=:8080/wedding}' --loop
# On the TV or another computer:
# Media β Open Network Stream β http://192.168.1.20:8080/wedding
cvlc is the no-interface version of VLC, perfect for a home server or Raspberry Pi. She went further and turned it into a systemd service so it would start at boot:
# /etc/systemd/system/family-stream.service
[Unit]
Description=Family video stream
After=network-online.target
[Service]
User=ravi
ExecStart=/usr/bin/cvlc /srv/videos --loop --random \
--sout '#transcode{vcodec=h264,acodec=mp4a}:std{access=http,mux=ts,dst=:8080/family}'
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl enable --now family-stream
Ravi now had his own tiny TV station: "Channel Wedding", broadcasting all day to anything that could open a URL.
A note on safety: a VLC stream has no login. Keep it on your home network, or put it behind a VPN or reverse proxy with authentication. Never expose raw port 8080 to the internet.
9. Watching the World: Network Streams, Radio and Podcasts
VLC is also a client for the wider network. In Media β Open Network Stream (Ctrl + N) Ravi pasted:
- An internet radio URL (
http://β¦/stream.mp3) - An IPTV playlist (
.m3u/.m3u8) - An RTSP URL from the IP camera on the balcony:
rtsp://user:pass@192.168.1.50:554/stream1 - A YouTube link (VLC has a built-in resolver for many sites, though extractors can break when sites change, so it is not a guarantee)
In the playlist sidebar (Ctrl + L), the Internet section lists podcast directories, radio stations, and Jamendo free music. The Local Network section automatically discovers UPnP/DLNA servers like his NAS (and SMB/FTP/SFTP shares) so he could browse the family media server without mounting anything.
10. The Remote Control in His Pocket
Nisha enabled the built-in web interface, so he could control the living-room VLC from his phone:
Tools β Preferences β Show settings: All β Interface β Main interfaces β tick "Web", then Lua β HTTP and set a password.
Then in a phone browser: http://192.168.1.20:8080 (the port is configurable). It shows a playlist, a play/pause button, a seek bar, and a volume slider. For more options:
- The
rc(remote control) interface:vlc -I rcoffers a text console;-I telnetallows network control with a telnet password. - The HTTP JSON API (
/requests/status.json) lets scripts and home-automation tools pause the film when the doorbell rings. - Mobile apps: VLC for Android and VLC for iOS play local files and network shares, and companion remote apps can control the desktop player.
- Chromecast / renderers: Playback β Renderer lists cast devices on the network; pick your TV and VLC sends the video to it, transcoding if needed.
11. Discs, Playlists and the Media Library
The old DVDs came out of the cupboard.
- DVD and video CD playback, including menus and chapters. Encrypted Blu-rays need extra libraries (
libbluray, and the AACS key database) that are not bundled for legal reasons. - Audio CD playing, with CDDB track names, and ripping via Convert/Save.
- Playlists: drag a folder into the playlist, or save as
.m3u/.xspffor reuse. Loop one, loop all, random play. - Media Library: VLC scans folders and keeps your video, music and podcasts organised with album art.
- Wall / video-wall mode and Zoom for presentations.
Nisha's favourite for the apartment's community hall: a playlist of slides and videos, set on loop with --fullscreen --no-osd, running on an old mini-PC attached to the hall's TV, which now announces events and plays Diwali greetings every morning.
12. Make It Yours: Extensions, Skins and Source
Over the next weeks, Ravi dug deeper:
- Extensions: Lua scripts in
~/.local/share/vlc/lua/extensions/(Linux) add things like subtitle search, lyrics, or time-jump helpers. The official add-ons site hosts many. - Skins and interface: switch to a skin or the minimal interface for kiosk-style setups.
- Preferences β All: hundreds of advanced options (caching, network latency, HTTP user agent, audio output module, etc.)
- libVLC: apps in Python, C#, Java, Swift and Rust embed the same engine. Even a ten-line Python script can play a stream:
import vlc
player = vlc.MediaPlayer("http://192.168.1.20:8080/family")
player.play()
input("Press Enter to stop")
- Build from source:
git clone https://code.videolan.org/videolan/vlc.git. Bug reports and patches are welcome, and he fixed a typo in the Tamil translation on the very first weekend.
13. Keeping VLC Healthy
- Update regularly. New releases add codecs and fix security problems in demuxers and decoders. The package manager or the official site is the only place to get it.
- Be careful with unknown files and network streams. Media parsers are a classic attack surface, so keep VLC up to date and treat random downloads with suspicion.
- Network caching: if a stream stutters, raise Preferences β Input / Codecs β Network caching (ms) (for example to 1500 ms).
- Reset preferences if something misbehaves: Preferences β Reset Preferences or delete
~/.config/vlc. - Hardware acceleration: if 4K is choppy, check Preferences β Input / Codecs β Hardware-accelerated decoding.
- Privacy: VLC does not need an account, but it can fetch media metadata and album art online; this and "recent files" history can be switched off in Preferences.
14. Epilogue: The Living-Room Premiere
On Sunday evening, the whole family sat in front of the TV. Ravi pressed the Space key; the wedding began, with the fifteen-year-old audio finally in sync, thanks to forty taps of K.
His grandmother pointed at the screen. "That's your uncle! He's dancing!"
In Chennai, his cousin opened http://β¦/wedding on his laptop and watched at the very same moment, laughing at the same scenes. And in the corner of the hall, the orange traffic cone icon shone on the old mini-PC that now ran the community's daily slideshow.
"Fifteen years of video," Ravi said, "and one free program played every single one."
Nisha smiled. "That's open source. Nobody asked you to buy a codec. Nobody asked for your email."
Quick Reference Cheat-Sheet
| I want to⦠| Do this |
|---|---|
| Play anything | Drag it onto VLC |
| Fix lip-sync | J / K (audio), G / H (subtitles) |
| Change speed | [ / ] / = |
| Convert a file | Media β Convert / Save (Ctrl + R) |
| Convert by script | vlc -I dummy in.mkv --sout '#transcode{β¦}:std{β¦}' vlc://quit |
| Record screen | Media β Open Capture Device β Desktop |
| Stream on the LAN | Media β Stream, or cvlc file --sout '#standard{access=http,mux=ts,dst=:8080/x}' |
| Watch a network stream | Media β Open Network Stream (Ctrl + N) |
| Cast to a TV | Playback β Renderer |
| Control from a phone | Enable the Web / Lua HTTP interface |
| Effects & equalizer | Tools β Effects and Filters (Ctrl + E) |
| Take a screenshot | Shift + S |
| Add subtitles | Drop a .srt next to the video, or Subtitle β Add Subtitle File |
Key takeaways
- VLC is a player, converter, recorder, streaming server and remote-controlled media box, all in one free, open source program.
cvlc+--soutturns any old machine into a small home TV station.- No codec packs needed: it ships its own decoders and can even repair broken files.
- libVLC lets you embed the same engine in your own apps.
- Streams have no authentication: keep them on your LAN or behind a VPN.
Self-hosting is not only about servers in racks. Sometimes it is a traffic cone on an old mini-PC, quietly playing everything.