このガイドでは、AliPlayerKit SDK for iOS を迅速に統合する方法について説明します。グローバル初期化、コンポーネントレイヤー統合、シーンレイヤー統合を含む、完全なプロセスを扱います。
開始する前に、「統合の準備」 ガイドに従って環境を設定し、必要な依存関係を追加してください。
このドキュメントは明確な構造を持っており、AI による解析と実行に最適です。開発ワークフローを効率化するために、このドキュメントを Skill として使用できます。AliPlayerKit の統合には、AI 支援の利用を推奨します。
AliPlayerKit は、最小限のコードで動画再生機能を迅速に統合できる、ミニマルな API を備えています。
統合ソリューションの選択
AliPlayerKit は階層化アーキテクチャを採用しています。コンポーネントレイヤー統合に加えて、シーンレイヤー統合も提供しており、ビジネスニーズに最適なオプションを選択できます:
統合ソリューション | モジュール | 説明 | ユースケース |
コンポーネントレイヤー統合 |
| コアの PlayerKit モジュールを使用し、設定可能なプレーヤー UI コンポーネントを提供します。 | カスタムのプレーヤー UI や再生動作のきめ細かな制御が必要なユースケース向けです。 |
シーンレイヤー統合 |
| コンポーネントレイヤー上に構築された、一般的な再生シナリオ向けの完全なソリューションを提供します。 | 長尺動画、ショートビデオ、ライブストリーミングなどの標準的な再生シナリオを迅速に実装する場合に適しています。 |
シーンレイヤーはコンポーネントレイヤーに依存するため、まずコンポーネントレイヤーを統合する必要があります。
グローバル初期化
AppDelegate の application:didFinishLaunchingWithOptions: メソッドで、 [AliPlayerKit setup] を呼び出してグローバル初期化を実行します。このメソッドは、アプリケーションのライフサイクル全体で一度だけ呼び出す必要があります。
#import <AliPlayerKit/AliPlayerKit.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// AliPlayerKit のグローバル設定を初期化
[AliPlayerKit setup];
return YES;
}
@endimport AliPlayerKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// AliPlayerKit のグローバル設定を初期化
AliPlayerKit.setup()
return true
}
}AliPlayerKit は、ロギングシステムやプリロードポリシーなど、他のグローバル設定インターフェイスも提供します。詳細については、「API リファレンス」をご参照ください。
オプション 1:コンポーネントレイヤー統合
コンポーネントレイヤー ( PlayerKit モジュール ) は、すぐに使用できる設定可能なプレーヤー UI コンポーネントを提供します。動画再生が必要な各ビューで再生機能を実装するには、以下の手順に従ってください。
ステップ 1:プレーヤービューの追加
ViewController で AliPlayerView を作成し、ビュー階層に追加します:
AliPlayerView *playerView = [[AliPlayerView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:playerView];let playerView = AliPlayerView(frame: view.bounds)
view.addSubview(playerView)AliPlayerView はビュー階層のどこにでも配置でき、必要に応じてフレームを設定できます。フルスクリーン切り替えを有効にすると、コンポーネントがビュー階層の調整を自動的に処理します。
ステップ 2:コントローラーのバインドと再生
attach: の前に configure: を呼び出す必要があります。そうしないと、ビューのバインド中に再生設定を取得できません。
ViewController で、コントローラーを作成し、データを設定して、ビューをアタッチします:
AliPlayerControllerを作成します。AliPlayerModelを設定します (推奨される VidAuth 方式、または簡単なテストには URL ソースを使用できます)。configure:とattach:を呼び出します。deallocでdestroyを呼び出してリソースを解放します。
#import <AliPlayerKit/AliPlayerKit.h>
@interface VideoPlayerViewController ()
@property (nonatomic, strong) AliPlayerView *playerView;
@property (nonatomic, strong) AliPlayerController *controller;
@end
@implementation VideoPlayerViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 1. プレーヤービューの作成
self.playerView = [[AliPlayerView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:self.playerView];
// 2. プレーヤーコントローラーの作成
self.controller = [[AliPlayerController alloc] init];
// 3. 再生データの設定 (VidAuth を推奨)
VideoSource *source = [VideoSource vidAuthSourceWithVid:@"your_video_id"
playAuth:@"your_playback_credential"];
AliPlayerModel *model = [[AliPlayerModel alloc] initWithVideoSource:source];
model.videoTitle = @"サンプル動画";
// 4. ソースを設定し、ビューをアタッチ (アタッチ後に自動的に再生が開始)
[self.controller configure:model];
[self.playerView attach:self.controller];
}
- (void)dealloc {
// プレーヤーを破棄してリソースを解放
[self.controller destroy];
}
@end
import AliPlayerKit
class VideoPlayerViewController: UIViewController {
private let playerView = AliPlayerView(frame: .zero)
private let controller = AliPlayerController()
override func viewDidLoad() {
super.viewDidLoad()
// 1. プレーヤービューの作成
playerView.frame = view.bounds
view.addSubview(playerView)
// 2. 再生データの設定 (VidAuth を推奨)
let source = VideoSource.vidAuthSource(withVid: "your_video_id", playAuth: "your_playback_credential")
let model = AliPlayerModel(videoSource: source)
model.videoTitle = "サンプル動画"
// 3. ソースを設定し、ビューをアタッチ (アタッチ後に自動的に再生が開始)
controller.configure(model)
playerView.attach(controller)
}
deinit {
// プレーヤーを破棄してリソースを解放
controller.destroy()
}
}
一時的に動画 ID と再生認証情報を取得できない場合は、URL ソースを使用して簡単にテストできます。シーンモジュールには、組み込みの SceneConstants サンプルデータが用意されており、これを直接使用することもできます。
VideoSource *source = [VideoSource urlSourceWithUrl:@"https://example.com/video.mp4"];AliPlayerModel.autoPlayはデフォルトでYESであり、設定完了後に自動的に再生を開始します。手動でplayを呼び出す必要はありません。AliPlayerController.autoLifecycleManagementはデフォルトでYESであり、アプリケーションがフォアグラウンドとバックグラウンドを切り替える際の再生の一時停止と再開を自動的に処理します。ただし、push/pop などのページレベルのナビゲーションでは、viewDidAppearとviewWillDisappearで、それぞれ手動でonResumeとonPauseを呼び出す必要があります。configure::内部でライフサイクル戦略を使用してプレーヤーインスタンスを取得し、データソースを設定して再生を準備します。deallocメソッドでdestroyを呼び出してコントローラーを破棄する必要があります。そうしないと、メモリリークが発生します。
ステップ 3 (オプション):戻るボタンの処理
プレーヤーの戻るボタンの動作をカスタマイズする必要がある場合は、onBackPressed コールバックを使用できます:
__weak typeof(self) weakSelf = self;
self.playerView.onBackPressed = ^{
[weakSelf.navigationController popViewControllerAnimated:YES];
};playerView.onBackPressed = { [weak self] in
self?.navigationController?.popViewController(animated: true)
}このコールバックは、プレーヤーがフルスクリーンモードでない場合にのみトリガーされます。フルスクリーンモードでは、戻るボタンは代わりにフルスクリーンモードを終了します。このコールバックを設定しない場合、プレーヤーはレスポンダーチェーンを介してデフォルトのナビゲーションアクション (ポップまたはディスミス) を試みます。
ステップ 4 (オプション):カスタム設定
プレーヤーが準備される前に、バッファリング戦略や Referer などのカスタム SDK 設定を設定するには、 onPlayerConfigBlock を使用します:
model.onPlayerConfigBlock = ^(id<MediaPlayer> player) {
// `prepare` の前に実行されます。基盤となるプレーヤーインスタンスにアクセスしてカスタム設定を行えます。
// 例えば、バッファリング戦略、Referer の設定、または `setOption` の使用など。
};model.onPlayerConfigBlock = { player in
// `prepare` の前に実行されます。基盤となるプレーヤーインスタンスにアクセスしてカスタム設定を行えます。
}グローバル設定は setup の前に [AliPlayerKit setOnGlobalInitBlock:] を使用して一度だけ設定されます。インスタンス設定は configure: が呼び出されるたびに model.onPlayerConfigBlock によってトリガーされます。詳細については、「カスタム設定」をご参照ください。
オプション 2:シーンレイヤー統合
シーンレイヤーは、長尺動画、ショートビデオ、ライブストリーミングなど、特定のビジネスシナリオ向けの完全な再生ソリューションを提供します。これらのソリューションはコンポーネントレイヤー上に構築されており、すぐに使用できます。
ステップ 1:シーンモジュールの選択
PlayerKitScenes ディレクトリにあるシーンモジュールは、CocoaPods のサブスペックを介してインポートされます。利用可能なモジュールは次のとおりです:
シーンモジュール | Pod サブスペック | 説明 |
|
| すべてのシーンで必要な共通モジュールです。他のシーンモジュールの基本的な依存関係となります。 |
|
| 長尺動画シーン:長尺動画再生のための完全なソリューションを提供します。 |
|
| ショートビデオシーン:スワイプして再生するショートビデオフィードのための完全なソリューションを提供します。 |
|
| ライブストリーミングシーン:ライブストリーミング再生のための完全なソリューションを提供します。 |
|
| プレイリストシーン:ビデオプレイリスト再生のための完全なソリューションを提供します。 |
ステップ 2:シーンページの起動
シーンモジュールを統合した後、対応するシーンページを次の 2 つの方法のいずれかで起動できます:
方法 1:直接インスタンス化 (推奨)
各シーンモジュールは独立した ViewController を提供し、UINavigationController を介して直接インスタンス化してナビゲートできます:
#import "SceneLongVideoViewController.h"
// 長尺動画シーンへナビゲート
SceneLongVideoViewController *vc = [[SceneLongVideoViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];// 長尺動画シーンへナビゲート
let vc = SceneLongVideoViewController()
navigationController?.pushViewController(vc, animated: true)各シーンに対応する ViewController は次のとおりです:
シーン | ViewController |
長尺動画 |
|
ショートビデオ |
|
ライブストリーミング |
|
プレイリスト |
|
方法 2:スキーマルーティング
シーンモジュールは、スキーマプロトコルを使用して対応する再生シーンを開始できます。デモプロジェクトでは、スキーマ URL を使用して対応するシーンを自動的に検出してナビゲートできるルーティングユーティリティクラス AppSchemaRouter を提供しています:
#import "AppSchemaRouter.h"
// スキーマ経由で長尺動画シーンへナビゲート
[AppSchemaRouter navigateToSchema:@"playerkit://scenes/longvideo" fromViewController:self];// スキーマ経由で長尺動画シーンへナビゲート
AppSchemaRouter.navigate(toSchema: "playerkit://scenes/longvideo", from: self)各シーンに対応するスキーマアドレスは次のとおりです:
シーン | スキーマ |
長尺動画 |
|
ショートビデオ |
|
ライブストリーミング |
|
プレイリスト |
|
AppSchemaRouter は、デモプロジェクト ( App モジュール ) で提供されるルーティングツールです。これを使用すると、AppModuleProtocol プロトコルに基づいてモジュールを自動的に検出できます。シーンモジュールは、*Module クラス ( 例: SceneLongVideoModule ) を使用して、スキーマ、タイトル、および優先度を登録します。アプリケーションでスキーマルーティングを使用する場合は、この実装を参照するか、独自のルーティングフレームワークを統合できます。
シーンの実装
シーンモジュールのソースコードは、コンポーネントレイヤー統合のベストプラクティスの例を提供します。以下のセクションでは、各シーンのコア実装パターンについて説明します。
長尺動画
SceneLongVideoViewController は、コンポーネントレイヤーの標準的な統合プロセスを示しています:
// AliPlayerKit 再生コンポーネントの初期化
- (void)setupPlayerKit {
// 1. プレーヤーコンポーネントビューの作成
self.playerView = [[AliPlayerView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:self.playerView];
// オプション:戻るボタンのコールバックを設定
__weak typeof(self) weakSelf = self;
self.playerView.onBackPressed = ^{
[weakSelf.navigationController popViewControllerAnimated:YES];
};
// 2. プレーヤーコンポーネントコントローラーの作成
self.playerController = [[AliPlayerController alloc] init];
// 3. プレーヤーコンポーネントデータの設定
VideoSource *source = [VideoSource vidAuthSourceWithVid:@"your_video_id" playAuth:@"your_playback_credential"];
AliPlayerModel *model = [[AliPlayerModel alloc] initWithVideoSource:source];
model.videoTitle = @"長尺動画";
// 4. ソースを設定し、コントローラーをビューにアタッチ (アタッチ後に自動的に再生が開始)
[self.playerController configure:model];
[self.playerView attach:self.playerController];
}ライブストリーミング
SceneLiveViewController は、URL ソースとライブストリーミングのシーンタイプの使用方法を示しています:
VideoSource *source = [VideoSource urlSourceWithUrl:liveUrl];
AliPlayerModel *model = [[AliPlayerModel alloc] initWithVideoSource:source];
model.videoTitle = @"ライブストリーム";
model.sceneType = SceneTypeLive; // シーンタイプをライブに設定
[self.playerController configure:model];
[self.playerView attach:self.playerController];SceneType は、スロットの可視性設定と UI の動作に影響します。たとえば、ライブストリーミングシナリオでは、プログレスバーなどの VOD 要素が自動的に非表示になります。詳細については、「シーンタイプ」をご参照ください。
プレイリスト
ScenePlaylistViewController は、SingletonLifecycleStrategy と PlayerNotificationDelegate の高度な使用方法を示し、連続再生を実装します:
// シングルトンライフサイクル戦略を使用してプレーヤーインスタンスを再利用
self.lifecycleStrategy = [SingletonLifecycleStrategy sharedInstance];
self.currentController = [[AliPlayerController alloc] initWithLifecycleStrategy:self.lifecycleStrategy];
// 再生完了の通知を登録して連続再生をトリガー
[self.currentController addNotificationDelegate:self];
// PlayerNotificationDelegate コールバック
- (void)playerDidCompletion {
[self playNextVideo]; // 現在の動画の再生が完了しました。次の動画を自動的に再生します
}initWithLifecycleStrategy: を使用してライフサイクル戦略を指定し、プレーヤーインスタンスを再利用してパフォーマンスを向上させることができます。詳細については、「プレーヤーライフサイクル戦略」をご参照ください。
使用例と拡張機能
これらの手順に従うと、AliPlayerKit が統合され、動画再生が有効になります。
その他の使用例については、次のディレクトリをご参照ください:
モジュール | 説明 |
| ロギングシステム、スロットシステム、通知システム、ポリシーシステム、ライフサイクル戦略、プリロード、ビデオソース、ローカライゼーションなど、一般的な API の使用方法の例を提供します。 |
| 長尺動画、ショートビデオ、ライブストリーミング、プレイリストなど、典型的な再生シナリオのソリューションを提供します。 |
各使用例のスキーマルートの形式は playerkit://usages/<module_name> です。これらの例には、デモプロジェクトのホームページから直接アクセスできます。