Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/souvik-ghosh/react-native-create-thumbnail

iOS/Android thumbnail generator with support for both local and remote videos
https://github.com/souvik-ghosh/react-native-create-thumbnail

android ios react-native thumbnails video

Last synced: about 2 months ago
JSON representation

iOS/Android thumbnail generator with support for both local and remote videos

Awesome Lists containing this project

README

        

# react-native-create-thumbnail

iOS/Android thumbnail generator with storage/cache management and support for both local and remote videos. `react-native-create-thumbnail` is a wrapper around
[`AVAssetImageGenerator`](https://developer.apple.com/documentation/avfoundation/avassetimagegenerator?language=objc) (iOS) and [`MediaMetadataRetriever`](https://developer.android.com/reference/android/media/MediaMetadataRetriever) (Android)

[![npm version](https://img.shields.io/npm/v/react-native-create-thumbnail.svg)](https://npmjs.com/package/react-native-create-thumbnail) [![npm downloads](https://img.shields.io/npm/dm/react-native-create-thumbnail.svg)](https://npmjs.com/package/react-native-create-thumbnail) [![Maintenance Status](https://img.shields.io/badge/maintenance-active-green.svg)](#maintenance-status)

## Getting started

1. Install library from `npm`

```bash
npm i react-native-create-thumbnail
```

or

```bash
yarn add react-native-create-thumbnail
```

2. Link native code

With autolinking (react-native 0.60+)

```bash
cd ios && pod install
```

Pre 0.60

```bash
react-native link react-native-create-thumbnail
```

## Usage

```javascript
import { createThumbnail } from "react-native-create-thumbnail";

createThumbnail({
url: '',
timeStamp: 10000,
})
.then(response => console.log({ response }))
.catch(err => console.log({ err }));
```

## Request Object

| Property | Type | Description |
| --------- | :-----------------------: | :------------------------------------------------------------------------ |
| url | `String` (required) | Path to video file (local or remote) |
| timeStamp | `Number` (default `0`) | Thumbnail timestamp (in milliseconds) |
| format | `String` (default `jpeg`) | Thumbnail format, can be one of: `jpeg`, or `png` |
| maxWidth | `Number` (default `512`) | Max thumbnail width in px |
| maxHeight | `Number` (default `512`) | Max thumbnail height in px |
| dirSize | `Number` (default `100`) | Maximum size of the cache directory (in megabytes). When this directory is full, the previously generated thumbnails will be deleted to clear about half of it's size. |
| headers | `Object` | Headers to load the video with. e.g. `{ Authorization: 'someAuthToken' }` |
| cacheName | `String` (optional) | Cache name for this thumbnail to avoid duplicate generation. If specified, and a thumbnail already exists with the same cache name, it will be returned instead of generating a new one. |
| timeToleranceMs | `Number` (default `2000`, Only iOS) | Time tolerance in ms for the system to pick the best matching video frame |

## Response Object

| Property | Type | Description |
| -------- | :------: | :-------------------------- |
| path | `String` | Path to generated thumbnail |
| size | `Number` | Size (in bytes) of thumbnail|
| mime | `String` | Mimetype of thumbnail |
| width | `Number` | Thumbnail width |
| height | `Number` | Thumbnail height |

#### Notes

Requires following Permissions on android

```bash
READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE
```

#### Limitations

- Remote videos aren't supported on android sdk_version < 14.
- This is a **Native Module**, so it won't work in expo managed projects.
- This library heavily depends on the native API's to generate the thumbnails. Thus it can only generate from the video formats/codecs that are supported by the device's OS.

#### Credits

- [`react-native-thumbnail`](https://www.npmjs.com/package/react-native-thumbnail) - A great source of inspiration
- This project was bootstrapped with [`create-react-native-module`](https://github.com/brodybits/create-react-native-module)

#### Maintenance Status

**Active:** Bug reports, feature requests and pull requests are welcome.