fluent-ffmpeg로 hls 변환을 시도했다!


ffmpeg는 기본적으로 .output , .save 등으로 결과물을 local에 저장할 수 있다.
ffmpeg("input.mp4")
    .addOptions([
      "-profile:v baseline",
      "-level 3.0",
      "-s 640x360",
      "-hls_time 1",
      "-start_number 0",
      "-hls_list_size 0",
      "-f hls",
    ]).save('./output.m3u8');
이렇게 하면 master.m3u8 , master01.ts , master02.ts , … 가 지정된 경로에 저장된다.
local의 파일을 다시 읽어서 Object Storage에 업로드하는 것은 어렵지 않다.
// 이런 느낌
uploadObject({bucketName: process.env.outputbucket, objectName: '612391284719.m3u8', file: 'master.m3u8'})
function uploadObject(params) {
  const S3 = new AWS.S3({
    endpoint,
    region,
    credentials: {
      accessKeyId: process.env.accessKey,
      secretAccessKey: process.env.secretKey,
    },
  });
  return new Promise((resolve, reject) => {
    S3.putObject({
      Bucket: params.bucketName,
      Key: params.objectName,
      Body: fs.createReadStream(params.file),
    })
      .promise()
      .then(() => {
        resolve({ done: true });
      })
      .catch((error) => {
        reject({
          done: false,
          errorMessage: error,
        });
      });
  });
}
그런데 우리는 파일을 쓰고, 다시 읽어야하는 과정이 조금은 비효율적이라고 느껴서 다른 방법을 찾아봤다.