FMP4概念
fmp4,是適應於現代瀏覽器的一種流媒體格式。
和mp4格式不同的是,以往的mp4格式化也分為header信息和payload信息,一個大的mp4就會有一個很大的頭信息,不適合與現在的網絡環境。所以新的fmp4格式就出現了,fmp4格式有一個帶了metadata的頭片段,及后面一序列的fragment,每個fragment都有各自的header信息,這樣就把header信息也分成了一個個小的片段,更適合現在的應用場景。所以fmp4格式也就是用於MediaSource對象的SourceBuffer的格式,通過一個initSegment和一序列的segment塞給MediaSource對象來播放。
FMP4生成
FFmpeg命令行轉換
1、H264文件封裝成FMP4
ffmpeg.exe -i test.264 -g 52 -f mp4 -movflags frag_keyframe+empty_moov output.mp4
2、rtsp封裝成FMP4
ffmpeg -i rtsp://admin:admin123@172.16.28.253:554/h264/ch1/main/av_stream?videoCodecType=H.264 -g 52 -f mp4 -movflags frag_keyframe+empty_moov output.mp4
movflags參數:
frag_keyframe: 導致碎片輸出,
empty_moov:將導致輸出100%分段; 沒有這個,第一個片段將被多路復用為短片(使用moov),其后是片段中的其余媒體,
-g 52 強制(至少)每第52幀作為關鍵幀
FFmpeg API方式轉換
寫入文件格式頭信息的時候設置AVDictionary結構體
AVDictionary *opts = NULL;
av_dict_set(&opts, "movflags", "frag_keyframe+empty_moov", 0);
avformat_write_header(o_fmt_ctx, &opts);
av_dict_free(&opts);
- 1
- 2
- 3
- 4
MP4格式查看
可以用MP4 reader工具查看
標准MP4格式
FMP4格式
下載
fmp4用FFmpeg API編寫的demo:https://download.csdn.net/download/qq_22633333/11387158