Flv

**Flash Video**（簡稱 **FLV**），是一種網路影片格式，用作串串流媒體格式，它的出現有效地解決了視訊檔匯入 Flash 後，使匯出的 SWF 檔案體積龐大，不能在網路上有效使用等缺點。

一般 FLV 檔案包在 SWF PLAYER 的殼裡，並且 FLV 可以很好的保護原始位址，不易下載，從而起到保護著作權的作用。但還是有些影片格式轉換軟體將 FLV 轉成一般的影片格式，如中國的軟體格式工廠。隨著影片網站的豐富，在 2008 年時這個格式已經非常普及，包括 YouTube、NICONICO 動畫、Google Video、Yahoo! Video、MySpace，以及中國的優酷、酷 6、BiliBili 等大部分影片分享網站均採用這個格式。

然而，Flash 存在著包括大量耗電以及資訊安全等若干問題，隨著行動裝置與行動應用程式的發展與普及而日益嚴重，2010 年賈伯斯曾公開抨擊。2011 年 11 月 9 日，Adobe 公司宣布停止開發個人電腦平台以外的 Flash Player，而專注於開發非專利標示語言 HTML5。

2016 年，Youtube 已經改採用 HTML5 技術，Google 公司表示 flash 廣告會自動轉檔為 HTML5 形式。2015 年 6 月，Google 宣布公司旗下的 Chrome 瀏覽器停止了 Flash 外掛的自啟動。2015 年 9 月 1 日起，Chrome 瀏覽器預設不支援這些外掛程式，並且 Amazon 公司旗下電子商務和廣告平台也停止使用 Flash 技術。

中國影片網站嗶哩嗶哩為了減少遷移至 HTML5 成本而開發了 flv.js，可以通過瀏覽器支援的 Media Source Extension 播放 FLV 檔案格式中的 H.264 和 AAC 編碼內容，所以如今 Chrome、Edge 等瀏覽器仍然可以收看來自 BiliBili 的影片。

2020 年 12 月 31 日，Chrome 作為最後一個宣布將不再支援使用 Flash 的應用程式瀏覽器，flv 影片均無法透過 Google Chrome 收看，除開 BiliBili、優酷等影片網站以外的影片網站均停止使用 flv 作為影片格式。

## F4V

FLV 在 H.264 的影片規格或是 AAC 的音源規格都達到功能極限，為了克服這個格式上的限制，F4V 於是誕生。F4V 是基於 ISO base media file format 制定出來的容器格式（Container format）。至少於 Flash Player 12.0 update 3 以上版本才能播放。F4V 支援的影片類型為 H.264，影像類型為 GIF、PNG 以及 JPEG，音訊類型為 AAC 以及 MP3。

## FLV 檔案構成

FLV 檔案 = FLV 標頭檔 + tag1+tag 內容 1 + tag2+tag 內容 2 + ...+... + tagN+tag 內容 N

### FLV 標頭檔

FLV 標頭檔：（9 位元組）

* 1-3：前 3 個位元組是檔案格式標識（FLV 0x46 0x4C 0x56）。
* 4-4：第 4 個位元組是版本（0x01）
* 5-5：第 5 個位元組的前 5 個 bit 是保留的必須是 0.
  * 第 5 個位元組的第 6 個 bit 音訊類型標誌（TypeFlagsAudio）
  * 第 5 個位元組的第 7 個 bit 也是保留的必須是 0
  * 第 5 個位元組的第 8 個 bit 影片類型標誌（TypeFlagsVideo）
* 6-9: 第 6-9 的四個位元組還是保留的。其資料為 00000009 .
* 整個檔案頭的長度，一般是 9（3+1+1+4）

### tag 基本格式

tag 類型資訊，固定長度為 15 位元組

* 1-4：前一個 tag 長度（4 位元組），第一個 tag 就是 0
* 5-5：tag 類型（1 位元組）；0x8 音訊；0x9 影片；0x12 指令碼資料
* 6-8：tag 內容大小（3 位元組）
* 9-11：時間戳（3 位元組，毫秒）（第 1 個 tag 的時候總是為 0, 如果是指令碼 tag 就是 0）
* 12-12：時間戳擴充（1 位元組）讓時間戳變成 4 位元組（以儲存更長時間的 flv 時間資訊），本位元組作為時間戳的最高位。

在 flv 回放過程中，播放順序是按照 tag 的時間戳順序播放。任何加入到檔案中時間設定資料格式都將被忽略。

* 13-15：streamID（3 位元組）總是 0

### flv 檔案元資訊（metadata）

flv 檔案中的元資訊，是一些描述 flv 檔案各類屬性的資訊。這些資訊以 AMF 格式儲存在檔案的起始部分。adobe 官方的標準 flv 元資訊專案如下：

* audiochannels
* audiocodecid
* audiodatarate
* audiodevice
* audioinputvolume
* audiosamplerate
* creationdate
* duration (media files only)
* fmleversion (Flash Media Live Encoder version)（media files only）
* framerate
* height
* lastkeyframetimestamp (media files only)
* lasttimestamp (media files only)
* presetname
* videocodecid
* videodatarate
* videodevice
* videokeyframe\_frequency
* width

兩個常用的操作 metadata 的工具是 _flvtool2_ 和 _FLVMDI_，都是把 keyframes 作為一個預設的元資訊專案。

## FLV 播放程式

### 桌面軟體

這些播放程式包括：

* Adobe Media Player
* BitComet FLV Player
* ExtraPlayer
* GOM Player
* K-Multimedia Player
* MPlayer
* Perian
* PotPlayer
* Real Player 11
* VLC media player
* FLV Player by Martijn de Visser
* Quick Time 10
* 任何基於 FFmpeg 的播放程式
* 任何利用 DirectShow 配合 ffdshow 的播放程式
  * Media Player Classic
  * MPC-HC
  * MPC-BE
  * Windows Media Player
  * Windows Media Center（需要改動登錄檔）
  * 暴風影音
  * PowerDVD

### 桌面軟體與網頁端播放程式

* JW FLV Player（授權方式：CC by-nc-sa）
* Moyea Web Player（頁面存檔備份，存於網際網路檔案館）（免費使用。可裝上外掛程式進行功能上的擴充，所見即所得圖形介面軟體。）

### 網頁端播放程式

* Dreamsocket Media Player（授權方式：CC by-nc-sa）
* FV H.264 FLV Ads Player 免費軟體
* Sonettic Cinema FLV Player 免費與商業版軟體均有
* Hitasoft Free RIPE FLVPlayer
* FLV / H.264 Video Player I, II and III by FlashXpert

## 註釋及參考來源

## 外部連結

* Flash Developer Center - Flash Video Articles（頁面存檔備份，存於網際網路檔案館）
* Adobe Flash (SWF) and Flash Video (FLV) File Format Specification Licensing Page（adobe.com）
* Adobe Flash FLV Video File Format（頁面存檔備份，存於網際網路檔案館）（Library of Congress）