欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

关于B站播放器ijkPlayer的集成和遇到的bug(持续回复解答,ios)(QQ:479069761)

程序员文章站 2022-06-16 18:50:47
ijkPlayer 编译和实现播放增加分片播放协议concat七牛播放器和ijkplayer播放器的冲突解决...

首先是准备工作

如果你的电脑(仅针对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  一些功能的使用  


比如  支持分段视频(一个视频多个片段)播放


可以更改 下图中的文件中

关于B站播放器ijkPlayer的集成和遇到的bug(持续回复解答,ios)(QQ:479069761)















打开如图标记的这个文件 找到concat有两条相关


关于B站播放器ijkPlayer的集成和遇到的bug(持续回复解答,ios)(QQ:479069761)

关于B站播放器ijkPlayer的集成和遇到的bug(持续回复解答,ios)(QQ:479069761)


将前面的disable 都改为enable (本身是的就不用动了啦) 然后别忘记保存


接着执行



cd ios


./compile-ffmpeg.sh clean

./compile-ffmpeg.sh all



然后等待编译完成 这是一个漫长的过程 此时编译的是ffmpeg


剩下的就是和bilibili文档一样


关于B站播放器ijkPlayer的集成和遇到的bug(持续回复解答,ios)(QQ:479069761)

关于B站播放器ijkPlayer的集成和遇到的bug(持续回复解答,ios)(QQ:479069761)


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



当然这时并没有结束



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


打开如下文件

关于B站播放器ijkPlayer的集成和遇到的bug(持续回复解答,ios)(QQ:479069761)
关于B站播放器ijkPlayer的集成和遇到的bug(持续回复解答,ios)(QQ:479069761)

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

关于B站播放器ijkPlayer的集成和遇到的bug(持续回复解答,ios)(QQ:479069761)
关于B站播放器ijkPlayer的集成和遇到的bug(持续回复解答,ios)(QQ:479069761)

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;

}




关于B站播放器ijkPlayer的集成和遇到的bug(持续回复解答,ios)(QQ:479069761)
此方法获取写入本地的拼接好的ffmpeg的播放地址 传给播放器 即可使用播放 但是必须要各个分片视频的长度 单位为s(秒)

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


关于B站播放器ijkPlayer的集成和遇到的bug(持续回复解答,ios)(QQ:479069761)


打开这个工程
关于B站播放器ijkPlayer的集成和遇到的bug(持续回复解答,ios)(QQ:479069761)

选择真机或者模拟器

运行 成功之后打开如下图所示
关于B站播放器ijkPlayer的集成和遇到的bug(持续回复解答,ios)(QQ:479069761)
关于B站播放器ijkPlayer的集成和遇到的bug(持续回复解答,ios)(QQ:479069761)



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


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



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


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

关于B站播放器ijkPlayer的集成和遇到的bug(持续回复解答,ios)(QQ:479069761)




But

如果是ios8以上,就不用那么麻烦了,直接使用动态库,冲突根本不是问题

关于B站播放器ijkPlayer的集成和遇到的bug(持续回复解答,ios)(QQ:479069761)


本文地址:https://blog.csdn.net/liushihua147/article/details/60962967