CreateProcess()的使用
时间: 2024-02-12 18:40:27 浏览: 125
CreateProcess函数
CreateProcess()是Windows系统提供的API函数,可以用于创建新的进程并运行指定的可执行文件。下面是一个简单的示例代码,演示了如何使用CreateProcess()函数来执行ffmpeg指令:
```cpp
#include <windows.h>
#include <iostream>
int main()
{
// 设置ffmpeg指令
std::string ffmpeg_cmd = "ffmpeg.exe -i rtsp://ip_address:port/stream_url -c:v copy -c:a aac -f flv http://ip_address:port/hls/live_stream.flv";
// 替换为你的rtsp流地址和http服务器地址
// 初始化STARTUPINFO和PROCESS_INFORMATION结构体
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi = { 0 };
// 创建新的子进程
if (!CreateProcess(NULL, (LPSTR)ffmpeg_cmd.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
std::cerr << "Failed to create process: " << GetLastError() << std::endl;
return -1;
}
// 等待子进程退出
WaitForSingleObject(pi.hProcess, INFINITE);
// 关闭句柄
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
// 执行成功,可以在web页面中使用flv.js等工具播放http-flv视频流了
return 0;
}
```
在上述代码中,我们首先定义了一个字符串变量`ffmpeg_cmd`,用于存储ffmpeg指令。然后,我们初始化了`STARTUPINFO`和`PROCESS_INFORMATION`结构体,这两个结构体用于传递子进程的信息。接着,我们调用CreateProcess()函数来创建新的子进程,并将ffmpeg指令作为参数传递给它。如果CreateProcess()函数执行成功,它将返回一个非零值,并且`PROCESS_INFORMATION`结构体中将包含新进程的句柄和线程ID。最后,我们使用WaitForSingleObject()函数等待子进程退出,并使用CloseHandle()函数关闭句柄。
需要注意的是,在使用CreateProcess()函数时,需要将ffmpeg指令转换为LPSTR类型的指针。如果你使用的是Unicode编码,还需要将指令转换为LPWSTR类型的指针。另外,CreateProcess()函数还有许多其他的参数和选项可以配置,具体可以参考Windows官方文档。
阅读全文