Flash Video
Convert FLV to MP4, WebM, or GIF directly in your browser — no upload, no server, no quality loss. FileDex uses FFmpeg WASM to transcode Flash Video locally on your device, preserving your original video and audio streams.
Your files never leave your device
Common questions
Can I play FLV files in Chrome or Firefox?
No. All major browsers removed Flash Player support in January 2021. FLV files cannot play natively in any modern browser. Convert to MP4 or WebM using FileDex to restore browser playback via HTML5 video.
Will converting FLV to MP4 lose quality?
If your FLV contains H.264/AAC streams, FileDex can remux to MP4 with zero quality loss — the streams transfer without re-encoding. FLV files using older codecs like Sorenson Spark or VP6 require transcoding, which introduces minimal quality reduction at CRF 20.
How do I check what codec my FLV file uses?
Run ffprobe -v error -show_streams input.flv in a terminal. Look for the codec_name field — h264 means you can remux losslessly, while flv1 (Sorenson Spark) or vp6f requires transcoding.
Why are FLV files still common if Flash is dead?
Millions of FLV files remain in media archives, old CMS platforms, and downloaded YouTube videos from pre-2010. These files are fully playable via VLC or FFmpeg but need conversion to MP4 or WebM for web embedding or mobile playback.
What makes .FLV special
Flash Video became the dominant web video format between 2005 and 2012, powering YouTube's original player, Hulu's launch, and countless embedded video widgets across the internet. The format was designed for Adobe Flash Player, which at its peak was installed on 98% of desktop browsers. When Steve Jobs refused to support Flash on the iPhone in 2010, the format's decline began. HTML5 <video> with MP4/WebM replaced it. Adobe officially ended Flash Player support in December 2020.
Continue reading — full technical deep dive
Tag-based binary structure
An FLV file starts with a 9-byte header: three bytes spelling FLV, one version byte (always 0x01), a flags byte indicating audio and/or video presence, and a 4-byte data offset pointing past the header. After the header, the file is a flat sequence of tags. FLV's tag-based structure stores each frame independently with a back-pointer to the previous tag size — this reverse-linked-list design enables seeking from any point in the file without an index. Each tag has an 11-byte header: one byte for type (audio 0x08, video 0x09, script data 0x12), three bytes for payload size, three bytes for timestamp, one byte for timestamp extension (giving 32-bit millisecond precision), and three bytes for stream ID (always 0).
The previous-tag-size field after every tag allows backward traversal. A player can jump to any byte, scan for a valid previous-tag-size boundary, and start reading forward from the next tag.
Codec constraints
FLV supports a narrow set of codecs compared to MP4 or MKV:
| Track | Supported Codecs | Notes |
|---|---|---|
| Video | Sorenson H.263, VP6, VP6 with alpha, AVC (H.264) | H.264 added in FLV version 1, requires AVCDecoderConfigurationRecord in first video tag |
| Audio | Linear PCM, ADPCM, MP3, Nellymoser, Speex, AAC | AAC requires AudioSpecificConfig in first audio tag |
H.264 in FLV uses AVCC format (length-prefixed NALUs), not Annex B (start-code-prefixed). This distinction matters when extracting raw H.264 streams — the NALU length prefix must be converted to start codes for standalone .264 files.
Script data and metadata
The first tag in most FLV files is a script data tag containing an onMetaData AMF (Action Message Format) object. This carries duration, video dimensions, frame rate, audio sample rate, encoder name, and other properties as key-value pairs. Players rely on this metadata for progress bars and seeking. If the metadata tag is missing or has incorrect duration, seeking breaks in most players.
FLV does not have a dedicated index structure. For seeking, Adobe introduced the keyframes object inside onMetaData, listing byte offsets and timestamps of each keyframe. Tools like FLVMeta and Yamdi inject this index after encoding.
Streaming performance
FLV was built for streaming. RTMP (Real Time Messaging Protocol) transports FLV tags directly over TCP, chunking them into 128-byte default fragments. This made live streaming with sub-second latency practical in 2008. A 720p stream at 2.5 Mbit/s with AAC audio at 128 kbit/s produces roughly 330 KB/s of FLV data with negligible container overhead — each tag header is just 15 bytes (11-byte header plus 4-byte back-pointer).
Modern relevance
FLV is effectively a legacy format. No major browser plays it natively. However, millions of FLV files still exist in archives, old CMS databases, and backup drives. Some live streaming infrastructure (notably older Wowza and nginx-rtmp setups) still ingests RTMP/FLV internally before transmuxing to HLS or DASH for delivery.
Converting FLV to MP4 is usually a remux operation when the source uses H.264 and AAC — no re-encoding needed, just repackaging the same compressed data into ISOBMFF atoms. FileDex handles this conversion directly in the browser, preserving the original bitstream quality.
.FLV compared to alternatives
| Formats | Criteria | Winner |
|---|---|---|
| .FLV vs .MP4 | Browser support MP4 plays natively in all modern browsers via HTML5 <video>. FLV requires the discontinued Flash Player plugin — no browser supports it since 2021. | MP4 wins |
| .FLV vs .MP4 | Codec efficiency MP4 supports H.264, H.265, and AV1 — all superior in compression to FLV's Sorenson Spark and VP6. An FLV file re-encoded to H.264 in MP4 is typically 30-50% smaller at equal visual quality. | MP4 wins |
| .FLV vs .WEBM | Open-source licensing WebM uses royalty-free VP8/VP9/AV1 codecs under BSD license. FLV's VP6 was proprietary (On2 Technologies, acquired by Google). WebM is the open web standard; FLV is a dead proprietary format. | WEBM wins |
| .FLV vs .MKV | Container flexibility MKV (Matroska) accepts virtually any codec combination with chapter markers, multiple subtitle tracks, and attachments. FLV is limited to a handful of video/audio codecs with no subtitle or chapter support. | MKV wins |
Convert .FLV to...
Technical reference
- MIME Type
video/x-flv- Magic Bytes
46 4C 56 01FLV signature followed by version byte.- Developer
- Adobe Systems
- Year Introduced
- 2003
- Open Standard
- No
FLV signature followed by version byte.
Binary Structure
An FLV file begins with a 9-byte header: 3-byte signature (FLV), 1-byte version (0x01), 1-byte type flags (bit 0 = video, bit 2 = audio), and a 4-byte big-endian data offset pointing to the first tag. The body consists of a sequence of FLV tags, each preceded by a 4-byte PreviousTagSize field. Each tag has an 11-byte header: 1-byte tag type (0x08 = audio, 0x09 = video, 0x12 = script data), 3-byte data size, 3-byte timestamp, 1-byte timestamp extension (upper 8 bits), and 3-byte stream ID (always 0). Script data tags at position 0 typically contain an onMetaData AMF object with duration, width, height, framerate, and a keyframes index for seeking.
| Offset | Length | Field | Example | Description |
|---|---|---|---|---|
0x00 | 3 bytes | Signature | 46 4C 56 (FLV) | File type identifier. Must be ASCII 'FLV'. |
0x03 | 1 byte | Version | 01 | FLV version. Always 0x01 in practice. |
0x04 | 1 byte | TypeFlags | 05 | Bitmask: bit 0 = video present, bit 2 = audio present. 0x05 = both audio and video. |
0x05 | 4 bytes | DataOffset | 00 00 00 09 | Big-endian offset to first FLV tag body. Always 9 for FLV version 1. |
Attack Vectors
- FLV files were historically delivered via Flash Player, which had a long history of critical vulnerabilities including arbitrary code execution (CVE-2015-0311, CVE-2018-4878) — even after Flash EOL, opening FLV in legacy players with Flash dependencies can expose systems
- Malformed FLV tag headers with incorrect data size fields can trigger buffer over-read in parsers that do not validate tag boundaries before reading
- Crafted onMetaData AMF objects with deeply nested structures or excessively long string values can cause stack overflow or heap exhaustion in AMF deserializers
Mitigation: FileDex processes FLV files entirely in-browser using FFmpeg WASM in a sandboxed WebAssembly memory space. No file is uploaded to any server. The WASM sandbox prevents any malformed FLV data from accessing system memory or executing native code.