81 lines
2.5 KiB
Markdown
81 lines
2.5 KiB
Markdown
# `mediaplex`
|
|
|
|

|
|
[](https://packagephobia.com/result?p=mediaplex)
|
|
[](https://npmcharts.com/compare/mediaplex?minimal=true)
|
|
|
|
Media processing library for Node.js
|
|
|
|
## Install this package
|
|
|
|
```
|
|
yarn add mediaplex
|
|
pnpm add mediaplex
|
|
bun add mediaplex
|
|
npm install mediaplex
|
|
```
|
|
|
|
# Examples
|
|
|
|
## Probe metadata
|
|
|
|
You can use Mediaplex to probe media files for metadata. Here's an example:
|
|
|
|
```js
|
|
const mediaplex = require('mediaplex');
|
|
|
|
const stream = createReadStream('./media.mp3');
|
|
const { result } = await mediaplex.probeStream(stream);
|
|
|
|
console.log(result);
|
|
|
|
/* Sample Output */
|
|
{
|
|
channels: 2,
|
|
sampleRate: 44100,
|
|
framesPerBlock: 0,
|
|
codec: 4099, // use `CodecType` enum to validate this
|
|
nFrames: 796032,
|
|
duration: 18, // seconds
|
|
metadata: [
|
|
{ name: 'TXXX:major_brand', value: 'mp42' },
|
|
{ name: 'TXXX:minor_version', value: '0' },
|
|
{ name: 'TXXX:compatible_brands', value: 'isommp42' },
|
|
{ name: 'TSSE', value: 'Lavf59.6.100' },
|
|
{ name: 'TIT2', value: "..." },
|
|
{ name: 'TPE1', value: '...' },
|
|
{ name: 'TALB', value: '...' },
|
|
{ name: 'TCON', value: '...' },
|
|
{ name: 'TPUB', value: '...' }
|
|
]
|
|
}
|
|
```
|
|
|
|
This will output an object containing information about the media file, including the number of channels, sample rate, codec, duration, and metadata.
|
|
The default probe size is `2MB`, but you can adjust this as needed by passing the second argument to `probeStream`:
|
|
|
|
```js
|
|
// probe only 1024 bytes
|
|
const { result } = await mediaplex.probeStream(stream, 1024);
|
|
|
|
// probe 5 MB
|
|
const { result } = await mediaplex.probeStream(stream, 5 * 1024 * 1024);
|
|
```
|
|
|
|
## Opus Encoder
|
|
|
|
Mediaplex also includes an Opus encoder/decoder, which can be used as a drop-in replacement for [`@discordjs/opus`](https://github.com/discordjs/opus). Here's an example on how to use it:
|
|
|
|
```js
|
|
const { OpusEncoder, getOpusVersion } = require("mediaplex");
|
|
|
|
console.log(getOpusVersion()); // libopus xxx
|
|
|
|
const encoder = new OpusEncoder(48000, 2);
|
|
|
|
const encoded = encoder.encode(buffer);
|
|
const decoded = encoder.decode(encoded);
|
|
```
|
|
|
|
You can use `OpusEncoder` to encode pcm data to opus and decode opus data to pcm format. Stream interface is provided by [@discord-player/opus](https://npm.im/@discord-player/opus) package.
|