3. コンテンツダウンロード
このドキュメントは機械翻訳で作成された下書きであり、現在レビュー中です。機械翻訳の特性上、一部の内容が不正確であったり、韓国語の原文と異なる場合があります。より正確な情報については、韓国語のドキュメントをご参照ください。
Kollus SDK を通じたコンテンツダウンロードは、常に 2 つのステップを経て進行します。
まず URL からコンテンツのメタ情報を読み込んでデバイス検証用のメディアコンテンツキー(mediaContentKey、mck)を取得した後、そのキーをもとに実際のファイルダウンロードを開始します。
このドキュメントのすべてのサンプルコードは、公式サンプルアプリ kollus_player_ios をもとに作成されています。
ダウンロードフロー
extension StorageManager {
// Step 1: Load content metadata (synchronous)
public func loadContentURL(URL urlString: String,
completion: @escaping (Error?, String) -> Void) {
do {
let mck = try storage.loadContentURL(urlString)
completion(nil, mck)
} catch {
completion(error, error.localizedDescription)
}
}
// Step 2: Start actual download based on media content key
func startDownloadContent(mediaContentKey: String) {
do {
try storage.downloadContent(mediaContentKey)
} catch {
print(error.localizedDescription)
}
}
}
loadContentURL メソッドは、コンテンツのメタ情報を SDK の永続ストレージに登録し、mediaContentKey を返します。同じ URL を複数回呼び出しても、返される mediaContentKey は同一のまま維持されます。
重複ダウンロードのチェック
新規ダウンロードを実行する前に、同じ URL がすでにダウンロードリストに登録されているかどうかを確認するには、checkContentURL メソッドを使用します。
func checkIsDownloadContent(url: String,
completion: @escaping (Bool, KollusContent?) -> Void) {
DispatchQueue.global().async { [unowned self] in
do {
let mck = try storage.checkContentURL(url)
let list = storage.contents() as! [KollusContent]
if let match = list.first(where: { $0.mediaContentKey == mck }) {
DispatchQueue.main.async { completion(true, match) }
} else {
DispatchQueue.main.async { completion(false, nil) }
}
} catch {
DispatchQueue.main.async { completion(false, nil) }
}
}
}
loadContentURL と checkContentURL の違い
loadContentURL: 新規ダウンロードの入口(コンテンツ情報を新規登録)checkContentURL: 既存のダウンロード履歴との照合(未登録の URL を渡した場合はエラーを返す)
ダウンロードのキャンセル・一時停止・再開の制御ポリシー
func cancelDownloadContent(mediaContentKey: String) {
do {
try storage.downloadCancelContent(mediaContentKey)
} catch {
print(error.localizedDescription)
}
}
| 操作 | API | 説明 |
|---|---|---|
| ダウンロード開始 | try storage.downloadContent(mck) | ダウンロードを開始します。 |
| ダウンロードキャンセル | try storage.downloadCancelContent(mck) | ダウンロードセッションを中断します。 |
| ダウンロード一時停止 | 専用 API なし | 明示的な一時停止 API は提供されていないため、downloadCancelContent でキャンセル後に再開します。SDK が内部的に一部データを保持する場合がありますが、一般的には最初からダウンロードし直すことを前提としてください。 |
| ダウンロード再開 | 再度 try storage.downloadContent(mck) を呼び出す | - |
公式サンプルアプリは、一時停止および再開用の別途 UI コンポーネントを構成せず、キャンセル後に再開する構造を採用しています。
ダウンロード進行率の追跡
リアルタイムのダウンロード進行状況は、デリゲートコールバック kollusStorage(_:downloadContent:error:) に注入される KollusContent インスタンスのプロパティを参照することで追跡します。
詳細については、8. ダウンロードイベント/コールバック のドキュメントを参照してください。
| プロパティ | 型 | 説明 |
|---|---|---|
fileSize | long long | コンテンツファイルサイズ |
downloadSize | long long | ダウンロード済みサイズ |
downloadProgress | NSUInteger | ダウンロード進行率(0〜100) |
downloadStopSize | long long | ダウンロード一時停止時に保持されたサイズ |
downloaded | BOOL | ダウンロード完了の有無 |
downloadStatus | NSInteger | ダウンロード進行状態コード |