天天看點

FFmpeg 指令行和API方式轉換rtsp或264成Fragmented MP4

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格式

FFmpeg 指令行和API方式轉換rtsp或264成Fragmented MP4

FMP4格式

FFmpeg 指令行和API方式轉換rtsp或264成Fragmented MP4

下載下傳

fmp4用FFmpeg API編寫的demo:https://download.csdn.net/download/qq_22633333/11387158