关于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文档一样






导入相应的工程 B站提供的是不打包直接拖入工程 同样你可以选择打包 然后在拖入工程的为framework



当然这时并没有结束



如果需要播放分片视频 还要对ijkplayer做处理


打开如下文件




为了实现播放分片视频 比如加上如下框中的三行代码,保证播放器的安全开启




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;

}





此方法获取写入本地的拼接好的ffmpeg的播放地址 传给播放器 即可使用播放 但是必须要各个分片视频的长度 单位为s(秒)

如果想使用打包好的framework 请看下面





打开这个工程


选择真机或者模拟器

运行 成功之后打开如下图所示





两个文件夹下面的framework就是打包好的 直接当成第三方拖进工程即可使用(当然其他框架还是要自己添加喽)


关于和七牛播放器冲突问题的解决



其实这种情况遇到的人应该是很少很少


但是我的项目就是这么蛋疼的需要这个功能, 七牛的播放器不支持分片视频的播放,自己的播放器支持分片播放,直播又不能及时替换成ijkplayer播放器来做,两个播放器都是基于ffmpeg 底层实现的视频解码播放,因为底层而冲突,导致的结果是ijkplayer不能正常播放分片视频,因为项目自动识别先使用了七牛的ffmpeg的版本,只是因为我们的xcode的太脆弱了,为了为了解决问题 突然想到了用ijkplayer的底层ffmpeg来替换七牛的 只是开了个协议 于是尝试用ijkplayer的ffmpeg替换了七牛的ffmpeg 然后尝试播放分片视频 结果是完美的解决了问题







猜你喜欢

转载自blog.csdn.net/liushihua147/article/details/60962967