TransWikia.com

Deploying on google App Engine : An error occurred: ffmpeg was killed with signal SIGABRT Error: ffmpeg was killed with signal SIGABRT

Stack Overflow Asked by Jérémy Gachon on January 16, 2021

I wrote a node-js api, with node-js and fluent-ffmpeg :

'use strict';
require('babel-register');
const path = require('path');    
const ffmpeg = require('fluent-ffmpeg');

[…]

var infs = new ffmpeg

infs.addInput(doc.data().url).outputOptions([
            '-preset slow', '-g 48', '-sc_threshold 0',
            '-map 0:0', '-map 0:1', '-map 0:0', '-map 0:1',
            '-s:v:0 1280x720', '-c:v:0 libx264', '-b:v:0 2000k',
            // "-var_stream_map", "'v:0,a:0 v:1,a:1'",
            '-master_pl_name ./' + req.params.id + '/master' + req.params.id + '.m3u8',
            '-f hls', '-hls_time 6', '-hls_list_size 0',
            '-hls_segment_filename ./' + req.params.id + '/fileSequence|' + req.params.id + '|%d|v%v.ts',
            '-max_muxing_queue_size 1024',
        ]).output('./' + req.params.id + '/video' + req.params.id + '.m3u8')
            .on('start', function (commandLine) {
                console.log('Spawned Ffmpeg with command: ' + commandLine);
            })
            .on('error', function (err, stdout, stderr) {
                console.log('An error occurred: ' + err.message, err, stderr);
            })
            .on('progress', function (progress) {
                console.log('Processing: ' + progress.percent + '% done')
            })
            .on('end', function (err, stdout, stderr) {

                console.log('Finished processing!' /*, err, stdout, stderr*/)
            })
            .run()
        res.status(200).send('GG').end();
    } 
   });

[…]

That work with

node app.js

on my macbook pro, but when i do

gcloud app deploy

and I call the public url, I have this logs :

Processing: undefined% done
An error occurred: ffmpeg was killed with signal SIGABRT Error: ffmpeg was killed with signal SIGABRT 

Here is my app.yaml :

    # Copyright 2017, Google, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# [START gae_flex_quickstart_yaml]
runtime: nodejs
env: flex

# This sample incurs costs to run on the App Engine flexible environment.
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 6
  disk_size_gb: 30

# [END gae_flex_quickstart_yaml]

enter image description here

How can I do to deploy correctly my node-js api on google app engine ?

Thank’s in advance.

Jérémy.

2 Answers

According to the library documentation:

In order to be able to use this module, make sure you have ffmpeg installed on your system (including all necessary encoding libraries like libmp3lame or libx264).

Checking the default node container (that you're using, according to the app.yaml), I'm not sure the right dependencies come pre-installed.

You can check by going to a deployed instance, enable debugging, and SSHing into it. You can follow the process detailed in the docs.

If all the required dependencies are not pre-installed, you'll have to build a custom container for GAE flex.

Since the node library fluent-ffmpeg is just running the local command (you can check in the code of the library), it can be that your local computer has everything installed, but it's missing components in the built image.

The fact that you're testing with node app.js (i.e. not in a build container, but with the local node), gives more credit to this idea.

Answered by Jofre on January 16, 2021

We do not have information about what exactly is doc.data().url, however this will be something you are getting from db document. So looking into addInput documentation, I guess, it has to be some local file name. Local file name is, as well, argument of output method.

This will work on your local environment, however when you deal with files in App Engine you have to use some storage services which is described here.

Answered by vitooh on January 16, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP