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

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

Установка

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

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

import React from 'react'
import KinescopePlayer from '@kinescope/react-kinescope-player'

function Player() {
  return <KinescopePlayer videoId="VIDEO_ID" />
}

export default Player

События

function onTimeUpdate({ currentTime }) {
  console.log(currentTime)
}

<KinescopePlayer videoId="VIDEO_ID" onTimeUpdate={onTimeUpdate} />

Методы

Через ref:

const playerRef = React.createRef()

function handleMuteClick() {
  playerRef.current.mute()
}

<>
  <KinescopePlayer ref={playerRef} videoId="VIDEO_ID" />
  <button onClick={handleMuteClick}>Mute</button>
</>

Next.js

Компонент использует браузерные API — отключите SSR:

import dynamic from 'next/dynamic'

const KinescopePlayer = dynamic(
  () => import('@kinescope/react-kinescope-player'),
  { ssr: false }
)

export default function Player() {
  return <KinescopePlayer videoId="VIDEO_ID" />
}

Props

PropТипПо умолчаниюОбязательный
videoIdstring | string[]да
classNamestringнет
queryQueryнет
styleanyнет
preloadboolean | 'none' | 'metadata' | 'auto'falseнет
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нет
textTrackboolean | stringtrueнет
externalIdstringнет
drmAuthTokenstringнет
callToActionCallToAction[]нет
bookmarksBookmark[]нет
watermarkWatermarkнет
playlistOptionsPlaylistOptionsнет
themeThemeнет
localStorageLocalStoragetrueнет

Типы props

Chapter

type Chapter = {
  position: number
  title: string
}

Query

type Query = {
  seek?: number
  duration?: number
  playerId?: string
}

LocalStorage

type LocalStorage =
  | boolean
  | {
      quality?: 'item' | 'global' | boolean
      time?: boolean
      textTrack?: 'item' | 'global' | boolean
    }

Vtt

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

CallToAction

type CallToAction = {
  id: string
  title: string
  description?: string
  skipable?: boolean
  buttonStyle?: object
  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 }
    }

PlaylistOptions

type PlaylistOptions = {
  autoSwitch?: boolean
  initialItem?: string
  loop?: boolean
}

Theme

type Theme = {
  subtitles?: {
    /** Базовый размер шрифта в em. */
    textScale: number
    textAlign: 'left' | 'center'
    textLength: 'auto' | number
  }
}

События

СобытиеДанные
onJSLoad
onJSLoadError
onInit{ playerId: string }
onInitErrorError
onReady{ currentTime, duration, quality }
onQualityChanged{ quality }
onCurrentTrackChanged{ item: { id?: string } }
onSeekChapter{ position: number }
onSizeChanged{ width, height }
onPlay
onPlaying
onWaiting
onPause
onEnded
onTimeUpdate{ currentTime: number }
onProgress{ bufferedTime: number }
onDurationChange{ duration: number }
onVolumeChange{ muted, volume }
onPlaybackRateChange{ playbackRate: number }
onSeeked
onFullscreenChange{ isFullscreen, video }
onPipChange{ isPip: boolean }
onCallAction{ id, title?, type }
onCallBookmark{ id, time, title? }
onError{ error: unknown }
onDestroy

Методы

Вызов через ref (например playerRef.current.play()).

МетодПараметрыРезультат
isPausedPromise<boolean>
isEndedPromise<boolean>
playPromise<void>
pausePromise<void>
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[]>
getVideoQualityPromise<VideoQuality>
setVideoQuality(quality: VideoQuality)Promise<void>
enableTextTrack(lang: string)Promise<void>
disableTextTrackPromise<void>
closeCTAPromise<void>
isFullscreenPromise<boolean>
setFullscreen(fullscreen: boolean)Promise<void>
isPipPromise<boolean>
setPip(pip: boolean)Promise<void>
getPlaylistItemPromise<{ id?: string } | undefined>
switchTo(id: string)Promise<void>
nextPromise<void>
previousPromise<void>

Полный список методов IFrame API — в Управлении плеером .

Что дальше?