The Lemon
The Lemon

Reputation: 1389

An FFMpeg function on azure is not handling simultaneous calls (more than 5)

I created a c# httptrigger function on azure which uses FFMpeg to add subtitles to a video, and then just output the video locally (nothing fancy, all the files are in the local resources for the function, and the output is there as well). The process runs perfectly fine when I test it, I made a C# app to call the function and when I test the app it works fine as well. The only problem is when I tell the app to call the function several times at once it will only work for three or four simultaneous calls, any more than that will cause all of the calls to fail. Below is included the function code, the C# app code, and the partial output for successful calls and for failed calls. Any help or advice would be greatly appreciated as always. Regards Cuan

note - the ffmpeg output from the azure function is largely omitted, as it produces output every few frames. I've included the start and the end of the output

This is the C# method which is being run multiple times at once.

    public static async void callHTTP(string url, int num)
    {
        using (var client = new HttpClient())
        {
            client.Timeout = TimeSpan.FromMinutes(10);
            var content = new StringContent(JsonConvert.SerializeObject(" {\"name\": \"Azure\"}"), Encoding.UTF8, "application/json");
            System.TimeSpan tmp = DateTime.Now - time1;
            Console.WriteLine("Process {0} has started after time {1}", num + 1, tmp.ToString());
            var response = await client.PostAsync(url, content);
            tmp = DateTime.Now - time1;
            Console.WriteLine("Process {0} has finished after time {1}", num + 1, tmp.ToString());
            if (response.IsSuccessStatusCode)
            {
                Console.WriteLine("this is a reply");
                finished += 1;
                tmp = DateTime.Now - time1;
                Console.WriteLine("Runningtime for process {0} was {1}", num + 1, tmp.ToString());
            }

        }
    }

This is the function being called

using System.Net;
using System;
using System.Diagnostics;
using System.ComponentModel;


public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{

log.Info("C# HTTP trigger function processed a request.");
//Basic Parameters
    string ffmpegFile = @"D:\home\site\wwwroot\CommonResources\ffmpeg.exe";
    string outputpath = @"D:\home\site\wwwroot\ffmpeg_generic_webhook\output\";
    string reloutputpath = "output/";
    string relinputpath = "input/";
    string outputfile = "video2.mp4";
    string dir =  @"D:\home\site\wwwroot\ffmpeg_generic_webhook\";

//Special Parameters
    string videoFile = "1 minute basic.mp4";
    string sub = "1 minute sub.ass";
//guid tmp files
    string f1 = videoFile;
    string f2 = sub;
//guid output
    Guid g3 = Guid.NewGuid();
    string outputGuid = g3+".mp4";

//argument
    string tmp = subArg(f1, f2, outputGuid );
//String.Format("-i \"" + @"input/tmp.mp4" + "\" -vf \"ass = '" + sub + "'\" \"" + reloutputpath +outputfile + "\" ");
log.Info("ffmpeg argument is: "+tmp);


//startprocess parameters
Process process = new Process();
process.StartInfo.FileName = ffmpegFile;
process.StartInfo.Arguments =  tmp;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.WorkingDirectory = dir;
//output handler

process.OutputDataReceived += new DataReceivedEventHandler(
    (s, e) => 
    { 
        log.Info("O: "+e.Data);
    }
);
process.ErrorDataReceived += new DataReceivedEventHandler(
    (s, e) => 
    { 
        log.Info("E: "+e.Data);
    }
);
//start process
process.Start();
log.Info("process started");
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
log.Info("process has finished, deleting any tmp files and replying");
return req.CreateResponse(HttpStatusCode.OK, outputGuid);
}

The output for the failed set of calls (they all run together, so the output is a bit jumbled)

2017-11-08T05:49:48.821 Function started (Id=1b2cc785-086d-495a-a994-3ee9b86bb926)
2017-11-08T05:49:48.834 Function started (Id=f0b9b383-b86b-4006-9e13-59861e2c0c35)
2017-11-08T05:49:48.834 Function started (Id=80c2a433-728e-42d3-804d-87461e369bd8)
2017-11-08T05:49:49.287 C# HTTP trigger function processed a request.
2017-11-08T05:49:49.287 ffmpeg argument is: -i "input/1 minute basic.mp4" -vf "ass = 'input/1 minute sub.ass'" "output/8ab2a4fd-39df-4da9-b0c5-5b33e95d6403.mp4"
2017-11-08T05:49:49.305 C# HTTP trigger function processed a request.
2017-11-08T05:49:49.305 ffmpeg argument is: -i "input/1 minute basic.mp4" -vf "ass = 'input/1 minute sub.ass'" "output/5805f054-db13-4154-8fe8-545161d2eb83.mp4"
2017-11-08T05:49:49.305 C# HTTP trigger function processed a request.
2017-11-08T05:49:49.305 ffmpeg argument is: -i "input/1 minute basic.mp4" -vf "ass = 'input/1 minute sub.ass'" "output/4275f98d-7a31-484c-960b-1e133056e895.mp4"
2017-11-08T05:49:49.381 process started
2017-11-08T05:49:49.428 process started
2017-11-08T05:49:49.491 E: ffmpeg version 3.3.3 Copyright (c) 2000-2017 the FFmpeg developers
2017-11-08T05:49:49.491 E:   built with gcc 7.1.0 (GCC)
2017-11-08T05:49:49.491 E:   configuration: --enable-gpl --enable-version3 --enable-cuda --enable-cuvid --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-zlib
2017-11-08T05:49:49.491 E:   libavutil      55. 58.100 / 55. 58.100
2017-11-08T05:49:49.491 E:   libavcodec     57. 89.100 / 57. 89.100
2017-11-08T05:49:49.491 E:   libavformat    57. 71.100 / 57. 71.100
2017-11-08T05:49:49.491 E:   libavdevice    57.  6.100 / 57.  6.100
2017-11-08T05:49:49.491 E:   libavfilter     6. 82.100 /  6. 82.100
2017-11-08T05:49:49.491 E:   libswscale      4.  6.100 /  4.  6.100
2017-11-08T05:49:49.491 E:   libswresample   2.  7.100 /  2.  7.100
2017-11-08T05:49:49.491 E:   libpostproc    54.  5.100 / 54.  5.100
2017-11-08T05:49:49.522 process started
2017-11-08T05:49:49.570 E: Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input/1 minute basic.mp4':
2017-11-08T05:49:49.570 E:   Metadata:
2017-11-08T05:49:49.570 E:     major_brand     : mp42
2017-11-08T05:49:49.570 E:     minor_version   : 0
2017-11-08T05:49:49.570 E:     compatible_brands: mp41isom
2017-11-08T05:49:49.570 E:     creation_time   : 2017-11-03T23:42:35.000000Z
2017-11-08T05:49:49.570 E:   Duration: 00:01:00.03, start: 0.000000, bitrate: 824 kb/s
2017-11-08T05:49:49.570 E:     Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 823 kb/s, 30.30 fps, 30.30 tbr, 30k tbn, 60 tbc (default)
2017-11-08T05:49:49.570 E:     Metadata:
2017-11-08T05:49:49.570 E:       creation_time   : 2017-11-03T23:42:35.000000Z
2017-11-08T05:49:49.570 E:       handler_name    : VideoHandler
2017-11-08T05:49:49.570 E:       encoder         : AVC Coding
2017-11-08T05:49:49.584 E: Stream mapping:
2017-11-08T05:49:49.584 E:   Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
2017-11-08T05:49:49.584 E: Press [q] to stop, [?] for help
2017-11-08T05:49:49.615 E: [Parsed_ass_0 @ 000000000117ee60] Shaper: FriBidi 0.19.6 (SIMPLE)
2017-11-08T05:49:49.631 process started
2017-11-08T05:49:49.929 process started
2017-11-08T05:49:50.069 process started
2017-11-08T05:49:50.115 process started
2017-11-08T05:49:54.990 E: [Parsed_ass_0 @ 000000000117ee60] Using font provider directwrite
2017-11-08T05:49:54.990 E: [Parsed_ass_0 @ 000000000117ee60] Added subtitle file: 'input/1 minute sub.ass' (5 styles, 6 events)
2017-11-08T05:49:55.006 E: [Parsed_ass_0 @ 000000000117ee60] fontselect: (Arial, 700, 0) -> Arial-BoldMT, 0, Arial-BoldMT
2017-11-08T05:49:55.006 E: [libx264 @ 00000000004dd860] using SAR=1/1
2017-11-08T05:49:55.006 E: [libx264 @ 00000000004dd860] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
2017-11-08T05:49:55.022 E: [libx264 @ 00000000004dd860] profile High, level 3.2
2017-11-08T05:49:55.022 E: [libx264 @ 00000000004dd860] 264 - core 152 r2851 ba24899 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=1 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
2017-11-08T05:49:55.022 E: Output #0, mp4, to 'output/8ab2a4fd-39df-4da9-b0c5-5b33e95d6403.mp4':
2017-11-08T05:49:55.022 E:   Metadata:
2017-11-08T05:49:55.022 E:     major_brand     : mp42
2017-11-08T05:49:55.022 E:     minor_version   : 0
2017-11-08T05:49:55.022 E:     compatible_brands: mp41isom
2017-11-08T05:49:55.022 E:     encoder         : Lavf57.71.100
2017-11-08T05:49:55.022 E:     Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=-1--1, 30.30 fps, 16k tbn, 30.30 tbc (default)
2017-11-08T05:49:55.022 E:     Metadata:
2017-11-08T05:49:55.022 E:       creation_time   : 2017-11-03T23:42:35.000000Z
2017-11-08T05:49:55.022 E:       handler_name    : VideoHandler
2017-11-08T05:49:55.022 E:       encoder         : Lavc57.89.100 libx264
2017-11-08T05:49:55.022 E:     Side data:
2017-11-08T05:49:55.022 E:       cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
2017-11-08T05:49:56.787 E: frame=    2 fps=0.4 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x
2017-11-08T05:49:56.851 E: frame=    4 fps=0.6 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x

lots of code omitted here, only showing one of the many calls failing due to character limit.

2017-11-08T05:50:27.695 E: x264 [error]: malloc of size 3233984 failed
2017-11-08T05:50:27.695 E: Video encoding failed
2017-11-08T05:50:27.932 E: frame=  112 fps=3.0 q=29.0 size=      92kB time=00:00:02.24 bitrate= 335.9kbits/s speed=0.0598x
2017-11-08T05:50:28.132 E: Conversion failed!
2017-11-08T05:50:28.274 E: frame=  164 fps=4.3 q=29.0 size=      97kB time=00:00:03.96 bitrate= 201.0kbits/s speed=0.104x
2017-11-08T05:50:28.304 E: Conversion failed!
2017-11-08T05:50:28.304 E: Conversion failed!
2017-11-08T05:50:28.336 E: frame=  253 fps=6.6 q=29.0 size=     159kB time=00:00:06.89 bitrate= 189.0kbits/s speed=0.179x
2017-11-08T05:50:30.163 E: frame=   27 fps=0.7 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x
2017-11-08T05:50:30.227 E: frame=   28 fps=0.7 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x
2017-11-08T05:50:30.276 E:
2017-11-08T05:50:30.305 O:
2017-11-08T05:50:30.727 E: frame=   40 fps=1.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x
2017-11-08T05:50:30.867 E: frame=  129 fps=3.2 q=29.0 size=      93kB time=00:00:02.80 bitrate= 272.3kbits/s speed=0.0693x
2017-11-08T05:50:30.929 E:
2017-11-08T05:50:30.929 O:
2017-11-08T05:50:30.929 E:
2017-11-08T05:50:30.948 O:
2017-11-08T05:50:31.290 E: frame=  178 fps=4.3 q=29.0 size=     116kB time=00:00:04.42 bitrate= 214.8kbits/s speed=0.108x
2017-11-08T05:50:31.822 E: frame=  133 fps=3.2 q=29.0 size=      94kB time=00:00:02.93 bitrate= 261.0kbits/s speed=0.0715x

working example (only one call)

2017-11-08T07:07:08.633 Function started (Id=5416410c-a185-44bd-8c9c-fc24efb80780)
2017-11-08T07:07:09.180 C# HTTP trigger function processed a request.
2017-11-08T07:07:09.180 ffmpeg argument is: -i "input/1 minute basic.mp4" -vf "ass = 'input/1 minute sub.ass'" "output/9a7af992-7202-45c6-a275-f71a184fc89b.mp4"
2017-11-08T07:07:09.508 process started
2017-11-08T07:07:10.992 E: ffmpeg version 3.3.3 Copyright (c) 2000-2017 the FFmpeg developers
2017-11-08T07:07:10.992 E:   built with gcc 7.1.0 (GCC)
2017-11-08T07:07:10.992 E:   configuration: --enable-gpl --enable-version3 --enable-cuda --enable-cuvid --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-zlib
2017-11-08T07:07:11.367 E:   libavutil      55. 58.100 / 55. 58.100
2017-11-08T07:07:11.367 E:   libavcodec     57. 89.100 / 57. 89.100
2017-11-08T07:07:11.367 E:   libavformat    57. 71.100 / 57. 71.100
2017-11-08T07:07:11.367 E:   libavdevice    57.  6.100 / 57.  6.100
2017-11-08T07:07:11.367 E:   libavfilter     6. 82.100 /  6. 82.100
2017-11-08T07:07:11.367 E:   libswscale      4.  6.100 /  4.  6.100
2017-11-08T07:07:11.367 E:   libswresample   2.  7.100 /  2.  7.100
2017-11-08T07:07:11.367 E:   libpostproc    54.  5.100 / 54.  5.100
2017-11-08T07:07:12.977 E: Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input/1 minute basic.mp4':
2017-11-08T07:07:12.977 E:   Metadata:
2017-11-08T07:07:12.977 E:     major_brand     : mp42
2017-11-08T07:07:12.977 E:     minor_version   : 0
2017-11-08T07:07:12.977 E:     compatible_brands: mp41isom
2017-11-08T07:07:12.977 E:     creation_time   : 2017-11-03T23:42:35.000000Z
2017-11-08T07:07:12.977 E:   Duration: 00:01:00.03, start: 0.000000, bitrate: 824 kb/s
2017-11-08T07:07:12.977 E:     Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 823 kb/s, 30.30 fps, 30.30 tbr, 30k tbn, 60 tbc (default)
2017-11-08T07:07:12.977 E:     Metadata:
2017-11-08T07:07:12.977 E:       creation_time   : 2017-11-03T23:42:35.000000Z
2017-11-08T07:07:12.977 E:       handler_name    : VideoHandler
2017-11-08T07:07:12.977 E:       encoder         : AVC Coding
2017-11-08T07:07:12.992 E: Stream mapping:
2017-11-08T07:07:13.008 E:   Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
2017-11-08T07:07:13.008 E: Press [q] to stop, [?] for help
2017-11-08T07:07:13.320 E: [Parsed_ass_0 @ 000000000107ee60] Shaper: FriBidi 0.19.6 (SIMPLE)
2017-11-08T07:07:14.987 E: [Parsed_ass_0 @ 000000000107ee60] Using font provider directwrite
2017-11-08T07:07:15.143 E: [Parsed_ass_0 @ 000000000107ee60] Added subtitle file: 'input/1 minute sub.ass' (5 styles, 6 events)
2017-11-08T07:07:15.455 E: [Parsed_ass_0 @ 000000000107ee60] fontselect: (Arial, 700, 0) -> Arial-BoldMT, 0, Arial-BoldMT
2017-11-08T07:07:15.833 E: [libx264 @ 00000000004fd860] using SAR=1/1
2017-11-08T07:07:15.911 E: [libx264 @ 00000000004fd860] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
2017-11-08T07:07:15.973 E: [libx264 @ 00000000004fd860] profile High, level 3.2
2017-11-08T07:07:15.973 E: [libx264 @ 00000000004fd860] 264 - core 152 r2851 ba24899 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=1 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
2017-11-08T07:07:15.973 E: Output #0, mp4, to 'output/9a7af992-7202-45c6-a275-f71a184fc89b.mp4':
2017-11-08T07:07:15.973 E:   Metadata:
2017-11-08T07:07:15.973 E:     major_brand     : mp42
2017-11-08T07:07:15.973 E:     minor_version   : 0
2017-11-08T07:07:15.973 E:     compatible_brands: mp41isom
2017-11-08T07:07:15.973 E:     encoder         : Lavf57.71.100
2017-11-08T07:07:15.973 E:     Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=-1--1, 30.30 fps, 16k tbn, 30.30 tbc (default)
2017-11-08T07:07:15.973 E:     Metadata:
2017-11-08T07:07:15.973 E:       creation_time   : 2017-11-03T23:42:35.000000Z
2017-11-08T07:07:15.973 E:       handler_name    : VideoHandler
2017-11-08T07:07:15.973 E:       encoder         : Lavc57.89.100 libx264
2017-11-08T07:07:15.973 E:     Side data:
2017-11-08T07:07:15.973 E:       cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
2017-11-08T07:07:16.137 E: frame=    2 fps=0.7 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x
2017-11-08T07:07:16.528 E: frame=   21 fps=6.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x
2017-11-08T07:07:17.622 E: frame=   43 fps=9.5 q=29.0 size=      34kB time=-00:00:00.03 bitrate=N/A speed=N/A
2017-11-08T07:07:18.122 E: frame=   46 fps=9.1 q=29.0 size=      35kB time=00:00:00.06 bitrate=4372.6kbits/s speed=0.013x

~omitted~

2017-11-08T07:07:30.809 E: [Parsed_ass_0 @ 000000000107ee60] fontselect: (Arial, 400, 0) -> ArialMT, 0, ArialMT

2017-11-08T07:08:43.186 E: frame= 1819 fps= 20 q=29.0 Lsize=     992kB time=00:00:59.92 bitrate= 135.6kbits/s speed=0.665x
2017-11-08T07:08:43.186 E: video:971kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.171792%
2017-11-08T07:08:43.217 E: [libx264 @ 00000000004fd860] frame I:8     Avg QP:12.19  size: 44849
2017-11-08T07:08:43.217 E: [libx264 @ 00000000004fd860] frame P:532   Avg QP:16.00  size:   923
2017-11-08T07:08:43.217 E: [libx264 @ 00000000004fd860] frame B:1279  Avg QP:20.61  size:   112
2017-11-08T07:08:43.217 E: [libx264 @ 00000000004fd860] consecutive B-frames:  4.7%  0.8% 11.4% 83.1%
2017-11-08T07:08:43.217 E: [libx264 @ 00000000004fd860] mb I  I16..4: 49.2% 24.2% 26.7%
2017-11-08T07:08:43.217 E: [libx264 @ 00000000004fd860] mb P  I16..4:  0.2%  0.3%  0.1%  P16..4:  2.6%  0.3%  0.4%  0.0%  0.0%    skip:96.2%
2017-11-08T07:08:43.217 E: [libx264 @ 00000000004fd860] mb B  I16..4:  0.0%  0.1%  0.0%  B16..8:  2.1%  0.0%  0.0%  direct: 0.0%  skip:97.7%  L0:40.0% L1:59.7% BI: 0.3%
2017-11-08T07:08:43.233 E: [libx264 @ 00000000004fd860] 8x8 transform intra:39.3% inter:39.5%
2017-11-08T07:08:43.233 E: [libx264 @ 00000000004fd860] coded y,uvDC,uvAC intra: 16.3% 15.7% 8.8% inter: 0.5% 0.0% 0.0%
2017-11-08T07:08:43.233 E: [libx264 @ 00000000004fd860] i16 v,h,dc,p: 56% 31%  4%  9%
2017-11-08T07:08:43.233 E: [libx264 @ 00000000004fd860] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 24%  9% 65%  1%  0%  0%  0%  0%  0%
2017-11-08T07:08:43.233 E: [libx264 @ 00000000004fd860] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 31% 21% 15%  6%  6%  6%  4%  6%  4%
2017-11-08T07:08:43.233 E: [libx264 @ 00000000004fd860] i8c dc,h,v,p: 71% 16% 11%  1%
2017-11-08T07:08:43.233 E: [libx264 @ 00000000004fd860] Weighted P-Frames: Y:0.0% UV:0.0%
2017-11-08T07:08:43.233 E: [libx264 @ 00000000004fd860] ref P L0: 71.3% 12.7% 14.6%  1.4%
2017-11-08T07:08:43.233 E: [libx264 @ 00000000004fd860] ref B L0: 69.3% 29.3%  1.4%
2017-11-08T07:08:43.233 E: [libx264 @ 00000000004fd860] ref B L1: 97.0%  3.0%
2017-11-08T07:08:43.233 E: [libx264 @ 00000000004fd860] kb/s:132.38
2017-11-08T07:08:43.295 O:
2017-11-08T07:08:43.295 E:
2017-11-08T07:08:43.342 Function completed (Success, Id=5416410c-a185-44bd-8c9c-fc24efb80780, Duration=94698ms)

Upvotes: 1

Views: 783

Answers (1)

Chris Gillum
Chris Gillum

Reputation: 15052

As Evk mentioned in a comment, it looks like the problem is that you are running out of memory. Function apps in the Consumption plan are limited to 1.5 GB of RAM so I'm guessing that running multiple instances of ffmpeg is causing you to exceed that limit.

Some suggestions for how you could improve the reliability:

  1. Use a static SemaphoreSlim to throttle the number of concurrent ffmpeg processes that you spawn. This will increase your HTTP request latency if more than a few requests arrive around the same time, but it's a very simple solution that should generally work.
  2. Have your HTTP trigger drop a message in a queue which triggers a different function. Then update your host.json to only allow 4 or 5 concurrent messages to be processed simultaneously. If you're using the Azure Functions Consumption plan, a backlog of queue messages should trigger an automatic scale-out so that you get more VMs and thus more memory and more concurrency.

You can learn more about the options for controlling queue processing concurrency here: https://github.com/Azure/azure-webjobs-sdk-script/wiki/host.json

Upvotes: 2

Related Questions