Streampunk / beamcoder

Node.js native bindings to FFmpeg.
GNU General Public License v3.0
392 stars 76 forks source link

Is there a limit on number of demuxers? #112

Closed antoineMoPa closed 1 year ago

antoineMoPa commented 1 year ago

Hi! First, thanks for this nice project!

I have been trying beamcoder, but I keep running in a limit after creating 4 demuxers. Is there some limit of 4 demuxers that can be created during a node script execution?

Minimal project to reproduce the issue

beamcoder.test.ts

import {describe, expect, it} from '@jest/globals';

import beamcoder from 'beamcoder';
import { createReadStream } from 'fs';

describe('beamcoder', () => {
    it('loads multiple times', async function () {
        for (let i = 0; i < 10; i++) {
            console.log(`Creating demuxer #${i + 1}`);
            const inputFile = './Big_Buck_Bunny_360_10s_30MB.mp4';
            const readStream = createReadStream(inputFile);
            const demuxerStream = beamcoder.demuxerStream({});
            readStream.pipe(demuxerStream);
            const demuxer = await demuxerStream.demuxer({});

            console.log(`Creating decoder #${i + 1}`);

            // we don't even need to create a decoder to reproduce the issue!
            //const decoder = beamcoder.decoder({
            //    demuxer: demuxer,
            //    width: demuxer.streams[0].codecpar.width,
            //    height: demuxer.streams[0].codecpar.height,
            //    stream_index: 0,
            //    pix_fmt: demuxer.streams[0].codecpar.format,
            //    thread_count: 8,
            //});

            console.log(`Closing demuxer #${i + 1}`);
            readStream.close();
            demuxer.forceClose();
        }
    }, 100000);
});

package.json:

{
  "name": "gstreamer-test",
  "version": "0.0.1",
  "description": "me testing gstreamer and parcel",
  "main": "index.ts",
  "dependencies": {
    "babel": "^6.23.0",
    "babel-jest": "^29.5.0",
    "beamcoder": "^0.7.1",
    "chokidar": "^3.5.3",
    "jest": "^29.5.0",
    "parcel": "^2.8.3",
    "parcel-bundler": "^1.12.5"
  },
  "devDependencies": {},
  "scripts": {
    "test": "jest",
    "check": "tsc --noEmit"
  },
  "author": "",
  "license": "LGPL-3.0-or-later"
}

.babelrc

{
  "presets": ["@babel/preset-env"]
}

to download a test video:

wget https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/360/Big_Buck_Bunny_360_10s_30MB.mp4

To run:

npm install;
npm run test;

Note that it hangs after creating 4 demuxers, while it should create 10!

antoineMoPa commented 1 year ago

🤦 🤦 🤦

Ok, my bad, I had forgotten export UV_THREADPOOL_SIZE=32.