JavaScript React SDK
Integrations of Ziggeo's Video JavaScript SDK with React
Ziggeo's React JS SDK is the ultimate video recording/playback SDK out there for React.
Ziggeo's React JavaScript SDK is managed publicly on GitHub here.
You can find a demo application on GitHub as well.
Documentation
For older versions which are not supporting hooks (react version < 16.8.0) please use versions react-ziggeo older versions 4.0.0.
We have a demo project here for you to clone.
Upgrade Ziggeo SDK
This package build based only on stable version of Ziggeo-JS-SDK, but you can easily upgrade to the latest Ziggeo SDK version. Steps require to do:
- Edit root
package.jsonfile by upgrading to the latest version ofziggeo-client-sdk(Ziggeo JS SDK Github Url); - Run
npm installornpm update(yarn installif you're using Yarn) to install/update packages; - Run
npm run buildcommand to re-build package; - Optional step. To install package in your own local project, after you complete steps above you can run
npm packwhich will generate a new package in the root folder with the.tgzextension. Then in your own project you can replacereact-ziggeopackage number with path to the generated pack. For example instead ofreact-ziggeo: "4.x.x"you can usereact-ziggeo: "path_to_the/package/react-ziggeo-version_number.tgz"
Video Recorder
import React from 'react'
import {ZiggeoRecorder} from 'react-ziggeo'
...
// after react-ziggeo 4.0.0 version hooks are applied, but class Component also supportis
// Correct way to access to recorder/player instance is:
const [recorder, setRecorder] = useState(null);
useEffect(() => {
if (recorder) {
// DO stuff here
recorder.on("any_event", function (rec) { ... }, recorder);
recorder.get("attribute_name");
}
}, [recorder]);
// Embedding (player/recorder instance) will be the first argument
const handleRecorderRecording = (embedding) => {
console.log('Recorder onRecording');
};
const handleRecorderUploading = (embedding) => {
console.log('Recorder uploading');
};
...
<ZiggeoRecorder
apiKey={API_KEY}
video={VIDEO_TOKEN}
height={180}
width={320}
onRecording={handleRecorderRecording}
onUploading={handleRecorderUploading}
onRef={ref => (setRecorder(ref))}
/>
...
Available event listeners for Recorder
- onPlaying
- onPaused
- onAttached
- onLoaded
- onEnded
- onSeek
- onError
- onManuallySubmitted
- onUploaded
- onUploadSelected
- onRecording
- onUploading
- onRerecord
- onCountdown
- onProcessing
- onProcessed
- onRecordingProgress
- onUploadProgress
- onAccessForbidden
- onAccessGranted
- onCameraUnresponsive
- onVerified
- onNoCamera
- onNoMicrophone
- onRef
Recorder option Screen Recorder
Screen Capture is currently supported by Firefox, Chrome and Opera.
- Firefox: Direct support -- no extensions or plugins required
- Chrome + Opera: use extension builder located in your application manager
Note: By default Ziggeo Chrome/Opera extension will be set. For more info, in this url you also can find how to set your own extensions
<ZiggeoRecorder
apiKey={API_KEY}
allowscreen={true}
allowrecord={false} // Optional you can even set it to true
allowupload={false} // Optional you can even set it to true
// starting from version 3.6.1 extensions no more required
chrome_extension_id={YOUR_CHROME_EXTENSION_ID}
chrome_extension_install_link={YOUR_CHROME_EXTENSION_INSTALLATION_LINK}
opera_extension_id={YOUR_OPERA_EXTENSION_ID}
opera_extension_install_link={YOUR_OPERA_EXTENSION_INSTALLATION_LINK}
...
/>
Video Player
import React from 'react'
import {ZiggeoPlayer} from 'react-ziggeo'
...
const [player, setPlayer] = useState(null);
useEffect(() => {
if (player) {
// DO stuff here
player.on("attached", function (embedding) {}, player);
}
}, [player]);
...
const phandlePlaying = (embedding) => {
console.log('it\'s playing, your action here');
};
const phandlePaused = (embedding) => {
console.log('it\'s paused, your action when pause');
};
...
<ZiggeoPlayer
apiKey={'your api key provided by ziggeo'}
video={'Video Token'}
theme={'modern'}
themecolor={'red'}
skipinitial={false}
onPlaying={handlePlaying}
onPaused={handlePaused}
onRef={ref => (setPlayer(ref))}
...
/>
...
Available events listeners for Player
- onPlaying
- onPaused
- onAttached
- onLoaded
- onEnded
- onError
- onSeek
- onRef
Extensions
Get Recorder Instance and invoke methods
Add attribute onRef={ref => (this.child = ref)} to obtain access to recorder instances and their methods.
<ZiggeoRecorder
apiKey={apiToken}
onRef={ref => (this.child = ref)}
// With Hooks: onRef={ref => (setRecorder(ref))}
/>
Get Player Instance and invoke methods
Add attribute onRef={ref => (this.child = ref)} to obtain access to player instances and their methods.
<ZiggeoPlayer
apiKey={apiToken}
video={videoToken}
onRef={ref => (this.child = ref)}
// With Hooks: onRef={ref => (setPlayer(ref))}
/>
Adding Localization
locale={'locale_short_code'}
Or you can change any text with your locale:
mediaLocales={[
{
register: {"ba-videorecorder-chooser.record-video": "Rec"}, // Any object you want to touch
priority: 10 // Optional, default is 10.
},
]}
Trigger Instance Update
below example use the recorder, but the same is true also for the player
const [recorder, setRecorder] = useState(null);
const [updateInstance, setUpdateInstance] = useState(false);
// Whenever you want to get a new instance of Ziggeo recorder, after any changes you made
// Use as a loading approach when complete with getting new instanse set updateInstance as false, setUpdateInstance(false)
useEffect(() => {
if (recorder) {
// Should be a new instance
setUpdateInstance(false);
}
}, [recorder]);
// You can handle getting with new instance
const handleSomeAction = () => {
if (recorder) {
// Whenever we will set as true, we will get a new recorder instance
setUpdateInstance(true);
}
}
//.....
<ZiggeoRecorder
{/* Your other settings */}
updateInstance={updateInstance}
onRef={e => setRecorder(e)}
onVerified={handleSomeAction}
/>
Component Options
preventReRenderOnUpdate={boolean} // default is true
Notes
By default, components prevent re-rendering the UI with the option preventReRenderOnUpdate, to overwrite this.
<ZiggeoRecorder
preventReRenderOnUpdate={false}
/>
Fix Safari Flash Player
In case is you have error with launching recorder in Safari please add settings below: webrtc_streaming_if_necessary={true}
Additional Parameters
React SDK supports all of the following events and parameters:
Changelog:
- v4.3.3 Downgraded to Ziggeo stable revision
~2.35.22, nothing very serious changes are made on the latest version. - v4.3.1 added
_keysupport; Upgraded ziggeo-client SDK to~2.36.5fixed bugs. - v4.3.0 Upgraded ziggeo-client SDK to
~2.36.3fixed bugs. - v4.2.0 Upgraded ziggeo-client SDK to
~2.35.20fixed bugs, added new Ziggeo featuresselectfirstcovershotonskip,picksnapshotmandatoryandupdateInstanceprop. Use Example - v4.1.0 Upgraded ziggeo-client SDK to
~2.35.18fixed bugs, addedmediaLocalesprop type to set any locale. Newfittodimensions&fullscreenmandatoryfeatures included. - v4.0.0 Upgraded ziggeo-client SDK to
~2.35.4fixed bugs, added more new featuresmultistreamwith options drag-and-drop and resize. In player now settings are manageable via methods. - v3.6.0 Upgraded ziggeo-client SDK to
~2.35.0fixed bugs, added more new featuresmultistreamwith options drag-and-drop and resize. In player now settings are manageable via methods. - v3.5.2 Upgraded ziggeo-client SDK to
~2.34.8fixed bugs. - v3.5.1 Upgraded ziggeo-client SDK to
~2.34.5with new features. Stream Merge ( Like: Screen + Camera), Pausable WebRTC Recorder, Thumbnail generation. - v3.4.0 Upgraded ziggeo-client SDK to
~2.33.0version, to fix only-audio bug - v3.3.0 Added
embeddingargument for each event Application-wide Embedding Events - v3.2.0 Upgraded ziggeo-client SDK to
2.32.7pre-release version, to fixFF >62TypeError: Argument 1 is not valid for any of the 1-argument overloads of URL.createObjectURL - v3.1.0 Added
ready_to_playembedding event to Player and made minor structure changes - v3.1.1 Fixed webpack/babel polyfill issue, 'Also fixed Identifier 'e' has already been declared' related bug
- v3.0.0 Upgraded to Ziggeo R31 stable version -- Added locale support. Example:
locale={'de'}-- Added auth supportauth={true}-- Added possibility to set outflashUrl={'flash-url'} - v2.5.1 babel was upgraded to version 7.*
- v2.4.1 added application option manageability
webrtc_on_mobile&webrtc_streaming_if_necessary, by default both arefalse - v2.4.0 added application option manageability
webrtc_streaming, by defaultfalse