ijkPlayer簡(jiǎn)介
ijkPlayer 是一個(gè)基于 ffmpeg 的輕量級(jí) Android/iOS 視頻播放器伙窃。具有以下優(yōu)點(diǎn):
- 實(shí)現(xiàn)了跨平臺(tái)功能祠汇,API 易于集成
- 編譯配置可裁剪丁眼,方便控制安裝包大小
- 支持硬件加速解碼,更加省電
github地址: https://github.com/Bilibili/ijkplayer
ijkPlayer的編譯
打開項(xiàng)目目錄 ios/IJKMediaDemo 的示例程序運(yùn)行
會(huì)提示 'libavformat/avformat.h' file not found
的錯(cuò)誤
因?yàn)?ijkPlayer 是基于 FFmpeg 的,但是項(xiàng)目中并沒有這個(gè)庫
編譯步驟:
- 執(zhí)行 init.sh 腳本
終端進(jìn)入項(xiàng)目目錄, 執(zhí)行./init-ios.sh
這個(gè)命令會(huì)下載ffmpeg到ios目錄下 - 編譯 ffmpeg 庫
進(jìn)入項(xiàng)目的 ios 目錄
執(zhí)行./compile-ffmpeg.sh clean
接著執(zhí)行./compile-ffmpeg.sh all
這個(gè)命令會(huì)執(zhí)行比較久玻驻,耐心等待就可以啦
此時(shí) demo項(xiàng)目就可以運(yùn)行了 - 打包framework
參考文章 http://www.reibang.com/p/1f06b27b3ac0
一個(gè)坑:在我執(zhí)行 ./compile-ffmpeg.sh all
這個(gè)命令出現(xiàn)了 C compiler test failed
錯(cuò)誤供常,找了好久原因摊聋,最后發(fā)現(xiàn)是找不到我機(jī)器的 ios 版本(⊙﹏⊙)b, 因?yàn)槲矣玫氖?XCode-beta栈暇。麻裁。。用正式版的應(yīng)該不會(huì)有這個(gè)問題
在終端執(zhí)行下面這條命令即可
sudo xcode-select --switch /Applications/Xcode-beta.app/Contents/Developer/
如果裝了多個(gè)XCode出錯(cuò)了,也可用這個(gè)方法解決
如碰到其他錯(cuò)誤可參照 這篇文章
播放視頻
新建一個(gè)項(xiàng)目煎源,導(dǎo)入打包后的 framework 和它依賴的 framework
- libbz2.tbd
- libz.tbd
- AudioToolbox.framework
- VideoToolbox.framework
- CoreGraphics.framework
- QuartzCore.framework
- CoreMedia.framework
- CoreVideo.framework
- AVFoundation.framework
- MediaPlayer.framework
- MobileCoreServices.framework
- OpenGLES.framework
在 viewController 中添加代碼
- (void)viewDidLoad {
[super viewDidLoad];
NSURL *url = [NSURL URLWithString:@"http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8"];
// 成員屬性強(qiáng)引用
_player = [[IJKFFMoviePlayerController alloc] initWithContentURL:url withOptions:nil];
[_player setScalingMode:IJKMPMovieScalingModeAspectFill];
UIView *playerView = [self.player view];
playerView.backgroundColor = [UIColor blackColor];
playerView.frame = self.view.bounds;
// 使視頻自適應(yīng)屏幕的寬高
playerView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view insertSubview:playerView atIndex:1];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[_player prepareToPlay];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self.player play];
}