【问题标题】:Using DirectX from subprocess executed by windows service使用 Windows 服务执行的子进程中的 DirectX
【发布时间】:2019-05-23 05:28:34
【问题描述】:

我需要从 Windows 服务执行 ffmpeg 进程并捕获它的标准输出。在我使用硬件加速之前它工作正常。因为从windows服务访问DirectX受到限制,子进程也无法访问。

当我从控制台应用程序执行相同的代码时,一切正常,但从 Windows 服务执行的相同代码无法使用硬件加速。

        string ffmpegArgs = /*-hwaccel dxva2 */"-threads 0 -probesize 100512 -i c:/Temp/test.mp4 -vf yadif -vcodec libx264 -preset ultrafast -tune zerolatency -profile baseline -x264-params keyint=20:min-keyint=20:scenecut=-1 -acodec aac -b:a 48k -flags +cgop -f mp4 -movflags empty_moov+default_base_moof+frag_keyframe c:/temp/output.avi";

        var psi = new ProcessStartInfo
        {
            FileName = "c:/Temp/ffmpeg4/ffmpeg.exe",
            Arguments = ffmpegArgs,
            WorkingDirectory = "c:/Temp/ffmpeg4",
            CreateNoWindow = false,
            WindowStyle = ProcessWindowStyle.Hidden,
            RedirectStandardInput = false,
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            UseShellExecute = false
        };

        var processVideo = new Process { StartInfo = psi }.Start();

我需要以某种方式打破继承的限制,以便能够使用硬件加速执行 ffmpeg(访问 DirectX API)。有什么建议吗?

【问题讨论】:

  • 您的代码适用于我从具有本地系统帐户的服务执行。我在 Windows 10 1903 上测试。你的 Windows 版本是什么?
  • 你可以试试 -hwaccel d3d11va 看 ffmpeg 是否可以初始化 DX 11 设备?
  • @RitaHan-MSFT 您是否取消了“-hwaccel dxva2”部分的注释?我正在运行 Win10 Pro 17763
  • @VuVirt 非常感谢,您的解决方案对我有用!
  • @IgorGorelik 不,我没有取消注释“-hwaccel dxva2”部分。我在你的问题中使用了确切的代码。

标签: c# winapi ffmpeg windows-services directx


【解决方案1】:

您可以指示 FFMPEG 进程使用DirectX 11 Hardware Video acceleration。 在这种情况下,FFMPEG 将需要通过调用 D3D11CreateDevice 函数来创建一个 DirectX 11 device,该函数不需要提供任何窗口句柄。

为了使 FFMPEG 使用 DirectX 11 硬件视频加速,您需要指定以下 hwaccel 参数:

-hwaccel d3d11va

【讨论】:

    【解决方案2】:

    如果您在服务对话框中右键单击该服务 -> 属性 -> 登录,您应该会看到如下内容:

    选中“允许服务与桌面交互”框,这应该使您能够访问这些“受限”API

    【讨论】:

    • 不幸的是,它没有帮助。还是同样的错误:[AVHWDeviceContext @ 00000217ef3bfb40] 无法创建 Direct3D 设备
    猜你喜欢
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    相关资源
    最近更新 更多