关于B站播放器ijkPlayer的集成和遇到的bug(持续回复解答,ios)(QQ:479069761)
首先是准备工作
如果你的电脑(仅针对mac)未安装Homebrew命令工具,清闲安装
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install git
brew install yasm
创建一个文件夹 mycode(名字随意,目的为了方便找到)
在终端执行
cd mycode
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
cd ijkplayer-ios
./init-ios.sh
执行完后
若需要更改ffmpeg 一些功能的使用
比如 支持分段视频(一个视频多个片段)的播放
可以更改 下图中的文件中
打开如图标记的这个文件 找到concat有两条相关
将前面的disable 都改为enable (本身是的就不用动了啦) 然后别忘记保存
接着执行
cd ios
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
然后等待编译完成 这是一个漫长的过程 此时编译的是ffmpeg
剩下的就是和bilibili文档一样
ijkmp_set_option(_mediaPlayer,IJKMP_OPT_CATEGORY_FORMAT,"safe",0);
ijkmp_set_option(_mediaPlayer,IJKMP_OPT_CATEGORY_PLAYER,"protocol_whitelist","ffconcat,file,http,https");
ijkmp_set_option(_mediaPlayer,IJKMP_OPT_CATEGORY_FORMAT,"protocol_whitelist","concat,http,tcp,https,tls,file");
#pragma mark -
#pragma mark ==============读写文件==============
@interface GLVideoDetailInfoModel :NSObject
@property (nonatomic,copy)NSString *duration;
@property (nonatomic,copy)NSString *size;
@property (nonatomic,copy)NSString *url;
@end
- (NSURL *)writeTofeildWithData:(NSArray *)urlArr {
// 1.找到Documents文件夹路径
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)objectAtIndex:0];
// 2.创建要存储的内容:字符串
NSString *str =@"ffconcat version 1.0";
for (GLVideoDetailInfoModel *modelin urlArr) {
str = [NSStringstringWithFormat:@"%@\nfile %@\nduration %.0f",str,model.url,[model.durationfloatValue] / 1000.0];
}
DLog(@"分片视频数据:%@",str);
// 3.需要知道字符串最终存储的地方,所以需要创建一个路径去存储字符串
NSString *strPath = [documentsPathstringByAppendingPathComponent:@"videoUrl.concat"];
// 4.将字符串写入文件
[str writeToFile:strPathatomically:YESencoding:NSUTF8StringEncodingerror:nil];
NSURL *URL = [[NSURLalloc]initFileURLWithPath:strPath];
return URL;
}
两个文件夹下面的framework就是打包好的 直接当成第三方拖进工程即可使用(当然其他框架还是要自己添加喽)
关于和七牛播放器冲突问题的解决
其实这种情况遇到的人应该是很少很少
但是我的项目就是这么蛋疼的需要这个功能, 七牛的播放器不支持分片视频的播放,自己的播放器支持分片播放,直播又不能及时替换成ijkplayer播放器来做,两个播放器都是基于ffmpeg 底层实现的视频解码播放,因为底层而冲突,导致的结果是ijkplayer不能正常播放分片视频,因为项目自动识别先使用了七牛的ffmpeg的版本,只是因为我们的xcode的太脆弱了,为了为了解决问题 突然想到了用ijkplayer的底层ffmpeg来替换七牛的 只是开了个协议 于是尝试用ijkplayer的ffmpeg替换了七牛的ffmpeg 然后尝试播放分片视频 结果是完美的解决了问题,
But
如果是ios8以上,就不用那么麻烦了,直接使用动态库,冲突根本不是问题
本文地址:https://blog.csdn.net/liushihua147/article/details/60962967
上一篇: JSP实现带查询条件的通用分页组件
下一篇: Linux运维从初级进阶为高级知识点总结