本文档描述了将本能 iOS 应用与 HolaCDN 集成的过程。
iOS 7+ 或 tvOS 9+ 需要。
目前,HolaCDN 与 AVPlayer
或 AVQueuePlayer
一起工作,仅与 AVURLAsset
+HLS 视频。尚不支持自定义 AVAssetResourceLoaderDelegate
(即将提供)。
注意:还有一个 Android 版本 也是可用的。
如果您有任何问题,请通过邮箱 [email protected] 或 Skype: holacdn 联系我们
下载最新版本 发行
将 hola-cdn-sdk.xcodeproj 添加到您的项目中
在您的目标中,单击 Linked Frameworks and Libraries
中的 +,添加 libHolaCDN.a
HolaCDN
实例customer
: 字符串 - 必需参数,您的 customerIdzone
: 字符串? - 可选参数以强制选择区域。如果为 nil
,将自动根据您的 HolaCDN 配置选择mode
: 字符串? - 可选参数以强制选择 CDN 模式。如果为 nil
,将自动根据您的 HolaCDN 配置选择;受支持选项包括:nil
、"origin_cdn"
、"hola_cdn"
。let cdn = HolaCDN(customer: "your_customer_id", usingZone: nil, andMode: "hola_cdn")
// In case if timeout reached while HolaLibrary loading, HolaCDN SDK will use saved version.
// In case if timeout reached while asset loading, it will play without HolaCDN (not to make you wait).
cdn.loaderTimeout = 5.0 // in seconds; by default: 2.0
在此过程中可能会调用一些代理方法
cdnDidLoaded(cdn: HolaCDN) -> Void
:当 HolaCDN 代码加载并初始化完毕时cdnExceptionOccured(cdn: HolaCDN, withError: NSError) -> Void
:当执行 HolaCDN 代码时出现问题如何检查 HolaCDN
状态
cdn.get_mode(completionBlock: (String?) -> Void)
:异步方法,将当前 CDN 模式返回到 completionBlock
"loading"
- CDN js 代码正在加载"detached"
- CDN 已加载,未附加到播放器"disabled"
- CDN 在自动模式下,对于当前配置被禁用"origin_cdn"
- 原生CDN已连接并处于原生CDN模式下正常工作"hola_cdn"
- HolaCDN已连接并处于HolaCDN模式下正常工作通过Safari开发者工具
hola_cdn.get_stats()
undefined
- 这表示CDN工作不正常(可选)您可能需要创建一个遵从 HolaCDNDelegate
协议的类来处理一些HolaCDN回调
protocol HolaCDNDelegate: NSObjectProtocol {
optional func cdnDidLoaded(cdn: HolaCDN) -> Void
optional func cdnDidAttached(cdn: HolaCDN) -> Void
optional func cdnDidDetached(cdn: HolaCDN) -> Void
optional func cdnStateChanged(cdn: HolaCDN, toState state: String) -> Void
optional func cdnExceptionOccured(cdn: HolaCDN, withError: NSError) -> Void
}
// in case if you have implemented the protocol for the current ViewController
cdn.delegate = self
有多种方法可以将视频附加到HolaCDN
let url = NSURL("https://example.com/your/video.m3u8")
let myPlayer = cdn.playerWithURL(url)
cdn.attach(myPlayer)
或
var myPlayer = AVPlayer()
myPlayer = cdn.attach(myPlayer)
let item = cdn.playerItemWithURL(url)
myPlayer.replaceCurrentItemWithPlayerItem(item)
或AVQueuePlayer的类似方法
let myPlayer1 = cdn.queuePlayerWithURL(url)
let item1 = AVPlayerItem(URL: url)
let item2 = AVPlayerItem(URL: url2)
let myPlayer2 = cdn.queuePlayerWithItems([item1, item2])
import HolaCDN
class PlayerViewController: AVPlayerViewController, HolaCDNDelegate {
var cdn: HolaCDN!
override func viewDidLoad() {
super.viewDidLoad()
cdn = HolaCDN(customer: "demo", usingZone: nil, andMode: "hola_cdn")
cdn.delegate = self
let url = NSURL(string: "https://example.com/your/video.m3u8")!
self.player = cdn.playerWithURL(url)
cdn.attach(self.player)
}
func cdnDidLoaded(cdn: HolaCDN) {
NSLog("cdn did loaded")
}
func cdnDidAttached(cdn: HolaCDN) {
NSLog("cdn did attached! \(cdn.get_mode())")
}
}
#import "hola_cdn_sdk.h"
@implementation PlayerViewController
HolaCDN* cdn;
AVPlayer* player;
- (void)viewDidLoad {
[super viewDidLoad];
cdn = [HolaCDN cdnWithCustomer:@"demo" usingZone:nil andMode:@"hola_cdn"];
[cdn setDelegate:self]; // Your delegate class should be compatible with HolaCDNDelegate
NSURL *url = [NSURL URLWithString:@"https://example.com/your/video.m3u8"];
player = [cdn playerWithURL:url];
[cdn attach:player];
}
-(void)cdnDidLoaded:(HolaCDN *)cdn {
NSLog(@"cdn did loaded!");
}
-(void)cdnDidAttached:(HolaCDN *)cdn {
[cdn get_mode:^(NSString *mode) {
NSLog(@"cdn did attached! %@", mode);
}];
}
@end
HolaCDN日志有自己的格式:[等级/模块:实例_id] 信息
[INFO/cdn:1] New HolaCDN instance created
[INFO/cdn:1] Loading...
[INFO/cdn:1] Attach
[INFO/Item:1] Init
[INFO/Item:2] Init
[WARN/Proxy:1] getDelegate: delegate is undefined
[WARN/Proxy:1] Trying to execute js: 'on_play'; no delegate found!
[INFO/cdn:1] Use fresh-loaded HolaCDN library
[INFO/Proxy:1] HolaCDN attaching...
[INFO/Proxy:2] HolaCDN attaching...
[INFO/cdn:1] Loaded
您可以通过调用此方法来选择所需等级
HolaCDN.setLogLevel(.Debug) // Possible values are: .None, .Debug, .Info, .Warning, .Error, .Critical
并设置可输出的模块
HolaCDN.setLogModules([]) // defaut value, all modules
HolaCDN.setLogModules(["cdn", "loader", "network"]) // main HolaCDN logs, HolaCDNLoaderDelegate delegate logs and networking logs
当您使用AVQueuePlayer
与多个资产时,实例_id
很有用 – 您可以使用XCode过滤器字段的根据它过滤日志。例如,使用过滤器:2]
将显示第2个资产及其相关HolaCDN模块的日志。