Передача потоков из Fluent-ffmpeg в Google Cloud Storage - PullRequest
1 голос
/ 28 октября 2019

Есть ли способ передать поток из Fluent-mmpeg в Google Cloud Storage? Я пытаюсь разрешить пользователю загружать любой тип мультимедиа (аудио или видео), и я хочу преобразовать его в flac перед загрузкой в ​​GCS.

Я использую несколько промежуточных программ на своем маршруте, например:


routes.post(
  '/upload',
  multer.single('audio'),
  ConvertController.convert,
  UploadController.upload,
  FileController.save,
  (req, res, next) => res.send('ok')
);

Мне удалось выполнить потоковую передачу из Multer в Fluent-mmpeg и сохранить в файл, используя этот код на ConvertController:

async convert(req, res, next) {
    ffmpeg(streamifier.createReadStream(req.file.buffer))
      .format('flac')
      .output('outputfile.flac')
      .audioChannels(1)
      .on('progress', function(progress) {
        console.log(progress);
      })
      .run();
  }

Но я хотел бы использовать.pipe () для передачи его в UploadController, где я бы затем загружал в GCS:

class UploadController {
  async upload(req, res, next) {
    const gcsHelpers = require('../helpers/google-cloud-storage');
    const { storage } = gcsHelpers;

    const DEFAULT_BUCKET_NAME = 'my-bucket-name';

    const bucketName = DEFAULT_BUCKET_NAME;
    const bucket = storage.bucket(bucketName);
    const fileName = `test.flac`;
    const newFile = bucket.file(fileName);

    newFile.createWriteStream({
      metadata: {
        contentType: file.mimetype
      }
    })

    file.on('error', err => {
      throw err;
    });

    file.on('finish', () => console.log('finished'));
  }

Проблема в том, что я нигде не могу найти объяснения, как я могу передать поток следующему промежуточному программному обеспечению.

Возможно ли это?

1 Ответ

1 голос
/ 28 октября 2019

Присоедините ваш поток ffmpeg к объекту req, и затем вы можете передать свой поток ffmpeg следующему промежуточному программному обеспечению, используя next(). Затем вы можете передать поток в ваш файл GCS.

Примерно так:

// ConvertController
req.ffpmegStream = ffmpeg(streamifier.createReadStream(req.file.buffer))
  .on('finish', next)

// UploadController
req.ffmpegStream.pipe(newFile.createWriteStream())

Ссылка:

...