
ijkplayer 是一個(gè)基于 FFmpeg 的輕量級(jí) Android/iOS 視頻播放器。實(shí)現(xiàn)了跨平臺(tái)功能,API 易于集成、編譯配置可裁剪,方便控制安裝包大小,支持硬件加速解碼,更加省電。
至于為什么會(huì)寫(xiě)這個(gè),原因是公司項(xiàng)目做的是監(jiān)控?cái)z像頭視頻播放(RTSP 協(xié)議視頻流),之前用的是 kxmovie(也是基于 FFmpeg) 覺(jué)得不太方便(如果你想用 kxmovie 可以看這篇文章),遂研究下 ijkplayer。原本打算把整個(gè)過(guò)程都寫(xiě)下來(lái),但參考的資料已經(jīng)寫(xiě)的非常好了,我就直接貼出鏈接供大家學(xué)習(xí)。
1、 iOS 中集成 ijkplayer 視頻直播框架
2、ijkplayer iOS 項(xiàng)目集成(圖文詳細(xì)版)
實(shí)際在使用的時(shí)候可根據(jù)自己的需求進(jìn)行配置編譯,比如說(shuō)你不需要支持 RTSP 那你直接根據(jù)1或2的文章進(jìn)行就可以了,如果你需要可以繼續(xù)往下看。
3、iOS 用 ijkplayer 播 RTSP 流
這篇文章中說(shuō)明了怎么通過(guò)配置使編譯出來(lái)的 ijkplayer 框架支持RTSP(默認(rèn)是不支持的),這里指出文中一處小錯(cuò)誤

應(yīng)該是
sh compile-ffmpeg.sh clean
詳見(jiàn) GitHub 上 ijkplayer 作者在 README.md 中的說(shuō)明
注:如果你要編譯支持 RTSP 的框架可先看文章3再看文章1或2
另外好的是通過(guò) ijkplayer 可以調(diào)用系統(tǒng)硬解碼庫(kù) VideoToolbox 進(jìn)行硬解碼,不過(guò)這個(gè)有系統(tǒng)限制,iOS8 以上才能使用 VideoToolbox(iOS8 之前 API 是私有的)。
// 開(kāi)啟硬解碼
IJKFFOptions *options = [IJKFFOptions optionsByDefault];
[options setPlayerOptionIntValue:1 forKey:@"videotoolbox"];
我測(cè)試了真機(jī)下開(kāi)啟和不開(kāi)啟硬解碼 CPU 的使用情況


對(duì)比發(fā)現(xiàn)硬解效果還是不錯(cuò)的。
硬解碼:由顯卡核心 GPU 來(lái)對(duì)視頻進(jìn)行解碼工作,CPU 占用率很低,畫(huà)質(zhì)效果比軟解碼略差一點(diǎn),需要對(duì)播放器進(jìn)行設(shè)置。
優(yōu)點(diǎn):播放流暢、低功耗
缺點(diǎn):受視頻格式限制、畫(huà)質(zhì)沒(méi)有軟解碼好
軟解碼:由 CPU 負(fù)責(zé)解碼進(jìn)行播放
優(yōu)點(diǎn):不受視頻格式限制、畫(huà)質(zhì)略好于硬解
缺點(diǎn):會(huì)占用過(guò)高的資源、對(duì)于高清視頻可能沒(méi)有硬解碼流暢(主要看 CPU 的能力)
測(cè)試環(huán)境:Xcode7.2,iPhone6(iOS8.4),測(cè)試工具:Instruments(Time Profiler)
提供兩個(gè)測(cè)試視頻
http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8
rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov
其實(shí)可以不按文章3的操作直接在下載編譯 FFmpeg (./init-ios.sh )之前執(zhí)行如下的命令行操作也是可以編譯出支持 RTSP 的框架,不過(guò)這樣編譯出來(lái)的框架比較大,有500多M,而文章3中的方式編譯出的只有大概100多M。在 ijkplayer 的 Issuse 中有人提到編譯出來(lái)的精簡(jiǎn)版只有十幾M,有知道怎么弄的朋友請(qǐng)留言。
cd config
rm module.sh
ln -s module-default.sh module.sh
cd ios
sh compile-ffmpeg.sh clean