All Projects → ksvc → Ksyhttpcache_ios

ksvc / Ksyhttpcache_ios

Licence: apache-2.0
金山云ios平台http缓存SDK,可方便地与播放器集成,实现http视频边播放边下载(缓存)功能。ksyun http cache sdk for ios platform, it's easy to integrated with media players to provide caching capability when watching http videos.

金山云iOS HTTPCache SDK

Apps UsingDownloads

CocoaPods version CocoaPods platform

Source Type: Binary SDK
Charge Type: free of charge

金山云iOS平台http缓存SDK,可方便地与播放器集成,实现http视频边播放边下载(缓存)功能。ksyun http cache sdk for ios platform, it's easy to integrated with media players to provide caching capability when watching http videos.

1. 产品概述

金山云iOS HTTPCache SDK可以方便地和播放器进行集成,提供对HTTP视频边播放缓存的功能,缓存完成的内容可以离线工作。

KSY HTTPCache与播放器及视频服务器的关系如下图:

KSY HTTPCache相当于本地的代理服务,使用KSY HTTPCache后,播放器不直接请求视频服务器,而是向KSY HTTPCache请求数据。KSY HTTPCache在代理HTTP请求的同时,缓存视频数据到本地。

1.1 关于热更新

金山云SDK保证,提供的HTTP Cache SDK未使用热更新技术,例如:RN(ReactNative)、weex、JSPatch等,请放心使用。

1.2 关于费用

金山云SDK保证,提供的HTTP Cache SDK可以用于商业应用,不会收取任何SDK使用费用。

1.3 License

详情请见License文件。

2.功能说明

它可以很方便的和播放器进行集成,提供以下功能:

  1. http点播视频边缓存边播放,且播放器可从通过回调得到缓存的进度以及错误码

  2. 缓存完成的视频,再次点播时可以离线播放,不再请求视频
    获取代理url方式(newCache参数一定要置为NO):[[KSYHTTPProxyService sharedInstance] getProxyUrl:@"url.mp4" newCache:NO]];

  3. 查询缓存已完成的文件列表, 缓存未完成的文件列表

  4. 清除缓存(清除所有缓存,或删除某个url缓存)

  5. 提供两种缓存策略供选择(限制缓存区总大小或者限制缓存文件总个数)

  6. 提供预缓存接口KSYFileDownloader (v1.2.1)

3.下载和使用

3.1 此demo的编译和运行

  1. 使用git下载源码或者从release页面下载zipg格式压缩包后解码
  2. 打开终端,进入demo目录
  3. 执行pod install命令
  4. 成功后使用xcode打开新生成的KSYHTTPCacheDemo.xcworkspace工程文件即可编译和运行

3.2 SDK的下载和使用

3.2.1 下载SDK

本SDK依赖cocopads中的CocoaAsyncSocket,CocoaLumberjack两个库,建议使用pod的方式下载和使用。
在Podfile文件中添加以下语句,执行pod install之后即可将sdk添加入工程
pod 'ksyhttpcache'

3.2.2 使用SDK

  1. KSYHTTPProxyService类实现了本地HTTP代理,一般在appDelegate中将其启动即可
#import <KSYHTTPCache/KSYHTTPProxyService.h>

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[KSYHTTPProxyService sharedInstance] startServer];
    return YES;
}

  1. 使用getProxyUrl方法获取原始URL经过本地HTTP代理后的URL,之后将代理URL传递给播放器即可实现在播放的同时将文件cache到本地
//get proxy url from ksyhttpcache
NSString *proxyUrl = [[KSYHTTPProxyService sharedInstance] getProxyUrl:@"http://maichang.kssws.ks-cdn.com/upload20150716161913.mp4"];
    
//init player with proxy url
KSYMoviePlayerController *player = [[KSYMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:proxyUrl]];

//play the video
[player prepareToPlay];
  1. 状态监听

    KSYHTTPCache发生错误时的发送CacheErrorNotification通知

    CacheErrorNotification
    

    KSYHTTPCache缓存进度发送变化时发送CacheStatusNotification通知

    CacheStatusNotification
    

    注册notification监听

    [[NSNotificationCenter defaultCenter] addObserver:self 
                selector:@selector(mediaCacheDidChanged:)
                name:CacheStatusNotification 
                object:nil];
    

    去掉notification监听

    [[NSNotificationCenter defaultCenter] removeObserver:self
                 name:CacheStatusNotification
                 object:nil];
    

使用以上方法,proxy将采用默认配置。可采用如下方法自定义配置(需在startServer前设置):

设置缓存区位置

(void)setCacheRoot:(NSString *)cacheRoot

缓存区大小限制策略(文件个数限制、文件总大小限制),目前这两种策略只能二选一,且策略在每次播放完成或者退出播放时生效。

-(void)setMaxCacheSizeLimited:(long long)maxCacheSize;

使用限制文件总个数的策略

-(void)setMaxFilesCountLimited:(NSInteger)maxFilesCount;

4.其他接口说明

对于http flv直播,如果播放器通过接口getProxyUrl( ur)获得播放地址,播放行为是:首次播放,边播放边缓存;以后播放相同url,则是回看缓存好的视频。 而如果播放器通过getProxyUrl(url, newCache)获得播放地址,播放行为是:newCache参数为true,无论是否有url对应的缓存内容,都是播放并缓存新的直播内容。newCache为false,如果有url对应的缓存内容(命中缓存),播放时回看已缓存的直播内容;没有命中的缓存视频(未命中缓存),则播放并缓存新的直播内容。

(NSString*)getProxyUrl:(NSString*)url newCache:(BOOL)newCache;
(NSString*)getProxyUrl:(NSString*)url;

启动server

(void)startServer;

关闭server

(void)stopServer;

查询server是否在运行状态

(BOOL)isRunning;

删除缓存区所以文件

(void)deleteAllCachesWithError:(NSError**)error;

删除某个url对应的缓存文件

(void)deleteCacheForUrl:(NSURL*)url error:(NSError**)error;

查询某个url缓存是否完成

-(BOOL)isCacheCompleteForUrl:(NSURL*)url;

获得缓存已完成文件列表

-(NSArray*)getAllCachedFileListWithError:(NSError**)errors;

获得缓存未完成文件列表

-(NSArray*)getAllCachingFileListWithError:(NSError**)error;

获得url对应缓存文件的路径

-(NSString*)getCachedFilePathForUrl:(NSURL *)url;

获得url对应缓存未完成url对应的cache fragment

-(NSArray*)getCacheFragmentForUrl:(NSURL *)url error:(NSError **)error;

查询缓存区位置

-(NSString*)cacheRoot;

获得缓存区路径

5.API接口文档

API接口文档在线版  

6.其他文档

请见wiki

7.反馈与建议

  • QQ讨论群:
    • 574179720 [视频云技术交流群]
    • 621137661 [视频云iOS技术交流]
    • 以上两个加一个QQ群即可
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].