【发布时间】:2018-07-26 15:28:44
【问题描述】:
我正在使用 C# 开发 UWP 应用,我需要在进程中启动 FFmpeg。
我使用这个在 CMD 中运行良好的 ffmpeg 命令:
D:\ffmpeg.exe -f dshow -crossbar_video_input_pin_number 1 -i video="AVerMedia BDA 模拟捕捉" -vcodec rawvideo -pix_fmt yuv420p -s 864x768 -r 10 "D:\capture\output.yuv" -loglevel 16
但是当我在我的 UWP 应用程序中使用相同的命令和参数启动进程时,我从 ffmpeg 收到此错误:
[dshow @ 000001bd43907e80] 无法为 AVerMedia BDA 绑定对象 模拟捕获 [dshow @ 000001bd43907e80] 找不到视频设备 类型为 [AVerMedia BDA Analog Capture] 的源设备 视频。 video=AVerMedia BDA 模拟捕获:I/O 错误
这是我的代码:
string filename = @"D:\ffmpeg.exe";
string arg = " -f dshow -crossbar_video_input_pin_number [VIDEOPIN] -i video=\"AVerMedia BDA Analog Capture\" -vcodec rawvideo -pix_fmt [PIXELCONF] -s [SIZE] -r [FPS] \"[FOLDER]\\[VIDEONAME]\" -loglevel 16";
arg = path.Text;
if (!File.Exists(filename))
System.Diagnostics.Debug.WriteLine("Not exist ffmpeg");
arg = arg.Replace("[VIDEOPIN]", "1");
arg = arg.Replace("[VIDEODEVICE]", "AVerMedia BDA Analog Capture");
arg = arg.Replace("[PIXELCONF]", "yuv420p");
arg = arg.Replace("[SIZE]", "864x768");
arg = arg.Replace("[FPS]", "10");
arg = arg.Replace("[FOLDER]", "D:\\capture");
arg = arg.Replace("[VIDEONAME]", "output.yuv");
ProcessStartInfo pi = new ProcessStartInfo(filename, arg);
System.Diagnostics.Debug.WriteLine(pi.FileName + " " + pi.Arguments.ToString());
pi.RedirectStandardInput = true;
pi.RedirectStandardOutput = true;
pi.RedirectStandardError = true;
pi.UseShellExecute = false;
pi.CreateNoWindow = true;
process = new Process();
process.StartInfo = pi;
process.EnableRaisingEvents = true;
process.OutputDataReceived += new DataReceivedEventHandler(MyProcOutputHandler);
process.ErrorDataReceived += new DataReceivedEventHandler(MyProcErrorHandler);
process.Exited += new EventHandler(ExitedProcess);
process.Start();
process.BeginErrorReadLine();
process.BeginOutputReadLine();
编辑:这就是我所拥有的:
ffmpeg -list_devices true -f dshow -i dummy
ffmpeg 版本 N-90054-g474194a8d0 版权所有 (c) 2000-2018 FFmpeg 使用 gcc 7.2.0 (GCC) 配置构建的开发人员:--enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame - -enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp - -enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libmfx --enable-amf --enable-cuda --enable- cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth libavutil 56. 7.101 / 56. 7.101 libavcodec 58. 11.101 / 58. 11.101 libavformat 58. 9.100 / 58. 9.100 libavdevice 58. 1.100 / 58. 1.100 libavfilter 7. 12.100 / 7. 12.100 libswscale 5. 0.101 / 5. 0.101 libswresample 3. 0.101 / 3. 0.101 libpo stproc 55. 0.100 / 55. 0.100 [dshow @ 0000029065b07940] DirectShow 视频设备(有些可能同时是视频和音频设备)[dshow @ 0000029065b07940] “AVerMedia BDA 模拟捕获” [dshow @ 0000029065b07940] 替代 姓名 "@device_pnp_\?\pci#ven_1a0a&dev_6202&subsys_620f1461&rev_01#4&3632f028&0&00e6#{65e8773d-8f56-11d0-a3b9-00a0c9223196}{ca465100-deb0-4d19-818f-8f7474 [dshow @ 0000029065b07940] “AVerMedia BDA 模拟捕获辅助” [dshow @ 0000029065b07940] 备用名称 “@device_pnp_\?\pci#ven_1a0a&dev_6202&subsys_620f1461&rev_01#4&3632f028&0&00e6#{65e8773d-8f56-11d0-a3b9-00a0c9223196}{ede957b0-eaa5-4bf4-acf3-6e10c}”b436 [dshow @ 0000029065b07940] DirectShow 音频设备 [dshow @ 0000029065b07940] 无法枚举仅音频设备(或无 成立)。 dummy:请求立即退出
【问题讨论】:
-
您是否在同一用户下运行您的应用程序?
-
尝试在应用内运行
ffmpeg -list_devices true -f dshow -i dummy以查看可用的设备 -
是的,我正在使用同一个用户(或者我猜)运行我的应用程序。命令行: ffmpeg -list_devices true -f dshow -i dummy 显示设备列表并显示我的设备。
-
如果我尝试这个简单的行:ffmpeg -i input.mp4 output.avi。 ffmpeg表示权限被拒绝(甚至文件input.mp4存在)。
-
从 UWP 应用程序内部运行时,您能否发布
ffmpeg -list_devices true -f dshow -i dummy的输出?