mirror of
https://github.com/arcodange-org/mediabunny.git
synced 2026-10-09 08:43:49 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
03b4843c1d | ||
|
|
9bfa855f25 | ||
|
|
d768f3c63b |
@@ -49,6 +49,8 @@ Core features include:
|
|||||||
npm install mediabunny
|
npm install mediabunny
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Requires any JavaScript environment that can run ECMAScript 2021 or later. Mediabunny is expected to be run in modern browsers. For types, TypeScript 5.7 or later is required.
|
||||||
|
|
||||||
### Read file metadata
|
### Read file metadata
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@@ -17,6 +17,10 @@ bun add mediabunny
|
|||||||
```
|
```
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
::: info
|
||||||
|
Requires any JavaScript environment that can run ECMAScript 2021 or later. Mediabunny is expected to be run in modern browsers. For types, TypeScript 5.7 or later is required.
|
||||||
|
:::
|
||||||
|
|
||||||
Then, simply import it like this:
|
Then, simply import it like this:
|
||||||
```ts
|
```ts
|
||||||
import { ... } from 'mediabunny'; // ESM
|
import { ... } from 'mediabunny'; // ESM
|
||||||
|
|||||||
@@ -286,6 +286,18 @@ See [Media sinks](./media-sinks) for a full list of sinks.
|
|||||||
|
|
||||||
### Examples
|
### Examples
|
||||||
|
|
||||||
|
Loop over all raw encoded packets of a track:
|
||||||
|
```ts
|
||||||
|
import { EncodedPacketSink } from 'mediabunny';
|
||||||
|
|
||||||
|
const videoTrack = await input.getPrimaryVideoTrack();
|
||||||
|
const sink = new EncodedPacketSink(videoTrack);
|
||||||
|
|
||||||
|
for await (const packet of sink.packets()) {
|
||||||
|
console.log(packet.timestamp);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
Here we iterate over all samples (frames) of a video track:
|
Here we iterate over all samples (frames) of a video track:
|
||||||
```ts
|
```ts
|
||||||
import { VideoSampleSink } from 'mediabunny';
|
import { VideoSampleSink } from 'mediabunny';
|
||||||
|
|||||||
Generated
+6
-6
@@ -1,16 +1,16 @@
|
|||||||
{
|
{
|
||||||
"name": "mediabunny",
|
"name": "mediabunny",
|
||||||
"version": "1.3.1",
|
"version": "1.3.3",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "mediabunny",
|
"name": "mediabunny",
|
||||||
"version": "1.3.1",
|
"version": "1.3.3",
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/dom-mediacapture-transform": "^0.1.11",
|
"@types/dom-mediacapture-transform": "^0.1.11",
|
||||||
"@types/dom-webcodecs": "^0.1.15"
|
"@types/dom-webcodecs": "0.1.13"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.22.0",
|
"@eslint/js": "^9.22.0",
|
||||||
@@ -2443,9 +2443,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/dom-webcodecs": {
|
"node_modules/@types/dom-webcodecs": {
|
||||||
"version": "0.1.15",
|
"version": "0.1.13",
|
||||||
"resolved": "https://registry.npmjs.org/@types/dom-webcodecs/-/dom-webcodecs-0.1.15.tgz",
|
"resolved": "https://registry.npmjs.org/@types/dom-webcodecs/-/dom-webcodecs-0.1.13.tgz",
|
||||||
"integrity": "sha512-omOlCPvTWyPm4ZE5bZUhlSvnHM2ZWM2U+1cPiYFL/e8aV5O9MouELp+L4dMKNTON0nTeHqEg+KWDfFQMY5Wkaw==",
|
"integrity": "sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@types/estree": {
|
"node_modules/@types/estree": {
|
||||||
|
|||||||
+3
-3
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "mediabunny",
|
"name": "mediabunny",
|
||||||
"author": "Vanilagy",
|
"author": "Vanilagy",
|
||||||
"version": "1.3.1",
|
"version": "1.3.3",
|
||||||
"description": "Pure TypeScript media toolkit for reading, writing, and converting media files, directly in the browser.",
|
"description": "Pure TypeScript media toolkit for reading, writing, and converting media files, directly in the browser.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./dist/bundles/mediabunny.cjs",
|
"main": "./dist/bundles/mediabunny.cjs",
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
"docs:preview": "vitepress preview docs",
|
"docs:preview": "vitepress preview docs",
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
"examples:build": "vite build",
|
"examples:build": "vite build",
|
||||||
"fix-build-import-paths": "find dist -name \"*.js\" -type f -exec sed -i '' \"s/ from '\\([^']*\\)';/ from '\\1.js';/g\" {} \\;",
|
"fix-build-import-paths": "tsx scripts/add-import-extensions.ts",
|
||||||
"append-namespace": "echo 'export as namespace Mediabunny;' >> dist/mediabunny.d.ts"
|
"append-namespace": "echo 'export as namespace Mediabunny;' >> dist/mediabunny.d.ts"
|
||||||
},
|
},
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/dom-mediacapture-transform": "^0.1.11",
|
"@types/dom-mediacapture-transform": "^0.1.11",
|
||||||
"@types/dom-webcodecs": "^0.1.15"
|
"@types/dom-webcodecs": "0.1.13"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.22.0",
|
"@eslint/js": "^9.22.0",
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
import * as fs from 'fs';
|
||||||
|
import * as path from 'path';
|
||||||
|
|
||||||
|
// .js extensions are technically required in compliant ECMAScript, and Webpack needs them, so we add them here.
|
||||||
|
|
||||||
|
const walkDir = (dir: string) => {
|
||||||
|
const files: string[] = [];
|
||||||
|
const items = fs.readdirSync(dir);
|
||||||
|
|
||||||
|
for (const item of items) {
|
||||||
|
const fullPath = path.join(dir, item);
|
||||||
|
const stat = fs.statSync(fullPath);
|
||||||
|
|
||||||
|
if (stat.isDirectory()) {
|
||||||
|
files.push(...walkDir(fullPath));
|
||||||
|
} else if (item.endsWith('.js')) {
|
||||||
|
files.push(fullPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return files;
|
||||||
|
};
|
||||||
|
|
||||||
|
const fixFile = (filePath: string) => {
|
||||||
|
const content = fs.readFileSync(filePath, 'utf8');
|
||||||
|
const fixed = content.replace(
|
||||||
|
/(\s+from\s+['"])([^'"]*)(['"])/g,
|
||||||
|
'$1$2.js$3',
|
||||||
|
);
|
||||||
|
|
||||||
|
if (content !== fixed) {
|
||||||
|
fs.writeFileSync(filePath, fixed);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const jsFiles = walkDir('dist');
|
||||||
|
jsFiles.forEach(fixFile);
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import ts from 'typescript';
|
import ts from 'typescript';
|
||||||
import * as fs from 'node:fs';
|
import * as fs from 'fs';
|
||||||
|
|
||||||
const checkDocblocks = (filePath: string) => {
|
const checkDocblocks = (filePath: string) => {
|
||||||
const program = ts.createProgram([filePath], {});
|
const program = ts.createProgram([filePath], {});
|
||||||
|
|||||||
Reference in New Issue
Block a user