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


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


免責聲明!

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



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