Code Monkey home page Code Monkey logo

node-matroska's Introduction

node-matroska

Matroska library written for nodejs

Fork of node-ebml

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

VERY Fast parsing

Fast and incomplete parsing of a mkv file: (we keep only metadatas)

var matroska = require('matroska');

var url="http://download.wavetlan.com/SVV/Media/HTTP/mkv/H264_PCM(mkvmerge).mkv";

matroska.Decoder.parseInfoTagsAndAttachments(url, function(error, document) {
	if (error) {
		console.error(error);
		return;
	}

	console.log(document.print());
});

Returns a tree: (format: offset#tagId * node)

         0#0     * Document  [HttpSource url=http://download.wavetlan.com/SVV/Media/HTTP/mkv/H264_PCM(mkvmerge).mkv]
         0#1       * EBML  children[size=40]
         5#2         * EBMLVersion  u[1]=1
         9#3         * EBMLReadVersion  u[1]=1
        13#4         * EBMLMaxIDLength  u[1]=4
        17#5         * EBMLMaxSizeLength  u[1]=8
        21#6         * DocType  s[8]='matroska'
        32#7         * DocTypeVersion  u[1]=2
        36#8         * DocTypeReadVersion  u[1]=2
        40#9       * Segment  children[size=40316440]
        52#10        * SeekHead  children[size=52]
        57#11          * Seek  children[size=15]
        60#12            * SeekID  b[4]=1549a966 => Info
        67#13            * SeekPosition  u[2]=4099  [=>#20]
        72#14          * Seek  children[size=15]
        75#15            * SeekID  b[4]=1654ae6b => Tracks
        82#16            * SeekPosition  u[2]=4248
        87#17          * Seek  children[size=17]
        90#18            * SeekID  b[4]=1c53bb6b => Cues
        97#19            * SeekPosition  u[4]=40315034
      4151#20        * Info  children[size=149]
      4157#21          * TimecodeScale  u[3]=1000000
      4164#22          * MuxingApp  8[35]='libebml v1.2.1 + libmatroska v1.1.1'
      4202#23          * WritingApp  8[58]='mkvmerge v4.9.1 ('Ich will') built on Jul 11 2011 23:53:15'
      4263#24          * Duration  f[4]=388000
      4270#25          * DateUTC  d[8]=Fri Sep 23 2011 00:33:39 GMT+0200 (Paris, Madrid (heure d’été))
      4281#26          * SegmentUID  b[16]=8e9c49d7b307eb148bd386041b43d6ca
````

# COMPLETE parsing

Complete parsing of a mkv:
````
var matroska = require('matroska');

var url="http://download.wavetlan.com/SVV/Media/HTTP/mkv/H264_mp3(mkvmerge).mkv";

var decoder = new matroska.Decoder();
decoder.parse(url, function(error, document) {
	if (error) {
		console.error(error);
		return;
	}

	console.log(document.print());
});

````

Returns: 
     0#0     * Document  [FileSource file=G:\Downloads\H264_mp3(mkvmerge).mkv]
     0#1       * EBML  children[size=40]
     5#2         * EBMLVersion  u[1]=1
     9#3         * EBMLReadVersion  u[1]=1
    13#4         * EBMLMaxIDLength  u[1]=4
    17#5         * EBMLMaxSizeLength  u[1]=8
    21#6         * DocType  s[8]='matroska'
    32#7         * DocTypeVersion  u[1]=2
    36#8         * DocTypeReadVersion  u[1]=2
    40#9       * Segment  children[size=3661175]
    52#10        * SeekHead  children[size=51]
    57#11          * Seek  children[size=15]
    60#12            * SeekID  b[4]=1549a966 => Info
    67#13            * SeekPosition  u[2]=4099  [=>#21]
    72#14          * Seek  children[size=15]
    75#15            * SeekID  b[4]=1654ae6b => Tracks
    82#16            * SeekPosition  u[2]=4248  [=>#28]
    87#17          * Seek  children[size=16]
    90#18            * SeekID  b[4]=1c53bb6b => Cues
    97#19            * SeekPosition  u[3]=3660935  [=>#2109]
   103#20        * Void  b[4045]
  4151#21        * Info  children[size=149]
  4157#22          * TimecodeScale  u[3]=1000000
  4164#23          * MuxingApp  8[35]='libebml v1.2.1 + libmatroska v1.1.1'
  4202#24          * WritingApp  8[58]='mkvmerge v4.9.1 ('Ich will') built on Jul 11 2011 23:53:15'
  4263#25          * Duration  f[4]=69956
  4270#26          * DateUTC  d[8]=Fri Sep 23 2011 00:17:39 GMT+0200 (Paris, Madrid (heure d’été))
  4281#27          * SegmentUID  b[16]=bcb1c3b73d5109e98863c2955602b063
  4300#28        * Tracks  children[size=217]
  4306#29          * TrackEntry  children[size=142]
  4309#30            * TrackNumber  u[1]=1
  4312#31            * TrackUID  u[4]=644805295
  4319#32            * TrackType  u[1]=1
  4322#33            * FlagLacing  u[1]=0
  4325#34            * MinCache  u[1]=1
  4329#35            * CodecID  s[15]='V_MPEG4/ISO/AVC'
  4346#36            * CodecPrivate  b[43]=0142c00cffe1001c6742c00c9a740501edff807800c988000003000800000301
  4392#37            * DefaultDuration  u[4]=41666666
  4400#38            * Language  s[3]='und'
  4407#39            * Video  children[size=24]
  4409#40              * PixelWidth  u[2]=640
  4413#41              * PixelHeight  u[2]=480
  4417#42              * DisplayWidth  u[4]=640
  4424#43              * DisplayHeight  u[4]=806
  4431#44            * ContentEncodings  children[size=17]
  4434#45              * ContentEncoding  children[size=14]
  4437#46                * ContentCompression  children[size=11]
  4440#47                  * ContentCompAlgo  u[1]=3
  4444#48                  * ContentCompSettings  b[1]=00
  4448#49          * TrackEntry  children[size=69]
  4450#50            * TrackNumber  u[1]=2
  4453#51            * TrackUID  u[4]=1713889946
  4460#52            * TrackType  u[1]=2
  4463#53            * CodecID  s[9]='A_MPEG/L3'
  4474#54            * DefaultDuration  u[4]=26122448
  4482#55            * Language  s[3]='und'
  4489#56            * Audio  children[size=11]
  4491#57              * SamplingFrequency  f[4]=22050
  4497#58              * Channels  u[1]=2
  4500#59            * ContentEncodings  children[size=17]
  4503#60              * ContentEncoding  children[size=14]
  4506#61                * ContentCompression  children[size=11]
  4509#62                  * ContentCompAlgo  u[1]=3
  4513#63                  * ContentCompSettings  b[1]=ff
  4517#64        * Void  b[1108]
  5628#65        * Cluster  children[size=290112]
  5635#66          * Timecode  u[1]=0
  5638#67          * SimpleBlock  b[1439]
  7080#68          * SimpleBlock  b[4184]
 11267#69          * SimpleBlock  b[134]
 11404#70          * SimpleBlock  b[19]
 11425#71          * SimpleBlock  b[308]
 ...
288918#206         * SimpleBlock  b[1573]
290494#207         * SimpleBlock  b[5243]
295740#208       * Cluster  children[size=246364]
295747#209         * Timecode  u[2]=4875
295751#210         * SimpleBlock  b[2613]
  ...

3397072#1958 * SimpleBlock b[2136] 3399211#1959 * Cluster children[size=259667] 3399218#1960 * Timecode u[2]=64833 3399222#1961 * SimpleBlock b[3913] ... 3657216#2101 * SimpleBlock b[148] 3657367#2102 * SimpleBlock b[1268] 3658638#2103 * BlockGroup children[size=240] 3658641#2104 * Block b[231] 3658875#2105 * ReferenceBlock i[1]=-42 3658878#2106 * Cluster children[size=2109] 3658884#2107 * Timecode u[3]=69851 3658889#2108 * SimpleBlock b[2095] 3660987#2109 * Cues children[size=228] 3660993#2110 * CuePoint children[size=14] 3660995#2111 * CueTime u[1]=0 3660998#2112 * CueTrackPositions children[size=9] 3661000#2113 * CueTrack u[1]=1 3661003#2114 * CueClusterPosition u[2]=5576 [=>#65] 3661007#2115 * CuePoint children[size=16] 3661009#2116 * CueTime u[2]=4875 3661013#2117 * CueTrackPositions children[size=10] 3661015#2118 * CueTrack u[1]=1 3661018#2119 * CueClusterPosition u[3]=295688 [=>#208] ... 3661199#2175 * CuePoint children[size=16] 3661201#2176 * CueTime u[2]=64833 3661205#2177 * CueTrackPositions children[size=10] 3661207#2178 * CueTrack u[1]=1 3661210#2179 * CueClusterPosition u[3]=3399159 [=>#1959]


# Edition of MKV

... it works, samples soon :-)

node-matroska's People

Contributors

oeuillot avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.