How to use the beamcoder.format function in beamcoder

To help you get started, we’ve selected a few beamcoder examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github Streampunk / beamengine / test / appSpec.js View on Github external
test('GET a stream', async t => {
  try {
    t.ok(await flushdb(), 'database flushed OK.');

    t.comment('### Retrieve a stream');
    t.deepEqual(await redisio.storeFormat(testUtil.fmt), ['OK','OK','OK'],
      'test format stored.');
    let response = await request(server).get('/beams/test_url/stream_1').expect(200);
    t.ok(response.ok, 'response claims OK.');
    t.equal(response.type, 'application/json', 'response is JSON.');
    let fmt = beamcoder.format();
    let str = fmt.newStream(response.body);
    str.__index(response.body.index);
    t.deepEqual(str.toJSON(), testUtil.stream1, 'roundtrip equal.');

    t.comment('### Retrive a stream that does not exist.');
    response = await request(server).get('/beams/test_url/stream_42').expect(404);
    t.notOk(response.ok, 'response is not OK.');
    t.equal(response.type, 'application/json', 'response is JSON.');
    t.deepEqual(response.body, { statusCode: 404,
      error: 'Not Found',
      message: `Stream with name 'test_url:stream_42' was not found: Unable to retrieve a stream with key 'beamengine:test_url:stream_42'.` },  // eslint-disable-line
    'error message structure as expected.');

    t.comment('### Retrieve a stream by type - video');
    response = await request(server).get('/beams/test_url/video').expect(200);
    t.ok(response.ok, 'response claims OK.');
github Streampunk / beamengine / test / appSpec.js View on Github external
test('GET a format', async t => {
  try {
    t.ok(await flushdb(), 'database flushed OK.');

    t.comment('### Retrieve a format');
    t.deepEqual(await redisio.storeFormat(testUtil.fmt), ['OK','OK','OK'],
      'test format stored.');
    let response = await request(server).get('/beams/test_url').expect(200);
    t.ok(response.ok, 'response claims OK.');
    t.equal(response.type, 'application/json', 'response is JSON.');
    let fmt = beamcoder.format(response.body);
    t.deepEqual(stripNewStream(fmt), stripNewStream(testUtil.fmt), 'roundtrip equal.');

    t.comment('### Retrive a format that does not exist.');
    response = await request(server).get('/beams/wibble').expect(404);
    t.notOk(response.ok, 'response is not OK.');
    t.equal(response.type, 'application/json', 'response is JSON.');
    t.deepEqual(response.body, { statusCode: 404,
      error: 'Not Found',
      message: `Format with name 'wibble' was not found: Unable to retrieve a format with key 'beamengine:wibble'.` },  // eslint-disable-line
    'error message structure as expected.');

  } catch (err) {
    t.fail(err);
  }
  t.end();
});
github Streampunk / beamengine / test / storeStreamSpec.js View on Github external
test('Roundtrip a stream', async t => {
  let fmt = beamcoder.format();
  let s = fmt.newStream({
    name:'h264',
    side_data: { replaygain: Buffer.from('Magic Roundabout') },
    metadata: { jelly: 'plate' }
  });
  const redis = new Redis();
  await redis.del('beam:stream:test');

  //for ( let x = 0 ; x < 100 ; x++ ) {
  let start = process.hrtime();
  let sr = streamToRedis(s.toJSON());
  let end = process.hrtime(start);
  console.log('streamToRedis', end);
  start = process.hrtime();

  t.equal(await redis.hmset('beam:stream:test', sr), 'OK', 'reports set OK.');
github Streampunk / beamengine / test / storeFormatSpec.js View on Github external
test('Roundtrip format', async t => {
  let fmt = beamcoder.format({
    oformat: 'wav',
    url: 'this_is_my_name',
    priv_data: { peak_block_size: 192 },
    key: Buffer.from('Wibble wobble'),
    metadata: { jelly: 'plate' }
  });
  let redis = new Redis();
  await redis.del('beam:testing:format');

  let start = process.hrtime();
  let fmtr = formatToRedis(fmt.toJSON());
  console.log('formatToRedis', process.hrtime(start));

  start = process.hrtime();
  t.equal(await redis.hmset('beam:testing:format', fmtr), 'OK', 'redis set reports OK.');
  console.log('redis set', console.log(process.hrtime(start)));
github Streampunk / beamengine / test / storeFormatSpec.js View on Github external
let fmtr = formatToRedis(fmt.toJSON());
  console.log('formatToRedis', process.hrtime(start));

  start = process.hrtime();
  t.equal(await redis.hmset('beam:testing:format', fmtr), 'OK', 'redis set reports OK.');
  console.log('redis set', console.log(process.hrtime(start)));

  start = process.hrtime();
  let rfmtb = await redis.hgetallBuffer('beam:testing:format');
  console.log('redis get', process.hrtime(start));

  start = process.hrtime();
  let rfmto = formatFromRedis(rfmtb);
  console.log('formatFromRedis', process.hrtime(start));

  let rfmt = beamcoder.format(rfmto);
  t.ok(rfmt, 'roundtrip format is truthy.');

  t.equal(rfmt.oformat.name, 'wav', 'has WAV output format.');
  t.equal(rfmt.priv_data.peak_block_size, 192, 'has expected priv_data.peak_block_size.');
  t.equal(Buffer.compare(rfmt.key, Buffer.from('Wibble wobble')), 0, 'has expected key.');
  t.deepEqual(rfmt.metadata, { jelly: 'plate' }, 'has expected metadata.');

  await redis.quit();
  t.end();
});
github Streampunk / beamengine / test / appSpec.js View on Github external
test('List contents', async t => {
  try {
    let response = await request(server).get('/beams')
      .expect(200)
      .expect([]);
    t.ok(response.ok, 'empty response is OK.');
    t.equal(response.type, 'application/json', 'response is JSON.');

    let fmt = beamcoder.format({ url: 'test_url' });
    t.deepEqual(await redisio.storeFormat(fmt), ['OK'], 'stored test format.');
    response = await request(server).get('/beams')
      .expect(200)
      .expect([ 'test_url' ]);
    t.ok(response.ok, 'content now has the expected item.');

    t.comment('### Checking default range request.');
    t.ok(await flushdb(), 'database flushed OK.');
    for ( let x = 0 ; x < 100 ; x++ ) {
      fmt = beamcoder.format({ url: `test_url_${x}` });
      await redisio.storeFormat(fmt);
    }
    response = await request(server).get('/beams')
      .expect(200);
    t.ok(Array.isArray(response.body), 'response body is an array ...');
    t.equal(response.body.length, 10, '... of the default limit length of 10.');
github Streampunk / beamengine / test / testUtil.js View on Github external
get fmt() {
    let bfmt = beamcoder.format(fmt);
    bfmt.newStream(stream0);
    bfmt.newStream(stream1);
    return bfmt;
  },
  get pkt() {
github Streampunk / beamengine / test / appSpec.js View on Github external
.expect(200)
      .expect([]);
    t.ok(response.ok, 'empty response is OK.');
    t.equal(response.type, 'application/json', 'response is JSON.');

    let fmt = beamcoder.format({ url: 'test_url' });
    t.deepEqual(await redisio.storeFormat(fmt), ['OK'], 'stored test format.');
    response = await request(server).get('/beams')
      .expect(200)
      .expect([ 'test_url' ]);
    t.ok(response.ok, 'content now has the expected item.');

    t.comment('### Checking default range request.');
    t.ok(await flushdb(), 'database flushed OK.');
    for ( let x = 0 ; x < 100 ; x++ ) {
      fmt = beamcoder.format({ url: `test_url_${x}` });
      await redisio.storeFormat(fmt);
    }
    response = await request(server).get('/beams')
      .expect(200);
    t.ok(Array.isArray(response.body), 'response body is an array ...');
    t.equal(response.body.length, 10, '... of the default limit length of 10.');
    t.equal(response.body[0], 'test_url_0', 'first element as expected.');
    t.equal(response.body[9], 'test_url_9', 'last element as expected.');

    t.comment('### Limit and offset.');
    response = await request(server).get('/beams?offset=10&limit=42')
      .expect(200);
    t.ok(Array.isArray(response.body), 'response body is an array ...');
    t.equal(response.body.length, 42, '... of the set limit length of 42.');
    t.equal(response.body[0], 'test_url_10', 'first element as expected.');
    t.equal(response.body[41], 'test_url_51', 'last element as expected.');
github Streampunk / beamengine / lib / routes.js View on Github external
async function createBeam (ctx) {
  console.log(ctx.request.type, ctx.request.body);
  if ((!ctx.request.body) || (ctx.request.type != 'application/json') ||
    (typeof ctx.request.body !== 'object')) {
    throw Boom.badRequest('Request body must be a JSON document describing a format.');
  }
  if ((ctx.request.body.type !== 'format') && (ctx.request.body.type !== 'muxer') &&
     (ctx.request.body.type !== 'demuxer')) {
    throw Boom.badRequest('Request body must be of format type.');
  }
  let fmt;
  try {
    ctx.request.body.streams.forEach(x => x.codecpar && delete x.codecpar.codec_tag);
    fmt = beamcoder.format(ctx.request.body);
    let storeResult = await redisio.storeFormat(fmt, false);
    if (!storeResult.every(x => x && x.startsWith('OK'))) {
      throw Boom.badGateway('Failure to store format into Redis.');
    }
  } catch (err) {
    if (err.message.indexOf('exists') >= 0)
      throw Boom.conflict(err.message);
    throw Boom.badImplementation(err.message);
  }
  ctx.set('Location', beamPath({ fmtSpec: fmt.url }));
  ctx.status = 201;
  ctx.body = fmt;
}
github Streampunk / beamengine / lib / redisio.js View on Github external
async function retrieveFormat(url) {
  let redisZero = await redisPool.use();
  let key = `${config.redis.prepend}:${url}`;
  let fmtb = await redisZero.hgetallBuffer(key);
  if ((!fmtb) || (Object.keys(fmtb).length === 0)) {
    redisPool.recycle(redisZero);
    throw new Error(`Unable to retrieve a format with key '${key}'.`);
  }
  let fmto = mappings.formatFromRedis(fmtb);
  let result = beamcoder.format(fmto);
  if (fmto.nb_streams > 0) {
    let redisProms = [ redisZero ];
    for ( let x = 1 ; x < fmto.nb_streams ; x++ ) {
      redisProms.push(redisPool.use());
    }
    let redis = await Promise.all(redisProms);
    let getWork = [];
    for ( let x = 0 ; x < redis.length ; x++ ) {
      getWork.push(redis[x].hgetallBuffer(`${key}:stream_${x}`));
    }
    let strs = await Promise.all(getWork);
    if (strs.some(x => x === null)) {
      redis.forEach(x => redisPool.recycle(x));
      throw new Error(`Cannot retrieve at least one of the streams '${strs.map(x => x ? '.' : 'X')}'.`);
    }
    for ( let x = 0 ; x < strs.length ; x++ ) {