Skip navigation
Updated: 12.08.2026
Open as Markdown

A component for embedding Kinescope Player in Angular. It uses an iframe and the IFrame API under the hood. Repository: kinescope/angular-kinescope-player .

Installation

npm install @kinescope/angular-kinescope-player --save

Quick start

import { KinescopePlayerComponent } from '@kinescope/angular-kinescope-player'

@NgModule({
  imports: [KinescopePlayerComponent],
})
export class AppModule {}
import { AfterViewInit, Component, ViewChild } from '@angular/core'
import {
  KinescopePlayerComponent,
  KinescopePlayerConfig,
} from '@kinescope/angular-kinescope-player'

@Component({
  template: `<kinescope-player #kinescope [config]="config"></kinescope-player>`,
})
export class PlayerComponent implements AfterViewInit {
  config: KinescopePlayerConfig = {
    videoId: 'VIDEO_ID',
  }

  @ViewChild('kinescope') private kinescope!: KinescopePlayerComponent

  ngAfterViewInit() {
    // Methods are available after the player is initialized.
    // void this.kinescope.play()
  }
}

Config (props)

Pass the parameters as an object to [config].

FieldTypeDefaultRequired
videoIdstringyes
classNamestringno
styleanyno
titlestringno
subtitlestringno
posterstringno
chaptersChapter[]no
vttVtt[]no
widthnumber | string100%no
heightnumber | string100%no
autoPlayboolean | 'viewable'falseno
autoPauseboolean | 'reset'trueno
loopbooleanfalseno
playsInlinebooleantrueno
mutedbooleanfalseno
language'en' | 'ru'autono
controlsbooleantrueno
mainPlayButtonbooleantrueno
playbackRateButtonbooleanfalseno
externalIdstringno
drmAuthTokenstringno
actionsAction[]no
bookmarksBookmark[]no
watermarkWatermarkno
localStoragebooleantrueno

Config types

Chapter

type Chapter = {
  position: number
  title: string
}

Vtt

type Vtt = {
  label: string
  src: string
  srcLang: string
}

Action

type Action = ActionToolBar | ActionCallToAction

type ActionToolBar = {
  id: string
  type: 'tool'
  title?: string
  icon: 'note'
}

type ActionCallToAction = {
  id: string
  type: 'cta'
  title: string
  description?: string
  skipable?: boolean
  buttonStyle?: CSSProperties
  trigger: {
    percentages: number[]
    timePoints: number[]
    pause: boolean
  }
}

Bookmark

type Bookmark = {
  id: string
  time: number
  title?: string
}

Watermark

type Watermark =
  | string
  | {
      text: string
      mode?: 'random' | 'stripes'
      scale?: number
      displayTimeout?: number | { visible: number; hidden: number }
    }

Events

EventData
onJSLoad
onJSLoadError
onReady{ currentTime, duration, quality, qualityLevels }
onQualityChanged{ quality }
onAutoQualityChanged{ quality }
onSeekChapter{ position }
onSizeChanged{ width, height }
onPlay
onPlaying
onWaiting
onPause
onEnded
onTimeUpdate{ currentTime }
onProgress{ bufferedTime }
onDurationChange{ duration }
onVolumeChange{ muted, volume }
onPlaybackRateChange{ playbackRate }
onSeeking
onFullscreenChange{ isFullscreen, video }
onCallAction{ id, title?, type }
onCallBookmark{ id, time, title? }
onError{ error }
onDestroy

Methods

Call methods through @ViewChild, for example, this.kinescope.play().

MethodParametersResult
isPausedPromise<boolean>
isEndedPromise<boolean>
playPromise<void>
pausePromise<boolean>
stopPromise<void>
getCurrentTimePromise<number>
getDurationPromise<number>
seekTo(time: number)Promise<void>
isMutedPromise<boolean>
mutePromise<void>
unmutePromise<void>
getVolumePromise<number>
setVolume(value: number)Promise<void>
getPlaybackRatePromise<number>
setPlaybackRate(value: number)Promise<void>
getVideoQualityListPromise<VideoQuality[]>
getCurrentVideoQualityPromise<VideoQuality>
setVideoQuality(quality: VideoQuality)Promise<void>
enableTextTrack(lang: string)Promise<void>
disableTextTrackPromise<void>
closeCTAPromise<void>
isFullscreenPromise<boolean>
setFullscreen(fullscreen: boolean)Promise<void>

Next steps