iOS:FFmpeg視頻播放和直播框架

視頻直播和播放轉碼器框架: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

相關文章
相關標籤/搜索