c# - azure 上的 FFMpeg 函数无法处理同时调用(超过 5 个)

标签 c# azure ffmpeg azure-functions

我在azure上创建了一个c# httptrigger函数,它使用FFMpeg向视频添加字幕,然后在本地输出视频(没什么花哨的,所有文件都在该函数的本地资源中,输出如下出色地)。当我测试它时,该过程运行得非常好,我制作了一个 C# 应用程序来调用该函数,当我测试该应用程序时,它也运行得很好。唯一的问题是,当我告诉应用程序一次多次调用该函数时,它只能同时进行三到四个调用,超过这个数量将导致所有调用失败。 下面包括函数代码、C# 应用程序代码以及成功调用和失败调用的部分输出。任何帮助或建议将一如既往地不胜感激。问候爨

注意 - azure 函数的 ffmpeg 输出大部分被省略,因为它每隔几帧就会产生输出。我已经包含了输出的开始和结束

这是同时运行多次的 C# 方法。

    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());
            }

        }
    }

这是被调用的函数

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);
}

失败的调用集的输出(它们都一起运行,因此输出有点困惑)

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

此处省略了大量代码,仅显示由于字符限制而失败的众多调用之一。

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

工作示例(仅一次调用)

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

~省略~

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)

最佳答案

正如 Evk 在评论中提到的,问题似乎是内存不足。消耗计划中的函数应用程序限制为 1.5 GB RAM,因此我猜测运行 ffmpeg 的多个实例会导致您超出该限制。

有关如何提高可靠性的一些建议:

  1. 使用静态 SemaphoreSlim限制您生成的并发 ffmpeg 进程的数量。如果多个请求同时到达,这会增加您的 HTTP 请求延迟,但这是一个非常简单的解决方案,通常应该有效。
  2. 让您的 HTTP 触发器在队列中删除一条消息,从而触发不同的函数。然后更新您的 host.json 以仅允许同时处理 4 或 5 个并发消息。如果您使用的是 Azure Functions 消耗计划,积压的队列消息应该会触发自动横向扩展,以便您获得更多虚拟机,从而获得更多内存和更多并发性。

您可以在此处了解有关控制队列处理并发性的选项的更多信息:https://github.com/Azure/azure-webjobs-sdk-script/wiki/host.json

关于c# - azure 上的 FFMpeg 函数无法处理同时调用(超过 5 个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47173659/

相关文章:

c# - System.ObjectDisposedException : The ObjectContext instance has been disposed and can no longer be used for operations that require a connection

c# - .NET MAUI VISUAL STUDIOS 2022 如何让状态栏全透明

c# - 参数化查询需要 C# SQL 未提供的参数

c# - 使用 C# 将 PDF 转换为可工作的文本

c# - Asp.Net Azure Cloud - 获取文件大小需要很长时间

c++ - 如何在 Xcode 中使用 OpenCV 3.4.14 识别 .mp4 视频文件的编解码器?

azure - 确定 Kusto 事件的持续时间?

azure - Azure Service Fabric 中的主节点和非主节点有什么区别?

java - 使用 Xuggler 通过 Java 检测网络摄像头

windows - FFMPEG(windows7)无法让输出视频显示超过 10 个 jpg 中的 3 个