在命令行中使用dshow时CreateProcess失败

ark*_*974 5 c++ winapi ffmpeg

尝试使用CreateProcess启动ffmpeg。

问题:

1)不能dshow在命令行中使用。

2)带有STDIN管道的RTMP流不显示该流。

问题:

1)命令行中与CreateProcess api有关的提示是什么?

2)怎么回事?如何解决该问题?

此代码有效:

BOOL bSuccess = CreateProcess(NULL,
    L"ffmpeg.exe -y -loop 1 -i kites.jpg  out.mp4",         
    NULL,   
    NULL,
    TRUE, 
    CREATE_NEW_CONSOLE, 
    NULL, 
    NULL,
    &siStartInfo,
    &piProcInfo);
Run Code Online (Sandbox Code Playgroud)

使用CreateProcess时失败dshow。但是,它在控制台中用作命令行。

BOOL bSuccess = CreateProcess(NULL,
    L"ffmpeg.exe -y -loop 1 -i kites.jpg  -f dshow  -i audio=\"Stereo Mix(Realtek High Definition Audio)\"  out.mp4",
    NULL,
    NULL,
    TRUE,
    CREATE_NEW_CONSOLE,
    NULL,
    NULL,
    &siStartInfo,
    &piProcInfo);
Run Code Online (Sandbox Code Playgroud)

编辑:(具有绝对路径,仍然没有运气)

std::wstring cmdArgslistSetChannel = L"ffmpeg.exe -y -loop 1 -i c:\test\kites.jpg  -f dshow  -i audio=\"Stereo Mix(Realtek High Definition Audio)\"  out.mp4";
bSuccess = CreateProcess(NULL, 
        &cmdArgslistSetChannel[0],
        NULL,          
        NULL,          
        TRUE,          
        CREATE_NEW_CONSOLE,            
        NULL,          
        NULL,          
        &siStartInfo, 
        &piProcInfo);  
Run Code Online (Sandbox Code Playgroud)

sec*_*pur 4

你快到了。您可以像这样指定绝对路径。确保文件夹名称中不存在空格,否则 ffmpeg 命令可能会再次失败。如果ffmpeg位于另一个文件夹中,您也应该指定路径。

std::wstring cmdArgslistSetChannel = L"c:\test\ffmpeg.exe -y -loop 1 -i \"c:\\test\\kites.jpg\"  -f dshow  -i audio=\"Stereo Mix(Realtek High Definition Audio)\"  out.mp4";
Run Code Online (Sandbox Code Playgroud)