視頻直播和播放轉碼器框架:FFmpeg是處理多媒體內容的庫和工具的集合。例如音頻,視頻,字幕和相關的元數據。html
1、介紹:git
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瀏覽器都已經支持。github
2、詳情:canvas
構成瀏覽器
一、libavfilter: 提供了一種經過濾波器鏈更改解碼的音頻和視頻的方法,全部的音視頻的後期濾鏡處理都是由它完成的。服務器
二、libavformat:對多媒體格式的解析和封裝。實現流協議,容器格式和基本I / O訪問。網絡
三、libavutil: 一些經常使用的工具,包括哈希,解壓縮器和其餘實用程序功能。框架
四、libpostproc:用於後期的效果處理ide
五、libavresample:移植的庫,對音頻進行重採樣的工具
六、libswscale:對視頻的操做,實現顏色轉換和縮放例程。
七、libswresample:對音頻的操做,實現音頻混合和重採樣例程。
八、libavdevice: 提供訪問捕獲和回放設備的抽象。對設備作處理的、如視頻的採集,音頻的採集、桌面的採集
九、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}... 一、Getting help: -h 打印基本選項 -h long 打印更多選項 -h full 打印全部選項(包括全部格式和編解碼器特定的選項,很長) -h type=name 打印命名解碼器/編碼器/解複用器/複用器/過濾器的全部選項 二、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 顯示可用的硬件加速方法 三、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 =正常) 四、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 部署 五、Video options:(視頻選項:) -vframes number 設置要輸出的視頻幀數 -r rate 設置幀頻(Hz值,分數或縮寫) -s size 設置幀大小(WxH或縮寫) -aspect aspect 設置縱橫比(4:三、16:9或1.333三、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 禁用數據 六、Audio options:(音頻選項:) -aframes number 設置要輸出的音頻幀數 -aq quality 設置音頻質量(特定於編解碼器) -ar rate 設置音頻採樣率(以Hz爲單位) -ac channels 設置音頻通道數 -an 禁用音頻 -acodec codec 強制音頻編解碼器(「複製」以複製流) -vol volume 更改音量(256 =正常) -af filter_graph 設置音頻過濾器 七、Subtitle options:(字幕選項:) -s size 設置幀大小(WxH或縮寫) -sn 禁用字幕 -scodec codec 強制字幕編解碼器(「複製」以複製流) -stag fourcc/tag 強制字幕標籤/ fourcc -fix_sub_duration 修正字幕的持續時間 -canvas_size size 設置畫布大小(WxH或縮寫) -spre preset 將字幕選項設置爲指示的預設
3、說明:
本demo中的FFmpeg已經編譯過了,能夠隨意拖入到項目中,添加須要的庫文件和框架就能夠build success。
4、編譯:
若是本機已經安裝過FFmpeg,能夠本身去下載腳本進行編譯,而後將編譯的文件集成到項目中。須要先下載編譯腳本:https://github.com/kewlbear/FFmpeg-iOS-build-script。而後進入該文件目錄,運行命令行./build-ffmpeg.sh。常見編譯錯誤請挪步參考:https://www.jianshu.com/p/5d20e2a50faa。
5、拓展:
FFmpeg既有轉碼的功能,自己也具備視頻媒介的特性,能夠做爲播放器使用。其實,ijkplayer是一個挺不錯的視頻直播和播放的框架。它僅僅使用FFmpeg進行視頻的轉碼,本身做爲一個播放器進行播放. ijkplayer框架集成能夠看博客:http://www.cnblogs.com/XYQ-208910/p/5856815.html
6、演示:
在控制器中給出視頻文件,點擊按鈕便可播放,顯示幀數和時間
網絡視頻 網絡直播
github源碼下載:https://github.com/xiayuanquan/FFmpegDemo