StarPlayerView

Objective-C

@interface StarPlayerView : UIView

#pragma mark - player
@property (nonatomic, weak, nullable) id<StarPlayerViewDelegate> delegate;        //target delegate

@property (nonatomic, readonly) StarPlayerOpenState openState;      //플레이어 준비 상태
@property (nonatomic, readonly) StarPlayerPlayState playState;      //플레이어 재생 상태

/**
 * 비디오 layer
 * @note 
 * 비디오 영상이 출력되는 layer
 * PlayerStateReadyToPlay 상태 이후에 값이 셋팅됨
 */
@property (nonatomic, readonly) CALayer * _Nullable videoLayer;

/**
 * 플레이어 재생 가능 시간
 * @note
 * 단위 : sec, millisec
 * @see millisecModeEnabled
 */
@property (nonatomic, readonly) NSTimeInterval playerDuration;

/**
 * 플레이어 현재 재생 시간
 * @note
 * 단위 : sec, millisec
 * @see millisecModeEnabled
 */
@property (nonatomic, readonly) NSTimeInterval playerCurrentTime;

/**
 * 플레이어 배속 설정
 * @note
 * 범위 : 0.5이상 ~ 2이하
 * PlayerStatePlaying 상태에서만 배속 설정 가능
 * eventEnabled이 true일 경우 playing_content 이벤트 전송 (배속 정보 전송)
 * @see eventEnabled */
@property (nonatomic, readwrite) CGFloat rate;

/**
 * 플레이어 재생 여부 */
@property (nonatomic, readonly) BOOL isPlaying;

/**
 * 플레이어 버퍼링 여부 */
@property (nonatomic, readonly) BOOL isBuffering;

/**
 * 기본 플레이어 사용여부
 * @note
 * 플레이어가 중지 상태(PlayerStateStopped) 일 때 변경 가능
 * true 인 경우 : currentAudioDelay 사용불가
 * false 인 경우 :  captureFrameWithTime 사용불가
 * @see captureFrameWithTime
 * @see currentAudioDelay */
@property (nonatomic, readwrite) BOOL basicPlayerEnabled;

/**
 * 낮은 대기 시간 사용 여부(서브플레이어 전용)
 * @note
 * 버퍼를 가져오는 시간이 짧아 스트리밍 로딩 속도 향상
 * 단, 네트워크 상태가 불안정할 경우 끊김 현상이 발생하여 스트리밍 안정성에 문제가 발생할 수 있음
 * (해당 옵션 사용시 LTE 이상 네트워크 속도  권장)
 *
 * playState가 StatePlayerStateStarting 이상이면 플레이어 reload
 * @see basicPlayerEnabled */
@property (nonatomic, readwrite) BOOL lowLatancyEnabled;

/**
 * 오디오 지연시간 (millisec)
 * @note
 * 오디오 싱크가 맞지 않을 때 사용
 * 기본 플레이어는 지원하지 않음
 * @see basicPlayerEnabled */
@property (nonatomic, readwrite) NSInteger currentAudioDelay;

/**
 * 플레이어 이어보기(재생 시작 위치)
 * @note
 * 단위 : sec, millisec
 * OpenStateReady 상태 일때 값 설정 가능
 * @see millisecModeEnabled */
//@property (nonatomic, readwrite) NSUInteger beginTime DEPRECATED_MSG_ATTRIBUTE("Use setPlayerContentModel instead of beginTime.");

/**
 * 누적 시청 시간
 * @note
 * 단위 : millisec
 * 동영상 PlayerDuration을 초과할 수 없음
 * Event 시간 계산에 사용 (play_time, play_time2) */
@property (nonatomic, readonly) NSUInteger watchedPlayTime;

/**
 * 플레이어 볼륨크기 (범위 0~1) */
@property (nonatomic, readonly) CGFloat outputVolume;

/**
 * 플레이어 화면 종횡비 설정
 * @note
 * 원본화면, 꽉찬화면, 16:9화면, 4:3화면 */
@property (nonatomic, readwrite) StarPlayerAspectRatio aspectRatio;

/**
 * 밀리 세컨드 모드 활성화 여부
 * @note
 * 플레이어가 millisec 단위로 동작 (기본 설정은 sec)
 * 플레이어가 중지 상태(PlayerStateStopped) 일 때 변경 가능 */
@property (nonatomic, readwrite) BOOL millisecModeEnabled;

/**
 * 플레이어 백그라운드 재생 활성화 여부
 * @note
 * pictureInPictureEnabled가 true이면 backgroundPlaybackEnabled는 true 변경됨 (pip가 활성화 되면 백그라운드 재생  자동 활성화)
 * @see pictureInPictureEnabled*/
@property (nonatomic, readwrite) BOOL backgroundPlaybackEnabled;

/**
 * 미러링 & 화면 캡쳐 차단 여부
 * @note
 * 플레이어가 중지 상태(PlayerStateStopped) 일 때 변경 가능 */
@property (nonatomic, readwrite) BOOL mirroringGuardEnabled;

/**
 * 플레이어 전용 워터마크 활성화 여부 */
@property (nonatomic, readwrite) BOOL watermarkEnabled;

/**
 * 플레이어 Audio 전용 Equalizer Animation (mp3 전용) 활성화 여부 */
@property (nonatomic, readwrite) BOOL mP3EqualizerAnimationEnabled;

/**
 * 플레이어 구간 반복 모드 활성화 */
@property (nonatomic, readwrite) BOOL rangeRepeatEnabled;

/**
 * 플레이어 구간 반복 자동 활성화
 * @note
 * 구간 반복 자동 재생
 * false : 구간 끝에 도달시 pause됨 */
@property (nonatomic, readwrite) BOOL rangeRepeatAutoPlayEnabled;

/**
 * 구간반복 최소 시간 */
@property (nonatomic, readwrite) NSUInteger rangeRepeatMinTime;
/**
 * 구간반복 최대 시간 */
@property (nonatomic, readwrite) NSUInteger rangeRepeatMaxTime;

/**
 * 플레이어 구간 반복 모드 Min, Max 시간 설정
 * @param minTime 최소 시간
 * @param maxTime 최대 시간 */
- (void)setRangeRepeatMinTime:(NSUInteger)minTime maxTime:(NSUInteger)maxTime;

/**
 * 플레이어 open
 * @note
 * 플레이어 실행에 필요한 준비작업 (라이센스 검증 등)
 * 기존에 라이센스 인증을 완료한 상태라면 다운로드된 미디어 파일은 오프라인에서도 재생가능 (스트리밍 재생은 해당x)
 * 온라인 상태에서는 서버에 라이센스 인증을 요청하여 상태를 갱신함
 * StarPlayerLicense class의 authTheLicenseAtServer 호출의 선행 없이도 해당 함수의 호출로 플레이어 재생 가능
 *
 * 라이센스 검증 실패 : 에러 발생 (playerEventOccurred)
 * 라이센스 검증 성공 : OpenStateIdle -> OpenStateReady 상태 변경
 * @see starPlayerView:playerEventOccurred:withEventMethod:
 * @see StarPlayerError
 * @param license 라이센스 코드*/
- (void)open:(NSString *_Nonnull)license;

/**
 * 플레이어 재생에 필요한 StarPlayerContentModel 을 설정
 * @note
 * OpenStateReady & PlayerStateStopped 상태일 때 변경 가능
 * @param content 플레이어 재생 정보 */
- (void)setPlayerContentModel:(StarPlayerContentModel *_Nonnull)content;

/**
 * 플레이어 자원 할당 해제
 * @note
 * 플레이어의 자원 해제
 *  - viewWillDisappear, viewDidDisappear에서 해당 함수를 호출할 경우 자원 해제가 안될 수 있음, 반드시 플레이어 자원 해제 완료후  ViewController dissmiss 호출을 권장
 *
 * 자원 할당 해제 플로우
 *  - playState > PlayerStateStopped :  stop(영상 정지) -> 이벤트 전송(EndContnet) -> scms 전송(disconnect) -> 자원 해제 -> completion 호출
 *  - playState == PlayerStateStopped :  자원 해제 -> completion 호출
 *
 * 자원 할당 해제 타임아웃 ->  2 sec
 *  - 이벤트 또는 scms 전송 지연 고려
 *  - 전송이 지연될 경우 타임아웃 처리(데이터 소실될 수 있음)
 *
 * @param completion 완료 블록 */
- (void)free:(void (^_Nullable)(void))completion;

/**
 * 플레이어 재생
 * @note
 * eventEnabled 'true'이고 PlayerStateReadyToPlay 상태이면 begin_content 이벤트 전송
 * @see eventEnabled */
- (void)play;

/**
 * 플레이어 일시정지
 * @note
 * eventEnabled 'true'일 경우 playing_content 이벤트 전송
 * @see eventEnabled */
- (void)pause;

/**
 * 플레이어 중지
 * @note
 * eventEnabled 'true'일 경우 end_content 이벤트 전송
 * @see eventEnabled */
- (void)stop;

/**
 * 뒤로가기 (seek to left)
 * @note
 * 단위 : sec, millisec
 * @see millisecModeEnabled
 * @param skipTime 건너뛸 시간
 * @param completion 완료 콜백 */
- (void)backward:(NSUInteger)skipTime completion:(void (^_Nullable)(BOOL finished, BOOL isMoveToTheRepeatMinPosition))completion;

/**
 * 앞으로가기 (seek to right)
 * @note
 * 단위 : sec, millisec
 * @see millisecModeEnabled
 * @param skipTime 건너뛸 시간
 * @param completion 완료 콜백 */
- (void)forward:(NSUInteger)skipTime completion:(void (^_Nullable)(BOOL finished, BOOL isMoveToTheRepeatMinPosition))completion;

/**
 * 플레이어 시간 이동
 * @note
 * 단위 : sec, millisec
 * @see millisecModeEnabled
 * @param seekTime 건너뛸 시간
 * @param completion 완료 콜백 */
- (void)seekToTime:(NSUInteger)seekTime completion:(void (^_Nullable)(BOOL finished, BOOL isMoveToTheRepeatMinPosition))completion;

/**
 * 동영상 현재 프레임 이미지 추출 (비트맵)
 * @note
 * 기본 플레이어 전용
 * 라이브스트리밍 : 추출 가능
 * default : 480x320
 * @see basicPlayerEnabled
 * @param size 썸네일 추출 크기(width, height)
 * @param completion 완료콜백(썸네일 이미지 반환) */
- (void)captureCurrentFrame:(CGSize)size completion:(void (^_Nullable)(CGImageRef _Nullable image))completion;

/**
 * 동영상 프레임 이미지 추출 (비트맵)
 * @note
 * 스트리밍 : 버퍼 데이터가 있을 경우만 썸네일 추출가능 (현재 재생위치의 썸네일 추출 권장)
 * 라이브스트리밍 : 추출 불가
 * default : 480x320
 * @see millisecModeEnabled
 * @param time 영상 추출 시간 (sec, millisec)
 * @param size 썸네일 추출 크기(width, height)
 * @param completion 완료콜백(썸네일 이미지 반환) */
- (void)captureFrameWithTime:(NSUInteger)time size:(CGSize)size completion:(void (^_Nullable)(CGImageRef _Nullable image))completion;


#pragma mark - HLS (기본 플레이어만 지원)
@property (nonatomic, readonly) NSArray<StarPlayerHLSStream*>* _Nonnull hlsStreamList;   //streamList at MasterPlaylist

/**
 * HLS MasterPlaylist stream 중에서 하나의 stream만 선택하여 영상 재생
 * @note
 * Stream은 MasterPlaylist에서 #EXT-X-STREAM-INF 태그에 해당함
 * @param stream 선택하여 재생할 stream
 */
- (void)selectHLSVideoStream:(StarPlayerHLSStream *_Nonnull)stream;

/**
 * HLS MasterPlaylist Alternative Media중에 하나의 Media를 선택하여 비디오 또는 Audio를 변경
 * @note
 * Media의 종류는 Audio, Video 두가지가 존재
 * Media는 MasterPlaylist에서 #EXT-X-MEDIA 태그에 해당함
 */
- (void)selectHLSAlternativeMedia:(StarPlayerHLSAlternativeMedia *_Nonnull)media;

/**
 * HLS 영상 '자동' 모드 활성화
 * @note
 * xStream list가 2개 이상 존재하면 자동 모드 활성화
 * @return 활성화 성공 여부 (이미 활성화 되어 있거나 활성화 할 수 없는 환경이면 return 'NO')
 */
- (BOOL)activateHlsAutoStream;

/**
 * HLS 오디오 '기본' 모드 활성화
 * @note
 * 선택된 오디오를 초기 상태로 원복
 * @return 활성화 성공 여부 (이미 활성화 되어 있거나 활성화 할 수 없는 환경이면 return 'NO')
 */
- (BOOL)activateHlsDefaultAlternativeAudio;

#pragma mark - StarPlayer PIP (기본 플레이어만 지원)
/**
 * PictureInPicture(PIP) 활성화 여부
 * @note
 * default : NO
 * pictureInPictureEnabled가 true이면 backgroundPlaybackEnabled는 true 변경됨 (pip가 활성화 되면 백그라운드 재생  자동 활성화)
 * 기본 플레이어 및 지원되는 기기에 한해서만 (pictureInPictureSupported)
 * @see backgroundPlaybackEnabled
 * @see pictureInPictureSupported*/
@property (nonatomic, readwrite) BOOL pictureInPictureEnabled;

/**
 * PictureInPicture(PIP) skip버튼 비활성화 여부
 * @note
 * deafalut: NO
 * forward, backward skip 활성화 비활성화 가능
 * ios 14.0 이상만 지원 */
@property (nonatomic, readwrite) BOOL pictureInPictureSkipDisabled API_AVAILABLE(ios(14.0), macos(11.0), tvos(14.0)) API_UNAVAILABLE(watchos);

/**
 * 디바이스 PictureInPicture(PIP)  지원 여부
 * @note
 * 기본 플레이어만 지원 */
@property (nonatomic, readonly, getter=isPictureInPictureSupported) BOOL pictureInPictureSupported;

/**
 * PictureInPicture(PIP) 활성화 여부
 * @note
 * 기본 플레이어만 지원 */
@property (nonatomic, readonly, getter=isPictureInPictureActive) BOOL pictureInPictureActive;

/**
 * PictureInPicture(PIP) 현재 사용 가능 여부
 * @note
 * 기본 플레이어만 지원 */
@property (nonatomic, readonly, getter=isPictureInPicturePossible) BOOL pictureInPicturePossible;

/**
 * PictureInPicture(PIP) 시작
 * @note
 * 기본 플레이어만 지원 */
- (void)startPictureInPicture;

/**
 * PictureInPicture(PIP) 중지
 * @note
 * 기본 플레이어만 지원 */
- (void)stopPictureInPicture;

/**
 * PIP start stop toggle
 * @note
 * 기본 플레이어만 지원 */
- (void)toggleStartStopPictureInPicture;

/**
 * PIP에 StarplayerSubtitleView 설정
 * @note
 * StarplayerSubtitleView를 추가하면 PIP에 자막 표시 가능
 * 기본 플레이어만 지원
 */
-(void)setupSubtitleViewInPIP:(UIView *_Nullable)subtitleView;

#pragma mark - 비디오 줌인&줌아웃
/**
 * 비디오 Zoom 활성화 여부
 * @note
 * UIPinchGestureRecognizer에 starPlayerHandlePinch: 를 연동해줘야 기능을 사용할 수 있음
 */
//@property (nonatomic, readwrite) BOOL videoZoomEnabled;

/**
 * Zoom 최대 scale 값 (default:5.0)
 * @note
 * 1미만의 값은 설정할 수 없음
 */
//@property (nonatomic, readwrite) double videoZoomMaxScale;

/**
 * Zoom 상태의 비디오 layer 초기화
 * @note
 *  1.scale 1상태로 초기화
 *  2.이동된 layer 원복
 */
//- (void)resetZoomedVideoLayer;

#pragma mark - player gesture (드래그, 비디오 줌인&줌아웃)
/**
 * 플레이어 Pan gesture selector
 * 화면 드래그 상태 delegate 호출
 * @see starPlayerView:screenDragState:draggingValueChanged: */
- (IBAction)starPlayerHandlePan:(UIPanGestureRecognizer *_Nullable)panGestureRecognizer;
/**
 * 플레이어 Pinch gesture selector
 * 화면 핀치 상태 delegate 호출
 * @see 추가 예정*/
- (IBAction)starPlayerHandlePinch:(UIPinchGestureRecognizer *_Nullable)pinchGestureRecognizer;

#pragma mark - 학습이력 Event
/**
 * playing_content(Event) 전송 interval
 * @note
 * 단위 : sec
 * default : 180초
 * 플레이어가 재생중 일 때만 이벤트 스케줄러가 동작
 * 플레이어가 중지 상태(PlayerStateStopped) 일 때 변경 가능
 * @see eventEnabled */
@property (nonatomic, readwrite) uint16_t eventPlayingContentInterval;

/**
 * 플레이어 학습이력 이벤트 전송 활성화 여부
 * @note
 * 학습이력 이벤트(begin_content, playing_content, end_content)
 * begin_content : 컨텐츠 재생 준비 완료 됐을 때 전송 (PlayerStateReadyToPlay)
 * playing_content : 일시정지(PlayerStatePause), 배속 변경, 재생중(eventPlayingContentInterval 주기)  전송
 * end_content : 컨텐츠 재생 정지 또는 완료시 전송 (PlayerStateStop)
 *
 * 플레이어가 중지 상태(PlayerStateStopped) 일 때 변경 가능
 * @see eventPlayingContentInterval  */
@property (nonatomic, readwrite) BOOL eventEnabled;

/**
 * 미전송 데이터 개수 조회
 * @note 플레이어가 재생 준비가 되었을 경우 작동 (OpenStateReady) */
- (int)selectMissedEventDataCount;

/**
 * 미전송 이벤트 데이터 전체 삭제
 * @note
 * 미전송 데이터가 전송이 안되고 많이 쌓여 있을 경우 부하가 발생할 수 있으므로 삭제할 수 있는 함수 제공
 * 플레이어가 재생 준비가 되었을 경우 동작 (OpenStateReady) */
- (void)deleteAllMissedEventData;

@end

Swift

class StarPlayerView

Undocumented

player

  • Undocumented

    Declaration

    Objective-C

    @property (nonatomic, weak, nullable) id<StarPlayerViewDelegate> delegate

    Swift

    weak var delegate: StarPlayerViewDelegate? { get set }
  • Undocumented

    Declaration

    Objective-C

    @property (nonatomic, readonly) StarPlayerOpenState openState

    Swift

    var openState: StarPlayerOpenState { get }
  • Undocumented

    Declaration

    Objective-C

    @property (nonatomic, readonly) StarPlayerPlayState playState

    Swift

    var playState: StarPlayerPlayState { get }
  • 비디오 layer

    Note

    비디오 영상이 출력되는 layer PlayerStateReadyToPlay 상태 이후에 값이 셋팅됨

    Declaration

    Objective-C

    @property (nonatomic, readonly) int *_Nullable videoLayer;

    Swift

    var videoLayer: UnsafeMutablePointer<Int32>? { get }
  • 플레이어 재생 가능 시간 @note 단위 : sec, millisec

    See

    millisecModeEnabled

    Declaration

    Objective-C

    @property (nonatomic, readonly) NSTimeInterval playerDuration;

    Swift

    var playerDuration: TimeInterval { get }
  • 플레이어 현재 재생 시간 @note 단위 : sec, millisec

    See

    millisecModeEnabled

    Declaration

    Objective-C

    @property (nonatomic, readonly) NSTimeInterval playerCurrentTime;

    Swift

    var playerCurrentTime: TimeInterval { get }
  • 플레이어 배속 설정 @note 범위 : 0.5이상 ~ 2이하 PlayerStatePlaying 상태에서만 배속 설정 가능 eventEnabled이 true일 경우 playing_content 이벤트 전송 (배속 정보 전송)

    See

    eventEnabled

    Declaration

    Objective-C

    @property (nonatomic) CGFloat rate;

    Swift

    var rate: Double { get set }
  • 플레이어 재생 여부

    Declaration

    Objective-C

    @property (nonatomic, readonly) BOOL isPlaying;

    Swift

    var isPlaying: Bool { get }
  • 플레이어 버퍼링 여부

    Declaration

    Objective-C

    @property (nonatomic, readonly) BOOL isBuffering;

    Swift

    var isBuffering: Bool { get }
  • 기본 플레이어 사용여부 @note 플레이어가 중지 상태(PlayerStateStopped) 일 때 변경 가능 true 인 경우 : currentAudioDelay 사용불가 false 인 경우 : captureFrameWithTime 사용불가

    See

    captureFrameWithTime

    See

    currentAudioDelay

    Declaration

    Objective-C

    @property (nonatomic) BOOL basicPlayerEnabled;

    Swift

    var basicPlayerEnabled: Bool { get set }
  • 낮은 대기 시간 사용 여부(서브플레이어 전용) @note 버퍼를 가져오는 시간이 짧아 스트리밍 로딩 속도 향상 단, 네트워크 상태가 불안정할 경우 끊김 현상이 발생하여 스트리밍 안정성에 문제가 발생할 수 있음 (해당 옵션 사용시 LTE 이상 네트워크 속도 권장)

    playState가 StatePlayerStateStarting 이상이면 플레이어 reload

    See

    basicPlayerEnabled

    Declaration

    Objective-C

    @property (nonatomic) BOOL lowLatancyEnabled;

    Swift

    var lowLatancyEnabled: Bool { get set }
  • 오디오 지연시간 (millisec) @note 오디오 싱크가 맞지 않을 때 사용 기본 플레이어는 지원하지 않음

    See

    basicPlayerEnabled

    Declaration

    Objective-C

    @property (nonatomic) NSInteger currentAudioDelay;

    Swift

    var currentAudioDelay: Int { get set }
  • 누적 시청 시간 @note 단위 : millisec 동영상 PlayerDuration을 초과할 수 없음 Event 시간 계산에 사용 (play_time, play_time2)

    Declaration

    Objective-C

    @property (nonatomic, readonly) NSUInteger watchedPlayTime;

    Swift

    var watchedPlayTime: UInt { get }
  • 플레이어 볼륨크기 (범위 0~1)

    Declaration

    Objective-C

    @property (nonatomic, readonly) CGFloat outputVolume;

    Swift

    var outputVolume: Double { get }
  • 플레이어 화면 종횡비 설정 @note 원본화면, 꽉찬화면, 16:9화면, 4:3화면

    Declaration

    Objective-C

    @property (nonatomic) StarPlayerAspectRatio aspectRatio;

    Swift

    var aspectRatio: StarPlayerAspectRatio { get set }
  • 밀리 세컨드 모드 활성화 여부 @note 플레이어가 millisec 단위로 동작 (기본 설정은 sec) 플레이어가 중지 상태(PlayerStateStopped) 일 때 변경 가능

    Declaration

    Objective-C

    @property (nonatomic) BOOL millisecModeEnabled;

    Swift

    var millisecModeEnabled: Bool { get set }
  • 플레이어 백그라운드 재생 활성화 여부 @note pictureInPictureEnabled가 true이면 backgroundPlaybackEnabled는 true 변경됨 (pip가 활성화 되면 백그라운드 재생 자동 활성화)

    See

    pictureInPictureEnabled

    Declaration

    Objective-C

    @property (nonatomic) BOOL backgroundPlaybackEnabled;

    Swift

    var backgroundPlaybackEnabled: Bool { get set }
  • 미러링 & 화면 캡쳐 차단 여부 @note 플레이어가 중지 상태(PlayerStateStopped) 일 때 변경 가능

    Declaration

    Objective-C

    @property (nonatomic) BOOL mirroringGuardEnabled;

    Swift

    var mirroringGuardEnabled: Bool { get set }
  • 플레이어 전용 워터마크 활성화 여부

    Declaration

    Objective-C

    @property (nonatomic) BOOL watermarkEnabled;

    Swift

    var watermarkEnabled: Bool { get set }
  • 플레이어 Audio 전용 Equalizer Animation (mp3 전용) 활성화 여부

    Declaration

    Objective-C

    @property (nonatomic) BOOL mP3EqualizerAnimationEnabled;

    Swift

    var mP3EqualizerAnimationEnabled: Bool { get set }
  • 플레이어 구간 반복 모드 활성화

    Declaration

    Objective-C

    @property (nonatomic) BOOL rangeRepeatEnabled;

    Swift

    var rangeRepeatEnabled: Bool { get set }
  • 플레이어 구간 반복 자동 활성화 @note 구간 반복 자동 재생 false : 구간 끝에 도달시 pause됨

    Declaration

    Objective-C

    @property (nonatomic) BOOL rangeRepeatAutoPlayEnabled;

    Swift

    var rangeRepeatAutoPlayEnabled: Bool { get set }
  • 구간반복 최소 시간

    Declaration

    Objective-C

    @property (nonatomic) NSUInteger rangeRepeatMinTime;

    Swift

    var rangeRepeatMinTime: UInt { get set }
  • 구간반복 최대 시간

    Declaration

    Objective-C

    @property (nonatomic) NSUInteger rangeRepeatMaxTime;

    Swift

    var rangeRepeatMaxTime: UInt { get set }
  • 플레이어 구간 반복 모드 Min, Max 시간 설정

    Declaration

    Objective-C

    - (void)setRangeRepeatMinTime:(NSUInteger)minTime maxTime:(NSUInteger)maxTime;

    Swift

    func setRangeRepeatMinTime(_ minTime: UInt, maxTime: UInt)

    Parameters

    minTime

    최소 시간

    maxTime

    최대 시간

  • 플레이어 open @note 플레이어 실행에 필요한 준비작업 (라이센스 검증 등) 기존에 라이센스 인증을 완료한 상태라면 다운로드된 미디어 파일은 오프라인에서도 재생가능 (스트리밍 재생은 해당x) 온라인 상태에서는 서버에 라이센스 인증을 요청하여 상태를 갱신함 StarPlayerLicense class의 authTheLicenseAtServer 호출의 선행 없이도 해당 함수의 호출로 플레이어 재생 가능

    라이센스 검증 실패 : 에러 발생 (playerEventOccurred) 라이센스 검증 성공 : OpenStateIdle -> OpenStateReady 상태 변경

    See

    starPlayerView:playerEventOccurred:withEventMethod:

    See

    StarPlayerError

    Declaration

    Objective-C

    - (void)open:(NSString *_Nonnull)license;

    Swift

    func open(_ license: String)

    Parameters

    license

    라이센스 코드

  • 플레이어 재생에 필요한 StarPlayerContentModel 을 설정 @note OpenStateReady & PlayerStateStopped 상태일 때 변경 가능

    Declaration

    Objective-C

    - (void)setPlayerContentModel:(StarPlayerContentModel *_Nonnull)content;

    Swift

    func setPlayerContentModel(_ content: StarPlayerContentModel)

    Parameters

    content

    플레이어 재생 정보

  • 플레이어 자원 할당 해제 @note 플레이어의 자원 해제

    • viewWillDisappear, viewDidDisappear에서 해당 함수를 호출할 경우 자원 해제가 안될 수 있음, 반드시 플레이어 자원 해제 완료후 ViewController dissmiss 호출을 권장

    자원 할당 해제 플로우

    • playState > PlayerStateStopped : stop(영상 정지) -> 이벤트 전송(EndContnet) -> scms 전송(disconnect) -> 자원 해제 -> completion 호출
    • playState == PlayerStateStopped : 자원 해제 -> completion 호출

    자원 할당 해제 타임아웃 -> 2 sec

    • 이벤트 또는 scms 전송 지연 고려
    • 전송이 지연될 경우 타임아웃 처리(데이터 소실될 수 있음)

    Declaration

    Objective-C

    - (void)free:(void (^_Nullable)(void))completion;

    Swift

    func free() async

    Parameters

    completion

    완료 블록

  • 플레이어 재생 @note eventEnabled ‘true'이고 PlayerStateReadyToPlay 상태이면 begin_content 이벤트 전송

    See

    eventEnabled

    Declaration

    Objective-C

    - (void)play;

    Swift

    func play()
  • 플레이어 일시정지 @note eventEnabled ‘true'일 경우 playing_content 이벤트 전송

    See

    eventEnabled

    Declaration

    Objective-C

    - (void)pause;

    Swift

    func pause()
  • 플레이어 중지 @note eventEnabled ‘true'일 경우 end_content 이벤트 전송

    See

    eventEnabled

    Declaration

    Objective-C

    - (void)stop;

    Swift

    func stop()
  • 뒤로가기 (seek to left) @note 단위 : sec, millisec

    See

    millisecModeEnabled

    Declaration

    Objective-C

    - (void)backward:(NSUInteger)skipTime
          completion:(void (^_Nullable)(BOOL, BOOL))completion;

    Swift

    func backward(_ skipTime: UInt) async -> (Bool, Bool)

    Parameters

    skipTime

    건너뛸 시간

    completion

    완료 콜백

  • 앞으로가기 (seek to right) @note 단위 : sec, millisec

    See

    millisecModeEnabled

    Declaration

    Objective-C

    - (void)forward:(NSUInteger)skipTime
         completion:(void (^_Nullable)(BOOL, BOOL))completion;

    Swift

    func forward(_ skipTime: UInt) async -> (Bool, Bool)

    Parameters

    skipTime

    건너뛸 시간

    completion

    완료 콜백

  • 플레이어 시간 이동 @note 단위 : sec, millisec

    See

    millisecModeEnabled

    Declaration

    Objective-C

    - (void)seekToTime:(NSUInteger)seekTime
            completion:(void (^_Nullable)(BOOL, BOOL))completion;

    Swift

    func seek(toTime seekTime: UInt) async -> (Bool, Bool)

    Parameters

    seekTime

    건너뛸 시간

    completion

    완료 콜백

  • 동영상 현재 프레임 이미지 추출 (비트맵) @note 기본 플레이어 전용 라이브스트리밍 : 추출 가능 default : 480x320

    See

    basicPlayerEnabled

    Declaration

    Objective-C

    - (void)captureCurrentFrame:(CGSize)size
                     completion:(void (^_Nullable)(int))completion;

    Swift

    func captureCurrentFrame(_ size: CGSize) async -> Int32

    Parameters

    size

    썸네일 추출 크기(width, height)

    completion

    완료콜백(썸네일 이미지 반환)

  • 동영상 프레임 이미지 추출 (비트맵) @note 스트리밍 : 버퍼 데이터가 있을 경우만 썸네일 추출가능 (현재 재생위치의 썸네일 추출 권장) 라이브스트리밍 : 추출 불가 default : 480x320

    See

    millisecModeEnabled

    Declaration

    Objective-C

    - (void)captureFrameWithTime:(NSUInteger)time
                            size:(CGSize)size
                      completion:(void (^_Nullable)(int))completion;

    Swift

    func captureFrame(withTime time: UInt, size: CGSize) async -> Int32

    Parameters

    time

    영상 추출 시간 (sec, millisec)

    size

    썸네일 추출 크기(width, height)

    completion

    완료콜백(썸네일 이미지 반환)

HLS (기본 플레이어만 지원)

  • Undocumented

    Declaration

    Objective-C

    @property (nonatomic, readonly) NSArray<StarPlayerHLSStream*>* _Nonnull hlsStreamList

    Swift

    var hlsStreamList: [StarPlayerHLSStream] { get }
  • HLS MasterPlaylist stream 중에서 하나의 stream만 선택하여 영상 재생 @note Stream은 MasterPlaylist에서 #EXT-X-STREAM-INF 태그에 해당함

    Declaration

    Objective-C

    - (void)selectHLSVideoStream:(StarPlayerHLSStream *_Nonnull)stream;

    Swift

    func selectHLSVideoStream(_ stream: StarPlayerHLSStream)

    Parameters

    stream

    선택하여 재생할 stream

  • HLS MasterPlaylist Alternative Media중에 하나의 Media를 선택하여 비디오 또는 Audio를 변경 @note Media의 종류는 Audio, Video 두가지가 존재 Media는 MasterPlaylist에서 #EXT-X-MEDIA 태그에 해당함

    Declaration

    Objective-C

    - (void)selectHLSAlternativeMedia:
        (StarPlayerHLSAlternativeMedia *_Nonnull)media;

    Swift

    func select(_ media: StarPlayerHLSAlternativeMedia)
  • HLS 영상 ‘자동’ 모드 활성화 @note xStream list가 2개 이상 존재하면 자동 모드 활성화

    Declaration

    Objective-C

    - (BOOL)activateHlsAutoStream;

    Swift

    func activateHlsAutoStream() -> Bool

    Return Value

    활성화 성공 여부 (이미 활성화 되어 있거나 활성화 할 수 없는 환경이면 return ‘NO’)

  • HLS 오디오 ‘기본’ 모드 활성화 @note 선택된 오디오를 초기 상태로 원복

    Declaration

    Objective-C

    - (BOOL)activateHlsDefaultAlternativeAudio;

    Swift

    func activateHlsDefaultAlternativeAudio() -> Bool

    Return Value

    활성화 성공 여부 (이미 활성화 되어 있거나 활성화 할 수 없는 환경이면 return ‘NO’)

StarPlayer PIP (기본 플레이어만 지원)

  • PictureInPicture(PIP) 활성화 여부 @note default : NO pictureInPictureEnabled가 true이면 backgroundPlaybackEnabled는 true 변경됨 (pip가 활성화 되면 백그라운드 재생 자동 활성화) 기본 플레이어 및 지원되는 기기에 한해서만 (pictureInPictureSupported)

    See

    backgroundPlaybackEnabled

    See

    pictureInPictureSupported

    Declaration

    Objective-C

    @property (nonatomic) BOOL pictureInPictureEnabled;

    Swift

    var pictureInPictureEnabled: Bool { get set }
  • PictureInPicture(PIP) skip버튼 비활성화 여부 @note deafalut: NO forward, backward skip 활성화 비활성화 가능 ios 14.0 이상만 지원

    Declaration

    Objective-C

    @property (nonatomic) BOOL pictureInPictureSkipDisabled;

    Swift

    var pictureInPictureSkipDisabled: Bool { get set }
  • 디바이스 PictureInPicture(PIP) 지원 여부 @note 기본 플레이어만 지원

    Declaration

    Objective-C

    @property (nonatomic, readonly, getter=isPictureInPictureSupported) BOOL pictureInPictureSupported;

    Swift

    var isPictureInPictureSupported: Bool { get }
  • PictureInPicture(PIP) 활성화 여부 @note 기본 플레이어만 지원

    Declaration

    Objective-C

    @property (nonatomic, readonly, getter=isPictureInPictureActive) BOOL pictureInPictureActive;

    Swift

    var isPictureInPictureActive: Bool { get }
  • PictureInPicture(PIP) 현재 사용 가능 여부 @note 기본 플레이어만 지원

    Declaration

    Objective-C

    @property (nonatomic, readonly, getter=isPictureInPicturePossible) BOOL pictureInPicturePossible;

    Swift

    var isPictureInPicturePossible: Bool { get }
  • PictureInPicture(PIP) 시작 @note 기본 플레이어만 지원

    Declaration

    Objective-C

    - (void)startPictureInPicture;

    Swift

    func startPictureInPicture()
  • PictureInPicture(PIP) 중지 @note 기본 플레이어만 지원

    Declaration

    Objective-C

    - (void)stopPictureInPicture;

    Swift

    func stopPictureInPicture()
  • PIP start stop toggle @note 기본 플레이어만 지원

    Declaration

    Objective-C

    - (void)toggleStartStopPictureInPicture;

    Swift

    func toggleStartStopPictureInPicture()
  • PIP에 StarplayerSubtitleView 설정 @note StarplayerSubtitleView를 추가하면 PIP에 자막 표시 가능 기본 플레이어만 지원

    Declaration

    Objective-C

    - (void)setupSubtitleViewInPIP:(id)subtitleView;

    Swift

    func setupSubtitleView(inPIP subtitleView: Any!)

player gesture (드래그, 비디오 줌인&줌아웃)

  • 플레이어 Pan gesture selector 화면 드래그 상태 delegate 호출

    See

    starPlayerView:screenDragState:draggingValueChanged:

    Declaration

    Objective-C

    - (void)starPlayerHandlePan:(id)panGestureRecognizer;

    Swift

    @IBAction func starPlayerHandlePan(_ panGestureRecognizer: Any!)
  • 플레이어 Pinch gesture selector 화면 핀치 상태 delegate 호출

    See

    추가 예정

    Declaration

    Objective-C

    - (void)starPlayerHandlePinch:(id)pinchGestureRecognizer;

    Swift

    @IBAction func starPlayerHandlePinch(_ pinchGestureRecognizer: Any!)

학습이력 Event

  • playing_content(Event) 전송 interval @note 단위 : sec default : 180초 플레이어가 재생중 일 때만 이벤트 스케줄러가 동작 플레이어가 중지 상태(PlayerStateStopped) 일 때 변경 가능

    See

    eventEnabled

    Declaration

    Objective-C

    @property (nonatomic) uint16_t eventPlayingContentInterval;

    Swift

    var eventPlayingContentInterval: UInt16 { get set }
  • 플레이어 학습이력 이벤트 전송 활성화 여부 @note 학습이력 이벤트(begin_content, playing_content, end_content) begin_content : 컨텐츠 재생 준비 완료 됐을 때 전송 (PlayerStateReadyToPlay) playing_content : 일시정지(PlayerStatePause), 배속 변경, 재생중(eventPlayingContentInterval 주기) 전송 end_content : 컨텐츠 재생 정지 또는 완료시 전송 (PlayerStateStop)

    플레이어가 중지 상태(PlayerStateStopped) 일 때 변경 가능

    See

    eventPlayingContentInterval

    Declaration

    Objective-C

    @property (nonatomic) BOOL eventEnabled;

    Swift

    var eventEnabled: Bool { get set }
  • 미전송 데이터 개수 조회

    Note

    플레이어가 재생 준비가 되었을 경우 작동 (OpenStateReady)

    Declaration

    Objective-C

    - (int)selectMissedEventDataCount;

    Swift

    func selectMissedEventDataCount() -> Int32
  • 미전송 이벤트 데이터 전체 삭제 @note 미전송 데이터가 전송이 안되고 많이 쌓여 있을 경우 부하가 발생할 수 있으므로 삭제할 수 있는 함수 제공 플레이어가 재생 준비가 되었을 경우 동작 (OpenStateReady)

    Declaration

    Objective-C

    - (void)deleteAllMissedEventData;

    Swift

    func deleteAllMissedEventData()