如何使用ffplay读取两个命名管道合并播放raw音视频缓冲区
问题原因
该报错是Windows平台下ffplay对未标准化处理的命名管道路径解析异常导致:未加引号、未做转义的带反斜杠管道路径,会被ffplay的参数解析逻辑错误判定为两个输入路径重复。
解决方案
修正后命令(通用兼容版)
ffplay -f rawvideo -pixel_format bgr24 -video_size 1280x720 -vf "transpose=2,transpose=2" -i "\\.\pipe\VirtualVideoPipe" -f s32le -channels 2 -sample_rate 44100 -i "\\.\pipe\VirtualAudioPipe" -map 0:v -map 1:a -sync audio
参数说明
- 管道路径用双引号包裹并对反斜杠做转义,避免路径解析错误,也可替换为无需转义的正斜杠写法
//./pipe/VirtualVideoPipe,ffplay可正常识别Windows路径的正斜杠写法 -map 0:v显式指定取用第一个输入(视频管道)的视频流作为播放源的视频轨道-map 1:a显式指定取用第二个输入(音频管道)的音频流作为播放源的音频轨道-sync audio设定以音频时钟为基准做音视频同步,避免播放过程中出现音画不同步问题,如需要以视频为基准可替换为-sync video
注意事项
- 播放前需保证两个命名管道的写入端都正常运行,ffplay打开管道后会等待两侧都有数据输入才会启动播放,单端无数据会导致程序无响应
- PowerShell环境下如果路径依然识别异常,优先使用正斜杠版本的路径写法,示例如下:
ffplay -f rawvideo -pixel_format bgr24 -video_size 1280x720 -vf "transpose=2,transpose=2" -i //./pipe/VirtualVideoPipe -f s32le -channels 2 -sample_rate 44100 -i //./pipe/VirtualAudioPipe -map 0:v -map 1:a -sync audio
内容的提问来源于stack exchange,提问作者user8616480
相关产品推荐
相关产品推荐

