mirror of
https://github.com/codedread/bitjs
synced 2025-10-03 17:49:16 +02:00
Release v1.07: Add MPEG2 video codec support.
This commit is contained in:
parent
726feee48f
commit
a24524e772
4 changed files with 53 additions and 17 deletions
39
README.md
39
README.md
|
@ -23,11 +23,30 @@ or
|
|||
$ yarn add @codedread/bitjs
|
||||
```
|
||||
|
||||
## bitjs.archive
|
||||
### Using in Node
|
||||
|
||||
This module is an ES Module, which should work as expected in other projects using ES Modules. However,
|
||||
if you are using a project that uses CommonJs modules, it's a little tricker to use. One valid example
|
||||
of this is if a TypeScript project compiles to CommonJS, it will try to turn imports into require()
|
||||
statements, which will break. The fix for this (unfortunately) is to update your tsconfig.json:
|
||||
|
||||
```json
|
||||
"moduleResolution": "Node16",
|
||||
```
|
||||
|
||||
and use a Dynamic Import:
|
||||
|
||||
```javascript
|
||||
const { getFullMIMEString } = await import('@codedread/bitjs');
|
||||
```
|
||||
|
||||
## Packages
|
||||
|
||||
### bitjs.archive
|
||||
|
||||
This package includes objects for unarchiving binary data in popular archive formats (zip, rar, tar) providing unzip, unrar and untar capabilities via JavaScript in the browser. A prototype version of a compressor that creates Zip files is also present. The decompression/compression actually happens inside a Web Worker.
|
||||
|
||||
### Decompressing
|
||||
#### Decompressing
|
||||
|
||||
```javascript
|
||||
import { Unzipper } from './bitjs/archive/decompress.js';
|
||||
|
@ -69,7 +88,7 @@ unzipper.update(anArrayBufferWithMoreBytes);
|
|||
unzipper.update(anArrayBufferWithYetMoreBytes);
|
||||
```
|
||||
|
||||
### Compressing
|
||||
#### Compressing
|
||||
|
||||
The Zipper only supports creating zip files without compression (story only) for now. The interface
|
||||
is pretty straightforward and there is no event-based / streaming API.
|
||||
|
@ -95,7 +114,7 @@ const zippedArrayBuffer = await zipper.start(
|
|||
true /* isLastFile */);
|
||||
```
|
||||
|
||||
## bitjs.codecs
|
||||
### bitjs.codecs
|
||||
|
||||
This package includes code for dealing with media files (audio/video). It is useful for deriving
|
||||
ISO RFC6381 MIME type strings, including the codec information. Currently supports a limited subset
|
||||
|
@ -121,7 +140,7 @@ exec(cmd, (error, stdout) => {
|
|||
});
|
||||
```
|
||||
|
||||
## bitjs.file
|
||||
### bitjs.file
|
||||
|
||||
This package includes code for dealing with files. It includes a sniffer which detects the type of file, given an ArrayBuffer.
|
||||
|
||||
|
@ -130,7 +149,7 @@ import { findMimeType } from './bitjs/file/sniffer.js';
|
|||
const mimeType = findMimeType(someArrayBuffer);
|
||||
```
|
||||
|
||||
## bitjs.image
|
||||
### bitjs.image
|
||||
|
||||
This package includes code for dealing with binary images. It includes a module for converting WebP images into alternative raster graphics formats (PNG/JPG).
|
||||
|
||||
|
@ -145,7 +164,7 @@ convertWebPtoPNG(webpBuffer).then(pngBuf => {
|
|||
});
|
||||
```
|
||||
|
||||
## bitjs.io
|
||||
### bitjs.io
|
||||
|
||||
This package includes stream objects for reading and writing binary data at the bit and byte level: BitStream, ByteStream.
|
||||
|
||||
|
@ -156,12 +175,6 @@ const crc = bstream.readBits(12); // read in 12 bits as CRC, advancing the point
|
|||
const flagbits = bstream.peekBits(6); // look ahead at next 6 bits, but do not advance the pointer
|
||||
```
|
||||
|
||||
# Other Tests
|
||||
|
||||
Those that haven't been ported to mocha/chai/nodejs.
|
||||
|
||||
* [bitjs.archive tests](https://codedread.github.io/bitjs/tests/archive-test.html)
|
||||
|
||||
## Reference
|
||||
|
||||
* [UnRar](http://codedread.github.io/bitjs/docs/unrar.html): A work-in-progress description of the RAR file format.
|
||||
|
|
|
@ -27,7 +27,8 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @typedef ProbeFormat ffprobe -show_format -print_format json. Only the fields we care about.
|
||||
* @typedef ProbeFormat Only the fields we care about from the following command:
|
||||
* ffprobe -show_format -show_streams -v quiet -print_format json -i file.mp4
|
||||
* @property {string} filename
|
||||
* @property {string} format_name
|
||||
* @property {string} duration Number of seconds, as a string like "473.506367".
|
||||
|
@ -123,7 +124,7 @@ export function getFullMIMEString(info) {
|
|||
case 'opus': codecFrags.add('opus'); break;
|
||||
default:
|
||||
throw `Could not handle codec_name ${stream.codec_name}, ` +
|
||||
`codec_tag_string ${stream.codec_tag_string} for file ${info.filename} yet. ` +
|
||||
`codec_tag_string ${stream.codec_tag_string} for file ${info.format.filename} yet. ` +
|
||||
`Please file a bug https://github.com/codedread/bitjs/issues/new`;
|
||||
}
|
||||
break;
|
||||
|
@ -141,9 +142,10 @@ export function getFullMIMEString(info) {
|
|||
switch (stream.codec_name) {
|
||||
case 'h264': codecFrags.add(getAVC1CodecString(stream)); break;
|
||||
case 'vp9': codecFrags.add(getVP09CodecString(stream)); break;
|
||||
case 'mpeg2video': codecFrags.add('mpeg2video'); break;
|
||||
default:
|
||||
throw `Could not handle codec_name ${stream.codec_name}, ` +
|
||||
`codec_tag_string ${stream.codec_tag_string} for file ${info.filename} yet. ` +
|
||||
`codec_tag_string ${stream.codec_tag_string} for file ${info.format.filename} yet. ` +
|
||||
`Please file a bug https://github.com/codedread/bitjs/issues/new`;
|
||||
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@codedread/bitjs",
|
||||
"version": "1.0.6",
|
||||
"version": "1.0.7",
|
||||
"description": "Binary Tools for JavaScript",
|
||||
"homepage": "https://github.com/codedread/bitjs",
|
||||
"author": "Jeff Schiller",
|
||||
|
|
|
@ -354,4 +354,25 @@ describe('codecs test suite', () => {
|
|||
.and.equals('audio/webm; codecs="opus"');
|
||||
});
|
||||
});
|
||||
|
||||
describe('MPEG2', () => {
|
||||
/** @type {ProbeInfo} */
|
||||
let info;
|
||||
|
||||
beforeEach(() => {
|
||||
info = {
|
||||
format: { format_name: 'matroska,webm' },
|
||||
streams: [{
|
||||
codec_type: 'video',
|
||||
codec_name: 'mpeg2video',
|
||||
}],
|
||||
};
|
||||
});
|
||||
|
||||
it('detects mpeg2video', () => {
|
||||
expect(getFullMIMEString(info))
|
||||
.to.be.a('string')
|
||||
.and.equals('video/webm; codecs="mpeg2video"');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue