
Security News
vlt Launches "reproduce": A New Tool Challenging the Limits of Package Provenance
vlt's new "reproduce" tool verifies npm packages against their source code, outperforming traditional provenance adoption in the JavaScript ecosystem.
react-native-audio-video-tools
Advanced tools
React-native library that allows performing some advanced operation on audios and videos
React-native-audio-video-tools is a set of functions that allow you to easily perform some advanced audio and video manipulations such as cutting, extraction, compressing, etc.
Behind the scene, react-native-audio-video-tools uses FFmpeg to execute commands.
Both local and remote media are handled and it's possible to perform the following operations:
An Example app is available with almost all features implemented. You can build it in local or you can download APK for android here
Using Yarn
yarn add react-native-audio-video-tools
Using Npm
npm install react-native-audio-video-tools --save
Then you need to install react-native-ffmpeg and choose one of eight different packages available.
Note: If you are using react-native version 0.60 or higher you don't need to link this package.
react-native link react-native-audio-video-tools
Libraries
➜ Add Files to [your project's name]
node_modules
➜ react-native-audio-video-tools
and add RNAudioVideoTools.xcodeproj
libRNAudioVideoTools.a
to your project's Build Phases
➜ Link Binary With Libraries
Cmd+R
)<android/app/src/main/java/[...]/MainActivity.java
import com.reactlibrary.RNAudioVideoToolsPackage;
to the imports at the top of the filenew RNAudioVideoToolsPackage()
to the list returned by the getPackages()
methodandroid/settings.gradle
:
include ':react-native-audio-video-tools'
project(':react-native-audio-video-tools').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-audio-video-tools/android')
android/app/build.gradle
:
compile project(':react-native-audio-video-tools')
import {VideoTools} from 'react-native-audio-video-tools';
// Initialize a video tool
const videoTools = new VideoTools("http://techslides.com/demos/sample-videos/small.mp4");
// Get details about the video
videoTools.getDetails().then(details => {
console.log("Size: " + details.size);
console.log("Duration: " + details.duration);
// Etc.
});
This package exposes 2 main class: AudioTools
and VideoTools
.
They are instantiated with a path that can be local or remote.
Note: Local path should be a full one with file protocol (file://)
import {AudioTools, VideoTools} from 'react-native-audio-video-tools';
// Initialize with a remote url
const videoTools = new VideoTools("http://techslides.com/demos/sample-videos/small.mp4");
// Or initialize with a local url
const audioTools = new AudioTools("file:///storage/emulated/0/Download/my-music.mp3");
// Or use a picker and pass directly the returned path
// but you should make that the returned path is the full path with file protocol
try {
const res = await ImagePicker.openPicker({
mediaType: type,
});
const videoTools = new VideoTools(res.path);
} catch (err) {}
Here's a full list of available methods of these classes
AudioTools
and VideoTools
Return details about the current media.
By default the result of the operation is cached so the next execution will be almost synchronous. However, you can force re-executing by setting force parameter to true
boolean
(optional, default to false
)Set it to true to disabled cache.
The promise returns a MediaDetails that contains:
An object that represents compression's specification. It contains:
low | medium | high
(optional, default to medium
)string
(optional)slow | normal | fast
(Video only) (optional, default to normal
)Note: The higher the speed, the less effective the compression is and can in some cases lead to an opposite effect.
Example with Big Bunny video
import {VideoTools} from 'react-native-audio-video-tools';
// Input file size ~ 9.75 MB
const videoTools = new VideoTools("https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/720/Big_Buck_Bunny_720_10s_10MB.mp4");
// Output file size ~ 1.63 MB
await videoTools.compress({quality: 'low'});
// Output file size ~ 3.49 MB
await videoTools.compress();
// Output file size ~ 7.76 MB
await videoTools.compress({quality: 'high'});
You can make further test with example app.
An object with the following properties:
string
Format hh:mm:ss
The time at which the media cut-off will begin
string
Format hh:mm:ss
The time when the media cut-off will stop
string
(See outputFilePath of MediaDefaultParameters)Convert the media to another extension
An object with the following properties:
string
The new extension to obtain
string
(See outputFilePath of MediaDefaultParameters)Update the current media path
string
The new local or remote path
Check if the current media is correct it means processable
The promise returns an object with following properties:
boolean
Indicate whether the media is correct or not
string
Contains error message when the media is incorrect
AudioTools
Adjust the volume of audio by either increasing or decreasing it by the value of rate (given in option parameter)
An object with the following properties:
number
Any number (including decimals) greater than zero
import {AudioTools} from 'react-native-audio-video-tools';
// Initialize with a remote url
const audioTools = new AudioTools("https://www.learningcontainer.com/wp-content/uploads/2020/02/Kalimba.mp3");
// Will create a new file with volume decreased by 50% percent of its original file
await audioTools.adjustVolume({rate: 0.5});
VideoTools
Extract audio from video
Note By default, mp3 is used as extension
import {VideoTools} from 'react-native-audio-video-tools';
const videoTools = new VideoTools("http://techslides.com/demos/sample-videos/small.mp4");
try {
const result = await videoTools.extractAudio();
const extractedAudio = new AudioTools(result.outputFilePath);
const mediaDetails = await extractedAudio.getDetails();
console.log(mediaDetails.extension); // mp3
} catch (e) {}
Default parameters shared with some methods. It contains:
string
The location where the resulting media will be saved.
On iOs This option is required and it should be a full path.
On Android This option is optional
When it's not defined, a generic one will be use.
string
Format .extention
or extension
(optional, Android only)When it's set, it represents the extension of the generated output file.
Note If both outputFilePath and extension are given, only outputFilePath would be considered
Default promise result shared with some methods. It contains:
number
The status of the request which is 0 if everything went fine
string
The full path of the media created
Feel free to submit issues or pull requests.
The library is released under the MIT licence. For more information see LICENSE
.
FAQs
React-native library that allows performing some advanced operation on audios and videos
The npm package react-native-audio-video-tools receives a total of 21 weekly downloads. As such, react-native-audio-video-tools popularity was classified as not popular.
We found that react-native-audio-video-tools demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
vlt's new "reproduce" tool verifies npm packages against their source code, outperforming traditional provenance adoption in the JavaScript ecosystem.
Research
Security News
Socket researchers uncovered a malicious PyPI package exploiting Deezer’s API to enable coordinated music piracy through API abuse and C2 server control.
Research
The Socket Research Team discovered a malicious npm package, '@ton-wallet/create', stealing cryptocurrency wallet keys from developers and users in the TON ecosystem.