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:[email protected]: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);
MP4格式檢視
可以用MP4 reader工具檢視
标準MP4格式
FMP4格式
下載下傳
fmp4用FFmpeg API編寫的demo:https://download.csdn.net/download/qq_22633333/11387158