IVS iOS Player SDK の開始方法
このドキュメントでは、Amazon IVS iOS Player SDK の使用を開始するための手順について説明します。
Swift Package Manager を介して Player SDK を統合することをお勧めします。(または、CocoaPods を介して統合するか、フレームワークを手動でプロジェクトに追加することも可能です)
推奨: Player SDK の統合 (Swift Package Manager)
-
Package.swift ファイルを「https://player.live-video.net/1.43.0/Package.swift」からダウンロードします。
-
プロジェクト内で AmazonIVSPlayer という名前の新しいディレクトリを作成し、バージョン管理に追加します。
-
ダウンロードした Package.swift ファイルを新しいディレクトリに配置します。
-
Xcode で [ファイル] > [パッケージの依存関係を追加] に移動し、[ローカルに追加] を選択します。
-
作成した AmazonIVSPlayer ディレクトリに移動して選択したら、パッケージの追加を選択します。
-
AmazonIVSPlayer のパッケージ製品の選択を求められたら、[ターゲットに追加] セクションでアプリケーションターゲットを設定して、パッケージ製品として [AmazonIVSPlayer] を選択します。
-
パッケージの追加を選択します。
代替のアプローチ: Player SDK (CocoaPods) の統合
重要: CocoaPods はメンテナンスモード (セキュリティ修正のみ) になっており、2026 年 12 月以降は CocoaPods リポジトリに新しいパッケージや更新プログラムを発行することはできません。既存のパッケージは引き続き利用できますが、凍結されます。すべての新しいプロジェクトには Swift Package Manager を使用することをお勧めします。
リリースは、CocoaPods から AmazonIVSPlayer
という名前で公開されます。この依存関係を自分の Podfile に追加します。
pod 'AmazonIVSPlayer'
pod install
を実行すると、SDK が .xcworkspace
で利用できるようになります。
代替方法:フレームワークを手動でインストールする
プレイヤーを作成する
プレイヤーオブジェクトは IVSPlayer
です。以下のように初期化します。
- Swift
-
import AmazonIVSPlayer
let player = IVSPlayer()
- Objective-C
-
#import <AmazonIVSPlayer/AmazonIVSPlayer.h>
IVSPlayer *player = [[IVSPlayer alloc] init];
委任をセットアップする
委任コールバックは、再生状態、イベント、エラーに関する情報を提供します。コールバックはすべて、メインキューで呼び出されます。
- Swift
-
// Self must conform to IVSPlayer.Delegate
player.delegate = self
- Objective-C
-
// Self must conform to IVSPlayer.Delegate
player.delegate = self
動画を表示する
プレイヤーは、動画をカスタムレイヤー、IVSPlayerLayer
に表示します。SDK は、このレイヤーでバックアップされた UIView
サブクラス、IVSPlayerView
も提供します。自分のアプリケーションの UI により適したものを使用します。
いずれの場合も、player
プロパティを使用して、プレイヤーインスタンスから動画を表示します。
- Swift
-
// When using IVSPlayerView:
playerView.player = player
// When using IVSPlayerLayer:
playerLayer.player = player
- Objective-C
-
// When using IVSPlayerView:
playerView.player = player;
// When using IVSPlayerLayer:
playerLayer.player = player;
ストリームをロードする
プレイヤーは、ストリームを非同期的にロードします。再生の準備が整うと、ステータスに表示されます。
- Swift
-
player.load(url)
- Objective-C
-
[player load:url];
ストリームを再生する
プレイヤーの準備ができたら、play
を使って再生を開始します。state
プロパティで委任インターフェイスまたはキー値のモニタリングを使用し、状態の変化をモニタリングします。以下は、委任ベースによるアプローチの一例です。
- Swift
-
func player(_ player: IVSPlayer, didChangeState state: IVSPlayer.State) {
if state == .ready {
player.play()
}
}
- Objective-C
-
- (void)player:(IVSPlayer *)player didChangeState:(IVSPlayerState)state {
if (state == IVSPlayerStateReady) {
[player play];
}
}
アプリのバックグラウンドで一時停止する
プレイヤーは、アプリがバックグラウンドにある間は再生をサポートしませんが、完全に引き離す必要はありません。一時停止すれば十分です。以下の例をご覧ください。
- Swift
-
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self,
selector: #selector(applicationDidEnterBackground(_:)),
name: UIApplication.didEnterBackgroundNotification,
object: nil)
}
@objc func applicationDidEnterBackground(_ notification: NSNotification) {
playerView?.player?.pause()
}
- Objective-C
-
- (void)viewDidLoad {
[super viewDidLoad];
NSNotificationCenter *defaultCenter = NSNotificationCenter.defaultCenter;
[defaultCenter addObserver:self
selector:@selector(applicationDidEnterBackground:)
name:UIApplicationDidEnterBackgroundNotification
object:nil];
}
- (void)applicationDidEnterBackground:(NSNotification *)notification {
[playerView.player pause];
}
スレッドセーフ
プレイヤー API はスレッドセーフではありません。プレイヤーインスタンスは、アプリケーションのメインスレッドから作成して使用する必要があります。
SDK サイズ
Amazon IVS Player SDK は、可能な限りサイズが軽量になるように設計されています。SDK サイズに関する最新情報については、リリースノートを参照してください。
重要:サイズの影響を評価する場合、Xcode によって生成される IPA のサイズは、ユーザーのデバイスにダウンロードされるアプリのサイズを表すものではありません。App Store では、アプリケーションのサイズを小さくするために最適化が行われています。
まとめ
以下の単純なビューコントローラーのスニペットは、プレイヤー画面に URL をロードし、再生します。playerView
プロパティは、XIB/ストーリーボードから初期化され、そのクラスは IIdentity Inspector のカスタムクラスのセクションを使用してインターフェイスビルダーの IVSPlayerView
にセットされることに注意してください。
- Swift
-
import AmazonIVSPlayer
class MyViewController: UIViewController {
...
// Connected in Interface Builder
@IBOutlet var playerView: IVSPlayerView!
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self,
selector: #selector(applicationDidEnterBackground(_:)),
name: UIApplication.didEnterBackgroundNotification,
object: nil)
}
@objc func applicationDidEnterBackground(_ notification: NSNotification) {
playerView?.player?.pause()
}
...
// Assumes this view controller is already loaded.
// For example, this could be called by a button tap.
func playVideo(url videoURL: URL) {
let player = IVSPlayer()
player.delegate = self
playerView.player = player
player.load(videoURL)
}
}
extension MyViewController: IVSPlayer.Delegate {
func player(_ player: IVSPlayer, didChangeState state: IVSPlayer.State) {
if state == .ready {
player.play()
}
}
}
- Objective-C
-
// MyViewController.h
@class IVSPlayerView;
@interface MyViewController: UIViewController
...
// Connected in Interface Builder
@property (nonatomic) IBOutlet IVSPlayerView *playerView;
...
@end
// MyViewController.m
#import <AmazonIVSPlayer/AmazonIVSPlayer.h>
@implementation MyViewController <IVSPlayerDelegate>
...
- (void)viewDidLoad {
[super viewDidLoad];
NSNotificationCenter *defaultCenter = NSNotificationCenter.defaultCenter;
[defaultCenter addObserver:self
selector:@selector(applicationDidEnterBackground:)
name:UIApplicationDidEnterBackgroundNotification
object:nil];
}
- (void)applicationDidEnterBackground:(NSNotification *)notification {
[playerView.player pause];
}
// Assumes this view controller is already loaded.
// For example, this could be called by a button tap.
- (void)playVideoWithURL:(NSURL *)videoURL {
IVSPlayer *player = [[IVSPlayer alloc] init];
player.delegate = self;
playerView.player = player;
[player load:videoURL];
}
- (void)player:(IVSPlayer *)player didChangeState:(IVSPlayerState)state {
if (state == IVSPlayerStateReady) {
[player play];
}
}
...
@end