1、新建文件夹,cd到当前目录下,git拉ijkplayer库
cd /Users/xxxxx/Desktop/xxxxx
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
2、ijkplayer相关配置
cd ijkplayer-ios
不要在master分支操作,新建分支
git checkout -B latest k0.8.8
查看当前分支
git branch
下载ffmpeg
./init-ios.sh
如果遇到443,或者拉不下来,多拉几次,天朝网络问题,没办法!
进入ios目录
cd ios
我这边是不支持armv7,把compile-ffmpeg.sh里面的armv7都删掉,在下面对应的地方删掉
FF_ALL_ARCHS_IOS6_SDK="armv7s i386"
FF_ALL_ARCHS_IOS7_SDK="armv7s arm64 i386 x86_64"
FF_ALL_ARCHS_IOS8_SDK="arm64 i386 x86_64"
if [ "$FF_TARGET" = "armv7s" -o "$FF_TARGET" = "arm64" ]; then
echo " compile-ffmpeg.sh arm64|i386|x86_64"
编译ffmpeg
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
如果多次执行上面两条命令,12.0.1以上的OSX系统会报# operation not permitted
需要修改系统脚本附加属性限制
sudo xattr -r -d com.apple.quarantine $filePath
3、现在开始跑工程会发现因为我们删了armv7有问题,但是新版xcode的Build Settings --> Architectures --> Vaild Architectures没有这个属性,我们要把版本号调到11.0
接着打2个realease的framework包出来
XCode13的项目找不到Product目录
1、IJKMediaPlayer.xcodeproj显示包内容
2、编辑project.pbxproj
3、搜索productRefGroup
4、把productRefGroup的值改成和mainGroup一样
看到Product,show in finder,进入framework目录,合并IJKMediaFramework
执行: lipo -create 真机framework路径 模拟器framework路径 -output 合并的文件路径
出现 have the same architectures (arm64) and can't be in the same fat output file
最终,把打出来的IJKMediaFramework替换IJKMediaFramework.framework里面的,就可以拉出来用了
4、解决ijkplayer卡主线程问题
搜索isApplicationActive
- (void)isApplicationActive:(void(^)(BOOL isActive)) completion {
dispatch_async(dispatch_get_main_queue(), ^{
switch (self->_applicationState) {
case IJKSDLGLViewApplicationForegroundState:
completion(YES);
case IJKSDLGLViewApplicationBackgroundState:
completion(NO);
default: {
UIApplicationState appState = [UIApplication sharedApplication].applicationState;
switch (appState) {
case UIApplicationStateActive:
completion(YES);
case UIApplicationStateInactive:
case UIApplicationStateBackground:
default:
completion(NO);
}
}
}
});
}
[self isApplicationActive:^(BOOL isActive) {
if (isActive == YES) {
[self setupGLOnce];
}
}];
[self isApplicationActive:^(BOOL isActive) {
if (isActive == NO) {
return;
}
if (![self tryLockGLActive]) {
if (0 == (_tryLockErrorCount % 100)) {
NSLog(@"IJKSDLGLView:display: unable to tryLock GL active: %d\n", _tryLockErrorCount);
}
_tryLockErrorCount++;
return;
}
_tryLockErrorCount = 0;
if (_context && !_didStopGL) {
EAGLContext *prevContext = [EAGLContext currentContext];
[EAGLContext setCurrentContext:_context];
[self displayInternal:overlay];
[EAGLContext setCurrentContext:prevContext];
}
[self unlockGLActive];
}];
因为要修复ijkplayer在新的XCodeUI卡主线程的问题,需要自己集成ijkplayer,感觉坑还是有不少,而且这个库也很少维护了。写个文章留作纪念!
最后附上Demo链接地址:majunwen.coding.net/p/diary/d/I…