IVS iOS Player SDK 시작하기
이 문서에서는 Amazon IVS iOS Player SDK 시작하기와 관련된 단계를 안내합니다.
Swift Package Manager를 통해 Player SDK를 통합하는 것이 좋습니다. (또는 CocoaPods를 통해 통합하거나 프레임워크를 프로젝트에 수동으로 추가할 수 있습니다.)
권장: Player SDK 통합(Swift Package Manager)
-
https://player.live-video.net/1.44.0/Package.swift에서 Package.swift 파일을 다운로드합니다.
-
프로젝트에서 AmazonIVSPlayer라는 새 디렉터리를 생성하여 버전 제어에 추가합니다.
-
다운로드한 Package.swift 파일을 새 디렉터리에 넣습니다.
-
Xcode에서 파일 > 패키지 종속성 추가로 이동하여 로컬 추가...를 선택합니다.
-
생성한 AmazonIVSPlayer 디렉터리로 이동하여 선택하고 패키지 추가를 선택합니다.
-
AmazonIVSPlayer용 패키지 제품 선택이라는 프롬프트가 표시되면 대상에 추가 섹션에서 애플리케이션 대상을 설정하여 AmazonIVSPlayer를 패키지 제품으로 선택합니다.
-
패키지 추가를 선택합니다.
대체 접근 방식: Player SDK 통합(CocoaPods)
중요: CocoaPods의 모드는 유지 관리이며(보안 수정만 해당), 2026년 12월 이후에는 CocoaPods 리포지토리에 게시할 수 있는 새 패키지 또는 업데이트가 없습니다. 기존 패키지는 계속 사용할 수 있지만, 고정됩니다. 모든 새 프로젝트에 Swift Package Manager를 사용하는 것이 좋습니다.
릴리스는 AmazonIVSPlayer
이라는 이름으로 CoCocoaPods를 통해 게시됩니다. 이 종속성을 Podfile에 추가합니다.
pod 'AmazonIVSPlayer'
pod install
을 실행합니다. 실행 후 .xcworkspace
에서 SDK를 사용할 수 있습니다.
대체 방법: 수동으로 프레임워크 설치
플레이어 생성
플레이어 객체는 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에서는 최적화를 통해 앱의 크기를 줄입니다.
모두 통합
다음의 간단한 view-controller 스니펫은 플레이어 뷰에서 URL을 로드하고 재생합니다. playerView
속성은 XIB/Storyboard에서 초기화되며, 해당 속성의 클래스는 Identity Inspector의 Custom Class 섹션을 사용하여 Interface Builder에서 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