ts-ebml
TypeScript icon, indicating that this package has built-in type declarations

2.0.2 • Public • Published

ts-ebml

ebml encoder and decoder written in TypeScript.

Fork of node-ebml

It is a fork of https://github.com/themasch/node-ebml

install

npm install ts-ebml --save

usage

show EBML structure on conosle

$ ts-ebml foo.webm
0 m 0 EBML
5 u 1 EBMLVersion 1
9 u 1 EBMLReadVersion 1
13 u 1 EBMLMaxIDLength 4
17 u 1 EBMLMaxSizeLength 8
21 s 1 DocType webm
28 u 1 DocTypeVersion 2
32 u 1 DocTypeReadVersion 2
36 m 0 Segment
48 m 1 Info
53 u 2 TimecodeScale 1000000
...

node

import * as ebml from 'ts-ebml';
const fs = require('fs');
 
const decoder = new ebml.Decoder();
 
fs.createReadStream('media/test.webm').on('data', (buf)=>{
  const ebmlElms = decoder.decode(buf);
  console.log(ebmlElms);
});

browser

import * as ebml from 'ts-ebml';
 
const decoder = new ebml.Decoder();
 
fetch('media/test.webm')
  .then((res)=> res.arrayBuffer() )
  .then((buf)=>{
    const ebmlElms = decoder.decode(buf);
    console.log(ebmlElms);
  });

features

  • get WebP frame from MediaRecorder WebM VP8 Stream
  • create seekable webm from media-recoder
  • create playable webm to media-stream-api from media-recorder

see src/test.ts and src/example_seekable.ts

stable API

class Decoder {
  constructor();
  decode(chunk: ArrayBuffer): EBMLElementDetail[];
}
 
class Encoder {
  constructor();
  encode(elms: EBMLElementBuffer[]): ArrayBuffer;
}
 
type EBMLElementBuffer = MasterElement | ChildElementBuffer;
type EBMLElementDetail = (MasterElement | ChildElementValue) & ElementDetail;
 
type MasterElement = {
  name: string;
  type: "m";
  isEnd: boolean;
  unknownSize?: boolean;
};
type ChildElementBuffer = {
  name: string;
  type: "u" | "i" | "f" | "s" | "8" | "b" | "d";
  data: Buffer;
};
type ChildElementValue = ChildElementBuffer & {
  value: number|string|Buffer|Date;
};
type ElementDetail = {
  tagStart: number;
  tagEnd: number;
  sizeStart: number;
  sizeEnd: number;
  dataStart: number;
  dataEnd: number;
};
namespace tools {
  export function readVint(buffer: Buffer, start: number): null | ({length: number; value: number; });
  export function writeVint(val: number): Buffer;
  export function readBlock(buf: ArrayBuffer): EBML.SimpleBlock;
}

develop

npm run setup # install cli tools 
npm run init  # install libraries 
npm run build # build js code 
npm run lint  # tslint 
npm run doc   # typedoc 
npm run check # type check 
npm run test  # build test 
npm run example # build example 

debugging tools

license

MIT

related info

related issues

media recorder seekable webm

chrome

firefox

others

media recorder media source gap

chrome

others

chrome

firefox

related works

Package Sidebar

Install

Weekly Downloads

21,845

Version

2.0.2

License

MIT

Last publish

Collaborators

  • legokichi