BNM3u8Cache 1.1.0

BNM3u8Cache 1.1.0

zmubai维护。



 
依赖:
AFNetworking~> 3.0
GCDWebServer~> 3.5.3
 

  • 作者:
  • zmubai

BNM3u8Cache

使用 operation 的方式实现 m3u8 本地缓存和播放。可控制媒体并发数,单个媒体文件下载并发数;支持任务挂起恢复、支持任务取消。

使用 CocoaPods 安装

首先在 Podfile 中添加以下内容并保存

pod 'BNM3u8Cache'

然后命令行执行

$ pod install

使用方式

    // 1.全局配置BNM3U8Manager
    NSString *rootPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES) objectAtIndex:0] stringByAppendingPathComponent:@"m3u8files"];
    BNM3U8ManagerConfig *config = BNM3U8ManagerConfig.new;
    /*媒体下载并发数控制*/
    config.videoMaxConcurrenceCount = 5;
    config.downloadDstRootPath = rootPath;
    [[BNM3U8Manager shareInstance] fillConfig:config];

    // 2. 发起下载
    BNM3U8DownloadConfig *dlConfig = BNM3U8DownloadConfig.new;
    dlConfig.url = @"https://bitmovin-a.akamaihd.net/content/playhouse-vr/m3u8s/105560_video_360_1000000.m3u8";
    /*单个媒体ts文件并发数控制*/
    dlConfig.maxConcurrenceCount = 5;
    dlConfig.localhost = @"http://127.0.0.1:8080/";
    [BNM3U8Manager.shareInstance downloadVideoWithConfig:dlConfig progressBlock:^(CGFloat progress) {
        dispatch_async(dispatch_get_main_queue(), ^{
            //显示下载进度
            label.text = [NSString stringWithFormat:@"%.00f%%",progress * 100];
        });
    }resultBlock:^(NSError * _Nullable error, NSString * _Nullable localPlayUrl) {
        if(localPlayUrl)
        {
            dispatch_async(dispatch_get_main_queue(), ^{
                // 3. 配置本地服务,开启并播放
                BNHttpLocalServer.shareInstance.documentRoot = rootPath;
                BNHttpLocalServer.shareInstance.port = 8080;
                [BNHttpLocalServer.shareInstance tryStart];
                [self playWithUrlString:localPlayUrl];
            });
        }
    }];

关于并发数的设置

根据苹果官方文档关于功耗的说明,网络模块的长时间低效运行,会大大增加动态成本,导致功耗变大。而合理的使用并发,可以将网络请求集中快速处理,虽然会增加固定成本,但长期来看,动态成本会大大降低,从而减少了功耗。从这个角度来看,不应该使用单线程下载,而应该尽量采用多并发。考虑到发热和效率,应合理设置并发数(建议 >= 2)。

二级界面进度的无法回调

由于使用单例进行下载,回调block也是与一个下载任务绑定的。当界面退出时,如果没有保存当前这个回调函数,那么就再也获取不到回调。需要取消所有任务,重新发起,这样就能重新赋予所有回调。因为是多个小文件的下载,重复文件不会重复下载,所以取消所有任务,重新发起,对流量浪费的使用并不会增大很多。

索引文件解析失败

m3u8格式种类繁多,目前尚不支持全部格式。我们将逐步增加兼容性,并更新软件,使其能够兼容大部分格式(主流/常用→非主流/不常用)。

更新list

  1. 添加支持相对路径的索引文件解析
  2. 本地服务 CocoaHTTPServer(曾久未维护)切换到 GCDWebServer(持续更新)。2019-12-09

欢迎Issue和指正。