Пропустить навигацию
Обновлено: 12.08.2026
Открыть как Markdown

Компонент для встраивания Kinescope Player в Angular. Под капотом — iframe и IFrame API . Репозиторий: kinescope/angular-kinescope-player .

Установка

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

Быстрый старт

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() {
    // методы доступны после инициализации плеера
    // void this.kinescope.play()
  }
}

Config (props)

Параметры передаются объектом в [config].

ПолеТипПо умолчаниюОбязательный
videoIdstringда
classNamestringнет
styleanyнет
titlestringнет
subtitlestringнет
posterstringнет
chaptersChapter[]нет
vttVtt[]нет
widthnumber | string100%нет
heightnumber | string100%нет
autoPlayboolean | 'viewable'falseнет
autoPauseboolean | 'reset'trueнет
loopbooleanfalseнет
playsInlinebooleantrueнет
mutedbooleanfalseнет
language'en' | 'ru'autoнет
controlsbooleantrueнет
mainPlayButtonbooleantrueнет
playbackRateButtonbooleanfalseнет
externalIdstringнет
drmAuthTokenstringнет
actionsAction[]нет
bookmarksBookmark[]нет
watermarkWatermarkнет
localStoragebooleantrueнет

Типы config

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 }
    }

События

СобытиеДанные
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

Методы

Вызов через @ViewChild (например this.kinescope.play()).

МетодПараметрыРезультат
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>

Что дальше?