我在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 的多个实例会导致您超出该限制。
有关如何提高可靠性的一些建议:
- 使用静态 SemaphoreSlim限制您生成的并发 ffmpeg 进程的数量。如果多个请求同时到达,这会增加您的 HTTP 请求延迟,但这是一个非常简单的解决方案,通常应该有效。
- 让您的 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/