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,
});
});
});
}
그런데 우리는 파일을 쓰고, 다시 읽어야하는 과정이 조금은 비효율적이라고 느껴서 다른 방법을 찾아봤다.