6.5 IJKplayer框架介绍
IJKplayer 是一个基于 FFmpeg 的轻量级 Android/iOS 视频播放器。实现了跨平台功能,API易于集成;编译配置可裁剪,支持硬件加速解码,更加省电,目前比较火的美拍和斗鱼APP都在使用这个框架。
IJKplayer的编译运行
1.下载ijkplayer
2.在解压好的ijkplayer中,找到IJKMediaDemo。打开IJKMediaDemo,编译 会提示'libavformat/avformat.h' file not found的错误,这是因为libavformat是ffmpeg中的库,而ijkplayer是基于ffmpeg这个库的,因此需要导入ffmpeg。
3.使用终端,cd 到ijkplayer-master目录中,输入./init-ios.sh运行脚本文件,init-ios.sh脚本的作用:下载ffmpeg源码,如果在前期准备中已经编译了ffmpeg,可以直接到ffmpeg中导入需要的文件。
- 4.执行完脚本后,就会发现ijkplayer中有ffmpeg了,但是这仅仅是把ffmpeg下载下来了,并没有编译,我们还要继续编译。
编译时需要在终端输入如下命令:
cd ios
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
./compile-ffmpeg.sh clean 是删除一些文件和文件夹,为编译ffmpeg.sh做准备。 ./compile-ffmpeg.sh all 是真正的编译各个平台的ffmpeg库,并生成所以平台的通用库. 这是我们的ffmpeg已经彻底编译成功,如图6-5所示:
图6-5
- 5.可以运行demo了。
IJKplayer的集成
集成 ijkplayer 有两种方法:一种方法是按照IJKMediaDemo工程中那样, 直接导入工程IJKMediaPlayer.xcodeproj, 这种方法比较初级,也不方便携带,我们在这里不多做介绍了。第二种方法是把ijkplayer打包成framework导入工程中使用.这种方法比较利于后期移植,方便使用。下面我们就介绍如何把ijkplayer打成framework包。
- 1.首先打开工程IJKMediaPlayer.xcodeproj
- 2.点击Edit Scheme,设置scheme,改成Release,如图6-6所示:
图6-6
- 3.设置好scheme后分别用真机和模拟器进行编译。
- 4.编译完成后右键点击IJKMediaFramework.framework进入Finder,进入Finder后可以看到真机和模拟器连个版本编译的结果,如图6-7所示:
图6-7
- 5.合并两个版本的framework,打开终端,进行合并,输入命令行,命令行格式如下:
lipo -create "真机版本framework路径" "模拟器版本framework路径" -output "合并后的文件路径"
注意:我们合并的framework是/Release-iphoneos/IJKMediaFramework.framework/IJKMediaFramework和/Release-iphonesimulator/IJKMediaFramework.framework/IJKMediaFramework这两个文件
- 6.合并成功后,需要用合并完的IJKMediaFramework替换掉原来其中一个版本的IJKMediaFramework生成新的Framework,如图6-8所示:
图6-8
7.至此,替换过新的framework后的IJKMediaFramework.framework文件就是我们需要的框架了, 可以复制出来, 导入我们的工程使用.我们在本书中也会提供制作好的IJKMediaFramework.framework。
8.工程中除了要导入新的IJKMediaFramework.framework,还要导入别的依赖库:libz.tbd libbz2.tbd libstdc++.tbd AudioToolbox.framework AVFoundation.framework CoreGraphics.framework CoreMedia.framework MediaPlayer.framework MobileCoreServices.framework OpenGLES.framework QuartzCore.framework UIKit.framework VideoToolbox.framework
IJKplayer的简单使用
IJKFFOptions *options = [IJKFFOptions optionsByDefault];
[options setPlayerOptionIntValue:1 forKey:@"videotoolbox"];
// 帧速率(fps) (可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97)
[options setPlayerOptionIntValue:29.97 forKey:@"r"];
// -vol——设置音量大小,256为标准音量。(要设置成两倍音量时则输入512,依此类推
[options setPlayerOptionIntValue:512 forKey:@"vol"];
IJKFFMoviePlayerController *moviePlayer = [[IJKFFMoviePlayerController alloc] initWithContentURLString:flv withOptions:options];
moviePlayer.view.frame = self.contentView.bounds;
// 填充fill
moviePlayer.scalingMode = IJKMPMovieScalingModeAspectFill;
// 设置自动播放(必须设置为NO, 防止自动播放, 才能更好的控制直播的状态)
moviePlayer.shouldAutoplay = NO;
// 默认不显示
moviePlayer.shouldShowHudView = NO;
[self.contentView insertSubview:moviePlayer.view atIndex:0];
[moviePlayer prepareToPlay];
self.moviePlayer = moviePlayer;