如何在Windows系统下使用FFmpeg命令将.ts文件数据写入命名管道
如何在Windows系统下使用FFmpeg命令将.ts文件数据写入命名管道
我之前刚好做过类似的测试,给你梳理下完整的操作步骤:
首先得先创建好Windows的命名管道,我当时用C++写了一段核心代码来创建管道:
HANDLE hPipe = CreateNamedPipe( "\\\\.\\pipe\\mpegts", // Windows命名管道的固定格式:\\.\pipe\管道名 PIPE_ACCESS_DUPLEX, // 设置管道为双向访问模式 PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, // 字节传输模式+阻塞等待 PIPE_UNLIMITED_INSTANCES, // 允许创建无限个管道实例 1024 * 1024 * 10, // 输出缓冲区大小(10MB) 1024 * 1024 * 10, // 输入缓冲区大小(10MB) 0, // 使用默认超时设置 NULL // 使用默认安全属性 ); if (hPipe == INVALID_HANDLE_VALUE) { // 这里可以补充错误处理逻辑,比如打印GetLastError()获取具体错误码 return -1; } // 保持管道处于监听状态,等待客户端连接 Sleep(1000000);
这段代码会创建一个名为mpegts的命名管道,并且一直处于等待状态,直到有程序连接进来写入数据。
接下来就是用FFmpeg把.ts文件的数据写入这个管道了,Windows下要注意命名管道的路径转义,完整命令如下:
ffmpeg -re -stream_loop -1 -i input.ts -c copy -f mpegts "\\\\.\\pipe\\mpegts"
给你解释几个关键参数:
-re:按照视频的实际帧率读取数据,避免一次性把文件全部读完-stream_loop -1:无限循环读取输入的.ts文件-i input.ts:替换成你实际的.ts文件路径-c copy:直接复制音视频流,不做编码转码,保证效率-f mpegts:指定输出格式为mpegts,和管道接收端的格式匹配\\\\.\\pipe\\mpegts:命令行里反斜杠需要转义,所以用四个反斜杠开头,也可以用双引号直接包裹\\.\pipe\mpegts
⚠️ 注意操作顺序:必须先运行创建管道的C++程序,让管道处于监听状态,再启动FFmpeg命令,否则FFmpeg会因为找不到管道而报错。
备注:内容来源于stack exchange,提问作者qyt
相关产品推荐
相关产品推荐

