ijkplayer iOS 编译成 framework并支持多种
2017-08-03 本文已影响426人
ZPengs
一.克隆项目
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
//进入ijkplayer-ios
cd ijkplayer-ios
//切换分支
git checkout -B latest k0.8.1
//查看
ls
二.下载ffmpeg并编译
1.首先我们需要下载ffmpeg,接着上面的目录在终端中输入:
//下载ffmpeg和相关脚本
./init-ios.sh
因为ffmpeg比较大,再加上访问国外线路比较慢,遇到下载失败需要多试几次,如果有代理建议上代理,如下:
image.png三.修改module-lite.sh
支持多个解码
image.png
打开这个文件这里演示修改支持 MPEG2解码 修改这两处:
多解码支持参考
# ./configure --list-decoders
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-decoders"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=aac"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=aac_latm"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=flv"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=h264"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mp3*"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mpeg2video"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=ac3"
# ./configure --list-demuxers
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-demuxers"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=aac"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=concat"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=data"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=flv"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=hls"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=live_flv"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=loas"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=m4v"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mov"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mp3"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mpegps"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mpegts"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mpegvideo"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=ac3"
四.编译
1.替换我们修改只有的脚本
cd config
rm module.sh
ln -s module-default.sh module.sh 或 ln -s module-lite.sh module.sh
这里用ln -s module-lite.sh module.sh
因为我们修改的是 module-lite.sh
这个脚本
2.编译ffmpeg
//进入ios目录
cd ios
//clean
./compile-ffmpeg.sh clean
//编译
./compile-ffmpeg.sh all
这里编程时间较长,耐心等下大概3-4分钟.如图:
clean效果图: 编译效果图: 编译完成如图:五.制作framework
5.1.首先我们打开IJKMediaPlayer.xcodeproj,如下图所示:
image.png5.2.接着点击IJKMediaFramework出现选择框,选择edit scheme,如图:
image.png5.3.将build configuration改为Release后点Close,如图所示:
image.png5.4.分别在模拟器和真机(Generic iOS Device也可以)上编译就可以了:
模拟器版本 真机版本5.5打开framework所在的目录,如下图所示:
image.png5.6.接下来我们要将两个framework合并在一起,这样就可以在真机和模拟器上开发调试了
finder中显示有两个文件夹,iphoneos是真机,iphonesimulator是模拟器的版本,如下图所示:
image.png通过lipo的命令将两者合并输出,在Products目录下输入:
//合并
lipo -create Release-iphoneos/IJKMediaFramework.framework/IJKMediaFramework Release-iphonesimulator/IJKMediaFramework.framework/IJKMediaFramework -output IJKMediaFramework
//将合并后的framework拷贝到iphoneos/IJKMediaFramework.framework中
cp IJKMediaFramework Release-iphoneos/IJKMediaFramework.framework/
image.png
可以使用lipo -info IJKMediaFramework
查看framework的支持
5.7.将制作好的Release-iphoneos/IJKMediaFramework.framework
复制到要集成的项目中就可以了,同时添加需要的动态库:
image.png
好啦以上的操作就完成了 framework 的制作.
接下来我写一些,播放器的常用的一些参数设置:
//开启硬件解码
[options setPlayerOptionIntValue:1 forKey:@"videotoolbox"];
// 设置音量大小,256为标准音量。(要设置成两倍音量时则输入512,依此类推)
[options setPlayerOptionIntValue:512 forKey:@"vol"];
// 最大fps
[options setPlayerOptionIntValue:30 forKey:@"max-fps"];
// 跳帧开关,如果cpu解码能力不足,可以设置成5,否则
// 会引起音视频不同步,也可以通过设置它来跳帧达到倍速播放
[options setPlayerOptionIntValue:0 forKey:@"framedrop"];
// 指定最大宽度
[options setPlayerOptionIntValue:960 forKey:@"videotoolbox-max-frame-width"];
// 自动转屏开关
[options setFormatOptionIntValue:0 forKey:@"auto_convert"];
// 重连次数
[options setFormatOptionIntValue:1 forKey:@"reconnect"];
// 超时时间,timeout参数只对http设置有效,若果你用rtmp设置timeout,ijkplayer内部会忽略timeout参数。rtmp的timeout参数含义和http的不一样。
[options setFormatOptionIntValue:30 * 1000 * 1000 forKey:@"timeout"];
// 帧速率(fps) (可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97)
[options setPlayerOptionIntValue:29.97 forKey:@"r"];