版本記錄
| 版本號(hào) | 時(shí)間 |
|---|---|
| V1.0 | 2017.12.31 |
前言
FFMPEG是一個(gè)多媒體轉(zhuǎn)碼、音視頻流化傳輸?shù)囊粋€(gè)第三方開(kāi)源框架,并且這個(gè)第三方庫(kù)是基于C語(yǔ)言的。 iOS平臺(tái)下的ffmpeg主要包括以下一些功能:影音的解碼、編碼、編碼轉(zhuǎn)換、混合、抽取、串流和濾鏡。
Overview
這是一個(gè)為iOS和tvOS應(yīng)用程序構(gòu)建FFmpeg庫(kù)的shell腳本。
FFmpeg在Linux平臺(tái)下開(kāi)發(fā),但它同樣也可以在其它操作系統(tǒng)環(huán)境中編譯運(yùn)行,包括Windows、Mac OS X等。這個(gè)項(xiàng)目最早由Fabrice Bellard發(fā)起,2004年至2015年間由Michael Niedermayer主要負(fù)責(zé)維護(hù)。許多FFmpeg的開(kāi)發(fā)人員都來(lái)自MPlayer項(xiàng)目,而且當(dāng)前FFmpeg也是放在MPlayer項(xiàng)目組的服務(wù)器上。項(xiàng)目的名稱來(lái)自MPEG視頻編碼標(biāo)準(zhǔn),前面的"FF"代表"Fast Forward"。
使用FFMPEG作為內(nèi)核視頻播放器:
Mplayer,ffplay,射手播放器,暴風(fēng)影音,KMPlayer,QQ影音...
使用FFMPEG作為內(nèi)核的Directshow Filter:
ffdshow,lav filters...
使用FFMPEG作為內(nèi)核的轉(zhuǎn)碼工具:
ffmpeg,格式工廠...
事實(shí)上,F(xiàn)FMPEG的視音頻編解碼功能確實(shí)太強(qiáng)大了,幾乎囊括了現(xiàn)存所有的視音頻編碼標(biāo)準(zhǔn),因此只要做視音頻開(kāi)發(fā),幾乎離不開(kāi)它。
對(duì)于完全沒(méi)有視音頻技術(shù)背景的人來(lái)說(shuō),在學(xué)習(xí)FFmpeg之前最好先了解一下幾種最基本的視音頻數(shù)據(jù)的格式,可以參考下面的文章:
- [總結(jié)]視音頻編解碼技術(shù)零基礎(chǔ)學(xué)習(xí)方法
- 視音頻數(shù)據(jù)處理入門:RGB、YUV像素?cái)?shù)據(jù)處理
- 視音頻數(shù)據(jù)處理入門:PCM音頻采樣數(shù)據(jù)處理
- 視音頻數(shù)據(jù)處理入門:H.264視頻碼流解析
- 視音頻數(shù)據(jù)處理入門:AAC音頻碼流解析
- 視音頻數(shù)據(jù)處理入門:FLV封裝格式解析
- 視音頻數(shù)據(jù)處理入門:UDP-RTP協(xié)議解析
感興趣的可以參考下面這個(gè)大神的博客,我看了下,他總結(jié)的很全面很深入,想要學(xué)習(xí)的話可以關(guān)注他,我這里列出來(lái)的很多參考文章,也是他寫的或者他來(lái)出來(lái)的。

相關(guān)結(jié)構(gòu)體的研究
ffmpeg的結(jié)構(gòu)體之間的關(guān)系參考文章
結(jié)構(gòu)體中每個(gè)變量的分析,參考文章:
- FFMPEG結(jié)構(gòu)體分析:AVFrame
- FFMPEG結(jié)構(gòu)體分析:AVFormatContext
- FFMPEG結(jié)構(gòu)體分析:AVCodecContext
- FFMPEG結(jié)構(gòu)體分析:AVIOContext
- FFMPEG結(jié)構(gòu)體分析:AVCodec
- FFMPEG結(jié)構(gòu)體分析:AVStream
- FFMPEG結(jié)構(gòu)體分析:AVPacket
Requirements
- https://github.com/libav/gas-preprocessor
- yasm 1.2.0
Usage
使用build-ffmpeg-tvos.sh用于tvOS。
- To build everything:
./build-ffmpeg.sh
- To build arm64 libraries:
./build-ffmpeg.sh arm64
- To build fat libraries for armv7 and x86_64 (64-bit simulator):
./build-ffmpeg.sh armv7 x86_64
- To build fat libraries from separately built thin libraries:
./build-ffmpeg.sh lipo
下載
您可以下載FFmpeg 3.4發(fā)行版的二進(jìn)制文件https://downloads.sourceforge.net/project/ffmpeg-ios/ffmpeg-ios-master.tar.bz2
External libraries - 外部鏈接庫(kù)
你應(yīng)該加下面的庫(kù)
libz.dyliblibbz2.dyliblibiconv.dylib
Influences
參考文章
1. [總結(jié)]FFMPEG視音頻編解碼零基礎(chǔ)學(xué)習(xí)方法
2.《基于 FFmpeg + SDL 的視頻播放器的制作》課程的視頻
3. 官方網(wǎng)站
4. ffmpeg參數(shù)中文詳細(xì)解釋
5. ffmpeg.exe詳細(xì)的使用說(shuō)明英文
6. ffplay的快捷鍵以及選項(xiàng)
7. ffplay英文詳細(xì)使用說(shuō)明
8. ffprobe.exe英文詳細(xì)使用說(shuō)明
ffmpeg庫(kù)的配置
1. 下載地址
2. FFMPEG 庫(kù)移植到 VC 需要的步驟
3. 最簡(jiǎn)單的基于FFMPEG+SDL的視頻播放器
視頻播放器
1. 100行代碼實(shí)現(xiàn)最簡(jiǎn)單的基于FFMPEG+SDL的視頻播放器
2. 最簡(jiǎn)單的基于FFMPEG+SDL的視頻播放器 ver2 (采用SDL2.0)
3. 最簡(jiǎn)單的基于FFmpeg的解碼器-純凈版(不包含libavformat)
4. ffmpeg函數(shù)介紹
5. SDL介紹
6. SDL GUIDE 中文譯本
7. YUV播放器源代碼
8. YUV Player Deluxe
音頻播放器
1. 最簡(jiǎn)單的基于FFMPEG+SDL的音頻播放器
2. 最簡(jiǎn)單的基于FFMPEG+SDL的音頻播放器 ver2 (采用SDL2.0)
ffplay播放器
1. FFplay源代碼分析:整體流程圖
2. 100行代碼實(shí)現(xiàn)最簡(jiǎn)單的基于FFMPEG+SDL的視頻播放器
3. 如何用FFmpeg編寫一個(gè)簡(jiǎn)單播放器
4. ffplay的快捷鍵以及選項(xiàng)
5. ffplay_vc2005
6. ffplay播放器移植VC的工程:ffplay for MFC
7. ffplay for mfc 代碼備忘
8. ffplay.c函數(shù)結(jié)構(gòu)簡(jiǎn)單分析(畫圖)
編碼
ffmpeg編碼我自己研究的不是很多,可以參考文章:
上面那篇文章是用的類庫(kù)比較舊,新版類庫(kù)的的使用可以參考下面幾篇文章。
- 圖像的編碼可以參考:最簡(jiǎn)單的基于FFMPEG的圖像編碼器(YUV編碼為JPEG)
- 音頻的編碼可以參考:最簡(jiǎn)單的基于FFMPEG的音頻編碼器(PCM編碼為AAC)
- 視頻的編碼可以參考:最簡(jiǎn)單的基于FFMPEG的視頻編碼器(YUV編碼為H.264)
- HEVC(H.265)視頻編碼可以參考:最簡(jiǎn)單的基于FFmpeg的視頻編碼器-更新版(YUV編碼為HEVC(H.265))
上述編碼器使用libavformat和libavcodec兩個(gè)類庫(kù)完成了視頻的編碼工作。實(shí)際上編碼工作只需要libavcodec就可以了。因此更新了一個(gè)“純凈”的編碼器。該編碼器只使用libavcodec完成編碼工作: 最簡(jiǎn)單的基于FFmpeg的編碼器-純凈版(不包含libavformat)
轉(zhuǎn)碼
轉(zhuǎn)碼實(shí)際上是先解碼然后編碼。
不進(jìn)行轉(zhuǎn)碼,只進(jìn)行封裝格式轉(zhuǎn)換的程序可參考:最簡(jiǎn)單的基于FFMPEG的封裝格式轉(zhuǎn)換器(無(wú)編解碼)
轉(zhuǎn)碼程序可參考:最簡(jiǎn)單的基于FFMPEG的轉(zhuǎn)碼程序
比較復(fù)雜的轉(zhuǎn)碼程序可以參考ffmpeg.c,它移植到MFC下的工程:ffmpeg轉(zhuǎn)碼器移植VC的工程:ffmpeg for MFC
ffmpeg.c函數(shù)結(jié)構(gòu)簡(jiǎn)單分析:ffmpeg.c函數(shù)結(jié)構(gòu)簡(jiǎn)單分析(畫圖)
ffmpeg源代碼分析
【架構(gòu)圖】
FFmpeg源代碼結(jié)構(gòu)圖 - 解碼
FFmpeg源代碼結(jié)構(gòu)圖 -編碼
【通用】
FFmpeg源代碼簡(jiǎn)單分析:av_register_all()
FFmpeg源代碼簡(jiǎn)單分析:avcodec_register_all()
FFmpeg源代碼簡(jiǎn)單分析:內(nèi)存的分配和釋放(av_malloc()、av_free()等)
FFmpeg源代碼簡(jiǎn)單分析:常見(jiàn)結(jié)構(gòu)體的初始化和銷毀(AVFormatContext,AVFrame等)
FFmpeg源代碼簡(jiǎn)單分析:avio_open2()
FFmpeg源代碼簡(jiǎn)單分析:av_find_decoder()和av_find_encoder()
FFmpeg源代碼簡(jiǎn)單分析:avcodec_open2()
FFmpeg源代碼簡(jiǎn)單分析:avcodec_close()
【解碼】
圖解FFMPEG打開(kāi)媒體的函數(shù)avformat_open_input
FFmpeg源代碼簡(jiǎn)單分析:avformat_open_input()
FFmpeg源代碼簡(jiǎn)單分析:avformat_find_stream_info()
FFmpeg源代碼簡(jiǎn)單分析:av_read_frame()
FFmpeg源代碼簡(jiǎn)單分析:avcodec_decode_video2()
FFmpeg源代碼簡(jiǎn)單分析:avformat_close_input()
【編碼】
FFmpeg源代碼簡(jiǎn)單分析:avformat_alloc_output_context2()
FFmpeg源代碼簡(jiǎn)單分析:avformat_write_header()
FFmpeg源代碼簡(jiǎn)單分析:avcodec_encode_video()
FFmpeg源代碼簡(jiǎn)單分析:av_write_frame()
FFmpeg源代碼簡(jiǎn)單分析:av_write_trailer()
【其它】
FFmpeg源代碼簡(jiǎn)單分析:日志輸出系統(tǒng)(av_log()等)
FFmpeg源代碼簡(jiǎn)單分析:結(jié)構(gòu)體成員管理系統(tǒng)-AVClass
FFmpeg源代碼簡(jiǎn)單分析:結(jié)構(gòu)體成員管理系統(tǒng)-AVOption
FFmpeg源代碼簡(jiǎn)單分析:libswscale的sws_getContext()
FFmpeg源代碼簡(jiǎn)單分析:libswscale的sws_scale()
FFmpeg源代碼簡(jiǎn)單分析:libavdevice的avdevice_register_all()
FFmpeg源代碼簡(jiǎn)單分析:libavdevice的gdigrab
【腳本】
FFmpeg源代碼簡(jiǎn)單分析:makefile
FFmpeg源代碼簡(jiǎn)單分析:configure
偏底層的libavcodec的源代碼分析文章列表如下:
【解碼- libavcodec H.264 解碼器】
FFmpeg的H.264解碼器源代碼簡(jiǎn)單分析:概述
FFmpeg的H.264解碼器源代碼簡(jiǎn)單分析:解析器(Parser)部分
FFmpeg的H.264解碼器源代碼簡(jiǎn)單分析:解碼器主干部分
FFmpeg的H.264解碼器源代碼簡(jiǎn)單分析:熵解碼(EntropyDecoding)部分
FFmpeg的H.264解碼器源代碼簡(jiǎn)單分析:宏塊解碼(Decode)部分-幀內(nèi)宏塊(Intra)
FFmpeg的H.264解碼器源代碼簡(jiǎn)單分析:宏塊解碼(Decode)部分-幀間宏塊(Inter)
FFmpeg的H.264解碼器源代碼簡(jiǎn)單分析:環(huán)路濾波(LoopFilter)部分
【解碼-libavcodec HEVC 解碼器】
FFmpeg的HEVC解碼器源代碼簡(jiǎn)單分析:概述
FFmpeg的HEVC解碼器源代碼簡(jiǎn)單分析:解析器(Parser)部分
FFmpeg的HEVC解碼器源代碼簡(jiǎn)單分析:解碼器主干部分
FFmpeg的HEVC解碼器源代碼簡(jiǎn)單分析:CTU解碼(CTUDecode)部分-PU
FFmpeg的HEVC解碼器源代碼簡(jiǎn)單分析:CTU解碼(CTU Decode)部分-TU
FFmpeg的HEVC解碼器源代碼簡(jiǎn)單分析:環(huán)路濾波(LoopFilter)
后記
未完,待續(xù)~~~
