Getting Started
Ce contenu n'est pas encore disponible dans votre langue.
-
Install the package
Fenêtre de terminal npm i @capgo/capacitor-video-thumbnailsFenêtre de terminal pnpm add @capgo/capacitor-video-thumbnailsFenêtre de terminal yarn add @capgo/capacitor-video-thumbnailsFenêtre de terminal bun add @capgo/capacitor-video-thumbnails -
Sync with native projects
Fenêtre de terminal npx cap syncFenêtre de terminal pnpm cap syncFenêtre de terminal yarn cap syncFenêtre de terminal bunx cap sync
Import the plugin and use its methods to generate video thumbnails:
import { CapgoVideoThumbnails } from '@capgo/capacitor-video-thumbnails';
// Generate thumbnail from local videoconst generateFromLocal = async () => { const result = await CapgoVideoThumbnails.getThumbnail({ sourceUri: 'file:///path/to/video.mp4', time: 5000, // 5 seconds into the video quality: 0.8 });
console.log('Thumbnail URI:', result.uri); console.log('Dimensions:', result.width, 'x', result.height);};
// Generate thumbnail from remote videoconst generateFromRemote = async () => { const result = await CapgoVideoThumbnails.getThumbnail({ sourceUri: 'https://example.com/video.mp4', time: 0, // First frame quality: 1.0 });
return result.uri;};API Reference
Section titled “API Reference”getThumbnail(options)
Section titled “getThumbnail(options)”Generate a thumbnail image from a video file.
interface VideoThumbnailsOptions { sourceUri: string; // Video file path or URL time?: number; // Position in milliseconds (default: 0) quality?: number; // 0.0 to 1.0 (default: 1.0) headers?: Record<string, string>; // HTTP headers for remote URLs}
interface VideoThumbnailsResult { uri: string; // Local path to generated thumbnail width: number; // Thumbnail width in pixels height: number; // Thumbnail height in pixels}
const result = await CapgoVideoThumbnails.getThumbnail({ sourceUri: 'file:///path/to/video.mp4', time: 5000, quality: 0.8});getPluginVersion()
Section titled “getPluginVersion()”Get the current plugin version.
const { version } = await CapgoVideoThumbnails.getPluginVersion();console.log('Plugin version:', version);Complete Example
Section titled “Complete Example”import { CapgoVideoThumbnails } from '@capgo/capacitor-video-thumbnails';
export class VideoThumbnailService { /** * Generate a thumbnail from a video at a specific time */ async generateThumbnail( videoPath: string, timeMs: number = 0, quality: number = 0.8 ): Promise<string> { try { const result = await CapgoVideoThumbnails.getThumbnail({ sourceUri: videoPath, time: timeMs, quality: quality });
return result.uri; } catch (error) { console.error('Failed to generate thumbnail:', error); throw error; } }
/** * Generate thumbnail from authenticated remote video */ async generateFromAuthenticatedUrl( videoUrl: string, authToken: string ): Promise<string> { const result = await CapgoVideoThumbnails.getThumbnail({ sourceUri: videoUrl, time: 0, quality: 1.0, headers: { 'Authorization': `Bearer ${authToken}` } });
return result.uri; }
/** * Generate multiple thumbnails at different timestamps */ async generateThumbnailStrip( videoPath: string, count: number, videoDurationMs: number ): Promise<string[]> { const thumbnails: string[] = []; const interval = videoDurationMs / (count + 1);
for (let i = 1; i <= count; i++) { const time = Math.round(interval * i); const result = await CapgoVideoThumbnails.getThumbnail({ sourceUri: videoPath, time: time, quality: 0.6 // Lower quality for preview strip }); thumbnails.push(result.uri); }
return thumbnails; }
/** * Generate thumbnail with dimensions info */ async generateWithMetadata(videoPath: string) { const result = await CapgoVideoThumbnails.getThumbnail({ sourceUri: videoPath, time: 1000, // 1 second quality: 1.0 });
return { thumbnailUri: result.uri, aspectRatio: result.width / result.height, width: result.width, height: result.height }; }}
// Usage in a React/Vue/Angular componentconst thumbnailService = new VideoThumbnailService();
async function displayVideoPreview(videoPath: string) { const thumbnailUri = await thumbnailService.generateThumbnail(videoPath, 2000);
// Use in img tag // <img src={thumbnailUri} alt="Video preview" /> return thumbnailUri;}
// Generate preview for video pickerasync function handleVideoSelected(videoUri: string) { const metadata = await thumbnailService.generateWithMetadata(videoUri);
console.log(`Video aspect ratio: ${metadata.aspectRatio}`); console.log(`Thumbnail: ${metadata.thumbnailUri}`);
return metadata;}Best Practices
Section titled “Best Practices”-
Use appropriate quality
- For thumbnails in lists: 0.5 - 0.7
- For preview images: 0.8 - 1.0
- Lower quality = smaller file size and faster generation
-
Handle errors gracefully
try {const result = await CapgoVideoThumbnails.getThumbnail({sourceUri: videoPath,time: 5000});} catch (error) {console.error('Thumbnail generation failed:', error);// Show placeholder image} -
Cache thumbnails Store generated thumbnail URIs to avoid regenerating them:
const thumbnailCache = new Map<string, string>();async function getCachedThumbnail(videoPath: string): Promise<string> {if (thumbnailCache.has(videoPath)) {return thumbnailCache.get(videoPath)!;}const result = await CapgoVideoThumbnails.getThumbnail({sourceUri: videoPath});thumbnailCache.set(videoPath, result.uri);return result.uri;} -
Choose appropriate timestamps
- Avoid 0ms for videos that may have black intro frames
- Use 1000-2000ms for better preview content
Platform Notes
Section titled “Platform Notes”- Uses AVAssetImageGenerator for thumbnail extraction
- Supports local files and remote URLs
- Returns JPEG images
Android
Section titled “Android”- Uses MediaMetadataRetriever for thumbnail extraction
- Supports local files and remote URLs
- Returns JPEG or PNG images
- Uses HTML5 video element with canvas capture
- Requires CORS headers for remote videos
- May have limitations with some video formats
Requirements
Section titled “Requirements”- Capacitor 8.0.0 or higher