音视频学习收集

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解码 修改这两处:
多解码支持参考

image.png
# ./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.png

5.2.接着点击IJKMediaFramework出现选择框,选择edit scheme,如图:

image.png

5.3.将build configuration改为Release后点Close,如图所示:

image.png

5.4.分别在模拟器和真机(Generic iOS Device也可以)上编译就可以了:

模拟器版本 真机版本

5.5打开framework所在的目录,如下图所示:

image.png

5.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的支持

image.png

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"];

上一篇下一篇

猜你喜欢

热点阅读