【发布时间】: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