在Google Cloud Functions(ffmpeg)中创建hls流

时间:2018-11-03 20:48:35

标签: ffmpeg google-cloud-storage google-cloud-functions hls fluent-ffmpeg

我试了好几个小时都没有好结果。

我想借助Google云功能创建hls流(通过mp4视频)。

这是我到目前为止提出的:

  const remoteReadStream = myBucket.file(vidPath).createReadStream();
  const remoteWriteStream = myBucket.file(vidPath.replace('.mp4', '.m3u8')).createWriteStream();


  var proc = ffmpeg()
    .input(remoteReadStream)
  // Base url
  // include all the segments in the list
  .addOption('-hls_time',4)
  .addOption('-c:a aac')
  .addOption('-ar 48000')
  .addOption('-c:v h264')
  .addOption('-profile:v main')
  .addOption('-crf 20')
  .addOption('-sc_threshold 0')
  .addOption('-g 48')
  .addOption('-keyint_min 48')
  .addOption('-hls_playlist_type vod')
  .addOption('-b:v 800k')
  .addOption('-maxrate 856k')
  .addOption('-bufsize 1200k')   
  .addOption('-b:a 96k')
  .addOption('-hls_segment_filename', 'this_is_not_working_%03d.ts') 
              *tried gs://.../videos/$03d.ts' as well as other paths...
  .outputOptions('-f hls')
  .on('progress', function(progress) {

    var processing_str = 'Processing:' + progress.percent + '% done';
    console.log(processing_str);
  })
  .on('end', function() {
    console.log('file has been ffmpeg succesfully');
  })
  .on('error', (err, stdout, stderr) => {
      console.error('An error occured during encoding', err.message);
      console.error('stdout:', stdout);
      console.error('stderr:', stderr);
    })
  .pipe(remoteWriteStream, { end: true });

这将给我m3u8文件,但是不会创建头文件(ts文件),导致无法保存它们。 m3u8文件是流,因此已保存。

打开'xxx.ts'进行写入无法为输出文件#0写入标题(编解码器参数不正确?)

我想将它们保存在同一文件夹中,但是我无法通过存储桶访问它。 有谁知道如何在ffmpeg配置中“创建”多个文件(赋予存储桶的确切路径)?

也许将它们另存为流将是答案,但是我不知道如何将该流(.createWriteStream();)作为参数传递。

预先感谢

0 个答案:

没有答案