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: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM