npm install @skywatch/react
or
yarn add @skywatch/react
Use Oauth 2.0 to get access token
Before you start developing, you have to implement Skywatch library on your server. Please follow the guide below to create a POST method url on your server, and then keep the POST method url you generated.
Ex. Implement Skywatch library on node server, and then generate the POST API - https://localhost:3000/skywatch_service_url
Skywatch Server Installation Guide
import React, {useState, useEffect} from 'react';
import {ArchivesPlayer, initialize} from '@skywatch/react';
const APP = () => {
const [player, setPlayer] = useState(null);
useEffect(() => {
initialize('/your_server_url_with_skywatch_library', 'token');
}, []);
const options = {
autoplay: true,
muted: true,
aspectRatio: '16:9',
mobileView: false,
};
return (
<ArchivesPlayer
onPlayerInit={setPlayer}
onPlayerDispose={setPlayer}
deviceId={'1234'}
archiveId={'123456'}
smart_ff={0}
seek={0}
playerOptions={options}
/>
);
};
This method is required before using any Skywatch API.
import Skywatch from '@skywatch/react';
Skywatch.initialize('/your_server_url_with_skywatch_library', 'token');
This is a component for playing archive video.
<ArchivesPlayer
onPlayerInit={}
onPlayerDispose={}
deviceId={}
archiveId={}
smart_ff={}
seek={}
playerOptions={}
style={}
controls={}
onTimeUpdate={}
onEnded={}
onReady={}
/>
Property | Type | Required | Default | Description |
---|---|---|---|---|
onPlayerInit |
function |
YES | Pass state into player to allow control of player. For more info please check Video.js doc. | |
onPlayerDispose |
Function |
YES | Pass state into player to dispose when video is released. | |
deviceId |
string |
YES | Decide on which camera is going to play. | |
archiveId |
string |
YES | Decide on which archive is going to play. | |
smart_ff |
number |
NO | 0 | 0 -> close, 1 -> open |
seek |
number |
NO | 0 | Jump to specific time when video begins to play. |
playerOptions |
object |
NO | { autoplay: true, muted: true, aspectRatio: '16:9', mobileView: false, } ; |
Video option setting. For more info please check Video.js doc. |
style |
inline-style |
NO | Custom style for video player. | |
controls |
bool |
NO | true |
Show video controls |
onTimeUpdate |
func |
NO | Callback fired when the current playback position has changed | |
onEnded |
func |
NO | Callback fired when the end of the media resource is reached | |
onReady |
func |
NO | Callback fired when the video is ready to play |
This is a component for playing live streaming.
<FlvPlayer
deviceId={}
onPlayerInit={}
onPlayerDispose={}
style={}
controls={}
onReady={}
/>
Property | Type | Required | Default | Description |
---|---|---|---|---|
deviceId |
string |
YES | Decide on which camera is going to play. | |
onPlayerInit |
function |
YES | Pass state into player to allow control of player. For more info please check flv.js doc. | |
onPlayerDispose |
function |
YES | Pass state into player to dispose when video is released. | |
style |
inline-style |
NO | Custom style for video player. | |
controls |
bool |
NO | true |
Show video controls |
onReady |
func |
NO | Callback fired when the video is ready to play |
This is a component for playing live streaming and archive video.
<CameraView deviceId={} renderLoading={} />
You need to import the CSS file to your JavaScript file
import '@skywatch/react/lib/style/camera-view.css';
If you want to overwrite the default style, you can use the browser dev tool to find out the id/class of the element, and create your own CSS file to overwrite it.
/* overwrite.css */
#controlbar_container {
background-color: burlywood;
}
.meta_timeline_i {
background-color: coral !important;
}
Then, import the overwrite.css
file
import '@skywatch/react/lib/style/camera-view.css';
import 'overwrite.css';
Methods to control the video are exposed by useImperativeHandle
hook.
To access these methods, you need to create your ref
and pass it to CameraView
component. Also, you have to disable the default controls.
Then you can use the exposed methods by the ref
. For example,
const APP = () => {
const cameraViewRef = useRef();
return (
<>
<CameraView deviceId={DEVICE_ID} controls={false} ref={cameraViewRef} />
<button onClick={() => cameraViewRef.current.play()}>play</button>
<button onClick={() => cameraViewRef.current.pause()}>pause</button>
</>
);
};
Method | Parameters | Returns | Description |
---|---|---|---|
play() |
none | none | Play the video. |
pause() |
none | none | Pause the current video. |
fastForward() |
none | none | Start fast forward mode. |
toggleMute() |
none | none | Mute or unmute the video. |
goLive() |
none | none | Start playing live video. |
seek(string) |
Number|String |
none | Play video at the provided unix timestamp. |
getAllArchives() |
none | array |
Get data of all archives. |
isLive() |
none | bool |
Check if the video is in live mode. |
Property | Type | Required | Default | Description |
---|---|---|---|---|
deviceId |
string |
YES | Decide on which camera is going to play. | |
renderLoading |
function |
NO | () => <div style={loadingStyle}></div> |
Function returns the loading element. |
controls |
bool |
NO | true |
If false , the default controls will not be used. |