HolaCDN 1.3.8

HolaCDN 1.3.8

测试已测试
Lang语言 Obj-CObjective C
许可证 自定义
发布上次发布2017年3月

Alexey Makarov 维护。



HolaCDN 1.3.8

  • hola.org

HolaCDN.framework

本文档描述了将本能 iOS 应用与 HolaCDN 集成的过程。

要求

iOS 7+ 或 tvOS 9+ 需要。

目前,HolaCDN 与 AVPlayerAVQueuePlayer 一起工作,仅与 AVURLAsset+HLS 视频。尚不支持自定义 AVAssetResourceLoaderDelegate(即将提供)。

注意:还有一个 Android 版本 也是可用的。

如果您有任何问题,请通过邮箱 [email protected] 或 Skype: holacdn 联系我们

安装

手动

  • 下载最新版本 发行

  • 将 hola-cdn-sdk.xcodeproj 添加到您的项目中

  • 在您的目标中,单击 Linked Frameworks and Libraries 中的 +,添加 libHolaCDN.a

初始化

  • 使用期望参数创建一个新的 HolaCDN 实例
    • customer: 字符串 - 必需参数,您的 customerId
    • zone: 字符串? - 可选参数以强制选择区域。如果为 nil,将自动根据您的 HolaCDN 配置选择
    • mode: 字符串? - 可选参数以强制选择 CDN 模式。如果为 nil,将自动根据您的 HolaCDN 配置选择;受支持选项包括:nil"origin_cdn""hola_cdn"
let cdn = HolaCDN(customer: "your_customer_id", usingZone: nil, andMode: "hola_cdn")
  • (可选)您可以设置加载 HolaLibrary 和资产的超时时间
// 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
  • HolaLibrary 加载将自动异步进行

在此过程中可能会调用一些代理方法

  • 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开发者工具

      • 在偏好设置中启用Safari的开发者模式
      • 在模拟器或已连接的设备上运行您的应用程序
        • 要启用设备上的此选项,请查看设置 -> Safari -> 高级 -> 网页检查器
      • 在Safari -> 开发 -> 模拟器(或设备名称)菜单中找到您的应用程序
      • 在开发工具控制台中运行 hola_cdn.get_stats()
        • 您应该能看到当前详细的CDN统计信息
        • 如果您看到 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])

示例

Swift

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())")
    }
}

Objective-C

#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模块的日志。