視頻直播和播放轉碼器框架:FFmpeg是處理多媒體內容的庫和工具的集合。例如音頻,視頻,字幕和相關的元數據。
一、介紹:
FFmpeg是一套可以用來記錄、轉換數字音頻、視頻,並能將其轉化為流的開源計算機程序。采用LGPL或GPL許可證。
它提供了錄制、轉換以及流化音視頻的完整解決方案。它包含了非常先進的音頻/視頻編解碼庫libavcodec,為了保證高可移植性和編解碼質量,libavcodec里很多codec都是從頭開發的。
FFmpeg在Linux平台下開發,但它同樣也可以在其它操作系統環境中編譯運行,包括Windows、Mac OS X等。這個項目最早由Fabrice Bellard發起,現在由Michael Niedermayer維護。
許多FFmpeg的開發人員都來自MPlayer項目,而且當前FFmpeg也是放在MPlayer項目組的服務器上。項目的名稱來自MPEG視頻編碼標准,前面的"FF"代表"Fast Forward"。
簡單來說,FFmpeg是一個免費的多媒體框架,可以運行音頻和視頻多種格式的錄影、轉換、流功能,能讓用戶訪問幾乎所有視頻格式,包括mkv、flv、mov,VLC Media Player、Google Chrome瀏覽器都已經支持。
二、詳情:
構成
1、libavfilter: 提供了一種通過濾波器鏈更改解碼的音頻和視頻的方法,所有的音視頻的后期濾鏡處理都是由它完成的。
2、libavformat:對多媒體格式的解析和封裝。實現流協議,容器格式和基本I / O訪問。
3、libavutil: 一些常用的工具,包括哈希,解壓縮器和其他實用程序功能。
4、libpostproc:用於后期的效果處理
5、libavresample:移植的庫,對音頻進行重采樣的
6、libswscale:對視頻的操作,實現顏色轉換和縮放例程。
7、libswresample:對音頻的操作,實現音頻混合和重采樣例程。
8、libavdevice: 提供訪問捕獲和回放設備的抽象。對設備做處理的、如視頻的采集,音頻的采集、桌面的采集
9、libavcodec:提供了更多編解碼器的實現。
[ffmpeg](https://ffmpeg.org/ffmpeg.html)是一個命令行工具箱,用於操作,轉換和流式傳輸多媒體內容。
[ffplay](https://ffmpeg.org/ffplay.html)是一種簡約的多媒體播放器。
[ffprobe](https://ffmpeg.org/ffprobe.html)是用於檢查的簡單分析工具多媒體內容。
[ffserver](https://ffmpeg.org/ffserver.html)是多媒體流服務器進行直播,一般用來搭建流媒體服務。
其他小工具,例如“ aviocat”,“ ismindex”和“ qt-faststart”。
//命令 ffmpeg version 3.2.4 Copyright (c) 2000-2017 the FFmpeg developers built with Apple LLVM version 8.0.0 (clang-800.0.42.1) configuration: --prefix=/usr/local/Cellar/ffmpeg/3.2.4 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda 默認的配置如下: --enable-shared 啟用shared -enable-pthreads 啟用pthreads --enable-gpl 啟用gpl --enable-version3 啟用version3 -enable-hardcoded-tables 啟用hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= 啟用avresample --enable-libmp3lame 啟用libmp3lame --enable-libx264 啟用libx264 --enable-libxvid 啟用libxvid --enable-opencl 啟用opencl --disable-lzma 禁用lzma --enable-vda 啟用vda //使用格式 usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}... 1、Getting help: -h 打印基本選項 -h long 打印更多選項 -h full 打印所有選項(包括所有格式和編解碼器特定的選項,很長) -h type=name 打印命名解碼器/編碼器/解復用器/復用器/過濾器的所有選項 2、Print help / information / capabilities:(打印幫助/信息/功能:) -L 顯示證書 -h topic 顯示幫助 -? topic 顯示幫助 -help topic 顯示幫助 --help topic 顯示幫助 -version 顯示版本 -buildconf 顯示構建配置 -formats 顯示可用格式 -devices 顯示可用設備 -codecs 顯示可用的編解碼器 -decoders 顯示可用的解碼器 -encoders 顯示可用的編碼器 -bsfs 顯示可用的比特流過濾器 -protocols 顯示可用的協議 -filters 顯示可用的過濾器 -pix_fmts 顯示可用的像素格式 -layouts 顯示標准頻道布局 -sample_fmts 顯示可用的音頻樣本格式 -colors 顯示可用的顏色名稱 -opencl_bench 在所有OpenCL設備上運行基准測試並顯示結果 -sources device 列出輸入設備的來源 -sinks device 列出輸出設備的接收器 -hwaccels 顯示可用的硬件加速方法 3、Global options (affect whole program instead of just one file:(全局選項(影響整個程序,而不僅僅是一個文件:)) -loglevel loglevel 設置日志記錄級別 -v loglevel 設置日志記錄級別 -report 生成報告 -max_alloc bytes 設置單個分配塊的最大大小 -opencl_options 設置OpenCL環境選項 -y 覆蓋輸出文件 -n 永遠不會覆蓋輸出文件 -ignore_unknown 忽略未知的流類型 -stats 編碼過程中的打印進度報告 -max_error_rate 錯誤率(0.0:無錯誤,1.0:100%錯誤最大錯誤率) -bits_per_raw_sample number 設置每個原始樣本的位數 -vol volume 更改音量(256 =正常) 4、Per-file main options: (每個文件的主要選項:) -f fmt 強制格式 -c codec 編解碼器名稱 -codec codec 編解碼器名稱 -pre preset 預設名稱 -map_metadata outfile[,metadata]:infile[,metadata] 設置infile中outfile的元數據信息 -t duration 記錄或轉碼音頻/視頻的“持續時間”秒 -to time_stop 記錄或轉碼停止時間 -fs limit_size 設置限制文件大小(以字節為單位 -ss time_off 設置開始時間偏移 -sseof time_off 設置相對於EOF的開始時間偏移 -seek_timestamp 使用-ss按時間戳啟用/禁用查找 -timestamp time 設置錄制時間戳(“現在”設置當前時間) -metadata string=string 添加元數據 -program title=string:st=number... 添加具有指定流的程序 -target type 指定目標文件類型(帶有可選前綴“ pal-”,“ ntsc-”或“ film-”的“ vcd”,“ svcd”,“ dvd”,“ dv”或“ dv50”) -apad 音墊 -frames number 設置要輸出的幀數 -filter filter_graph 設置流filtergraph -filter_script filename 從文件中讀取流filtergraph描述 -reinit_filter 輸入參數更改時重新初始化filtergraph -discard 丟棄 -disposition 部署 5、Video options:(視頻選項:) -vframes number 設置要輸出的視頻幀數 -r rate 設置幀頻(Hz值,分數或縮寫) -s size 設置幀大小(WxH或縮寫) -aspect aspect 設置縱橫比(4:3、16:9或1.3333、1.7777) -bits_per_raw_sample number 設置每個原始樣本的位數 -vn 禁用視頻 -vcodec codec 強制視頻編解碼器(“復制”以復制流) -timecode hh:mm:ss[:;.]ff 設置初始TimeCode值。 -pass n 選擇通行證編號(1至3) -vf filter_graph 設置視頻過濾器 -ab bitrate 音頻比特率(請使用-b:a) -b bitrate 視頻比特率(請使用-b:v) -dn 禁用數據 6、Audio options:(音頻選項:) -aframes number 設置要輸出的音頻幀數 -aq quality 設置音頻質量(特定於編解碼器) -ar rate 設置音頻采樣率(以Hz為單位) -ac channels 設置音頻通道數 -an 禁用音頻 -acodec codec 強制音頻編解碼器(“復制”以復制流) -vol volume 更改音量(256 =正常) -af filter_graph 設置音頻過濾器 7、Subtitle options:(字幕選項:) -s size 設置幀大小(WxH或縮寫) -sn 禁用字幕 -scodec codec 強制字幕編解碼器(“復制”以復制流) -stag fourcc/tag 強制字幕標簽/ fourcc -fix_sub_duration 修正字幕的持續時間 -canvas_size size 設置畫布大小(WxH或縮寫) -spre preset 將字幕選項設置為指示的預設
三、說明:
本demo中的FFmpeg已經編譯過了,可以隨意拖入到項目中,添加需要的庫文件和框架就可以build success。
四、編譯:
如果本機已經安裝過FFmpeg,可以自己去下載腳本進行編譯,然后將編譯的文件集成到項目中。需要先下載編譯腳本:https://github.com/kewlbear/FFmpeg-iOS-build-script。然后進入該文件目錄,運行命令行./build-ffmpeg.sh。常見編譯錯誤請挪步參考:https://www.jianshu.com/p/5d20e2a50faa。
五、拓展:
FFmpeg既有轉碼的功能,本身也具有視頻媒介的特性,可以作為播放器使用。其實,ijkplayer是一個挺不錯的視頻直播和播放的框架。它僅僅使用FFmpeg進行視頻的轉碼,自己作為一個播放器進行播放. ijkplayer框架集成可以看博客:http://www.cnblogs.com/XYQ-208910/p/5856815.html
六、演示:
在控制器中給出視頻文件,點擊按鈕即可播放,顯示幀數和時間
網絡視頻 網絡直播
github源碼下載:https://github.com/xiayuanquan/FFmpegDemo