UNPKG

@pdftron/webviewer-video

Version:

This is an addon for WebViewer that allows loading HTML5 videos (.mp4, ogg, webm) so that their video frames can be annotated.

212 lines (160 loc) 7.14 kB
# WebViewer Video [WebViewer](https://docs.apryse.com/documentation/web/guides/) is a powerful JavaScript-based Library that's part of the [PDFTron SDK](https://www.apryse.com). It allows you to view and annotate various file formats (PDF, MS Office, images, videos) on your web app with a fully customizable UI. This is an addon for WebViewer that allows loading HTML5 videos (.mp4, ogg, webm) so that their video frames can be annotated. For more information, see this [guide](https://docs.apryse.com/documentation/web/get-started/manually-video/). <!-- How to clear image cache: https://stackoverflow.com/questions/26898052/how-to-force-image-cache-update-in-readme-rst-on-github --> <img src="https://pdftron.s3.amazonaws.com/custom/websitefiles/wv-video.png" width="730"> Let me know how you are planning to use WebViewer Video or if you have any feedback on any feature missing. You can [email me](mailto:andrey@apryse.com) directly. ## Demo https://webviewer-video.web.app/ ## React Sample Try out the react sample [here](https://github.com/PDFTron/webviewer-video-sample). It shows how to integrate WebViewer and WebViewer-Video with a server component for the saving of annotations. ## Initial setup Before you begin, make sure your development environment includes [Node.js and npm](https://www.npmjs.com/get-npm). ## Install ``` npm install @pdftron/webviewer-video ``` ## How to use Here is an example of how WebViewer and WebViewer-video could be integrated into your application. ```javascript import React, { useRef, useEffect } from 'react'; import WebViewer from '@pdftron/webviewer'; import { initializeVideoViewer } from '@pdftron/webviewer-video'; const App = () => { const viewer = useRef(null); useEffect(() => { WebViewer( { path: '/webviewer/lib', selectAnnotationOnCreation: true, }, viewer.current, ).then(async instance => { const license = '---- Insert commercial license key here after purchase ----'; // Extends WebViewer to allow loading HTML5 videos (.mp4, ogg, webm). const { loadVideo, } = await initializeVideoViewer( instance, { license }, ); // Load a video at a specific url. Can be a local or public link // If local it needs to be relative to lib/ui/index.html. // Or at the root. (eg '/video.mp4') const videoUrl = 'https://pdftron.s3.amazonaws.com/downloads/pl/video/video.mp4'; loadVideo(videoUrl); }); }, []); return ( <div className="App"> <div className="webviewer" ref={viewer} /> </div> ); } export default App; ``` Also see the [React sample](https://github.com/PDFTron/webviewer-video-sample), for a complete solution, with further customizations. ### Loading as a Script Tag If your environment can not import WebViewer Video from the module, you can instead include WebViewer Video as a script tag. Simply, take the file `node_modules/@pdftron/webviewer-video/dist/main.js` and add it to your project's html page. WebViewer Video requires the react library, so include that as well. ```html <head> ... <!-- Load React. --> <script src="https://unpkg.com/react@17/umd/react.production.min.js" crossorigin></script> <script src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js" crossorigin></script> <!-- main.js can be renamed --> <script src="./main.js"></script> </head> ``` This will add the object `WebViewerVideo` to the window. This object contains `initializeVideoViewer`. So the previous code can be changed to: ```javascript ... const license = '---- Insert commercial license key here after purchase ----'; const { loadVideo, } = await window.WebViewerVideo.initializeVideoViewer( instance, { license }, ); ... ``` ### Builds Webviewer Video comes with two builds. The default build does not include `React` and `React-DOM` in the bundle and both must be provided by the parent code. The other build includes `React` and `React-DOM` in the bundle. See the AngularJS example below on how to load the build that includes `React`. ```javascript import { Component, ViewChild, OnInit, Output, EventEmitter, ElementRef, AfterViewInit } from '@angular/core'; import { Subject } from 'rxjs'; import WebViewer, { WebViewerInstance } from '@pdftron/webviewer'; import { initializeVideoViewer } from '@pdftron/webviewer-video/dist/main-with-react'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent implements OnInit, AfterViewInit { @ViewChild('viewer') viewer: ElementRef; wvInstance: WebViewerInstance; @Output() coreControlsEvent:EventEmitter<string> = new EventEmitter(); private documentLoaded$: Subject<void>; constructor() { this.documentLoaded$ = new Subject<void>(); } ngAfterViewInit(): void { WebViewer({ path: '../lib', }, this.viewer.nativeElement).then(async instance => { const license = `---- Insert commercial license key here after purchase ----`; const videoUrl = 'https://pdftron.s3.amazonaws.com/downloads/pl/video/video.mp4'; this.wvInstance = instance; const videoInstance = await initializeVideoViewer( // @ts-ignore instance, { license, } ); // Load a video at a specific url. Can be a local or public link // If local it needs to be relative to lib/ui/index.html. // Or at the root. (eg '/video.mp4') videoInstance.loadVideo(videoUrl); }) } ngOnInit() { } getDocumentLoadedObservable() { return this.documentLoaded$.asObservable(); } } ``` ### Custom Video Watermark You can use the WebViewer `setWatermark` API. Please see the guide [here](https://www.pdftron.com/documentation/web/guides/watermarks/). Option `shouldDrawOverAnnotations` must be passed in when setting the watermark, in order to show up on the video canvas. ```javascript const { documentViewer } = instance.Core; documentViewer.setWatermark({ shouldDrawOverAnnotations: true, // Enable watermarks for video // Draw diagonal watermark in middle of the document diagonal: { fontSize: 25, // or even smaller size fontFamily: 'sans-serif', color: 'red', opacity: 50, // from 0 to 100 text: 'Test Watermark' }, // Draw header watermark header: { fontSize: 10, fontFamily: 'sans-serif', color: 'red', opacity: 70, left: 'left watermark', center: 'center watermark', right: '' } }); ``` ## Documentation [API documentation](https://docs.apryse.com/api/video/) ## WebViewer APIs See @pdftron/webviewer [API documentation](https://docs.apryse.com/documentation/web/guides/ui/apis). ## License WebViewer Video will run in trial mode until a license is provided. For more information on licensing, please visit our [website](https://apryse.com/form/contact-sales).