gpt4 book ai didi

c# - 使用 Windows 服务执行的子进程中的 DirectX

转载 作者:行者123 更新时间:2023-12-04 11:36:48 35 4
gpt4 key购买 nike

我需要从 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)。有什么建议么?

最佳答案

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

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

-hwaccel d3d11va

关于c# - 使用 Windows 服务执行的子进程中的 DirectX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56268560/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com