如何解决如何启动FFmpeg进程,创建管道并从父进程写入数据?
我的代码基于 https://stackoverflow.com/a/32279430/5941827。
我使用以下参数运行 FFmpeg:
std::stringstream sstm;
sstm << "ffmpeg -loglevel error -y -f rawvideo -vcodec rawvideo -s " << std::to_string(width) << "x" << std::to_string(height) //
<< " -pix_fmt rgb24 -framerate " << std::to_string(fps) << " -i - -c:v libx264 -preset " << getPreset(encodeSpeed) << //
" -crf " << std::to_string(crf) << " -shortest " << path;
(变量在类构造函数中正确初始化)
然后我用 pPipe = popen(sstm.str().c_str(),"w")
打开管道。问题是在我 fwrite
到它并调用 fclose
之后,根据我写的内容,有时或多或少的字节到达 FFmpeg,并且我得到
[rawvideo @ 000000000010c3df] Invalid buffer size,packet size 196606 < expected frame_size 196608
Error while decoding stream #0:0: Invalid argument
保存的输出视频通常比预期多或少一帧。
我已经用 fwrite
检查了我通过管道发送的数组,它的大小是正确的。
看来根据我发送的数据,有些字节没有到达那里,或者通过管道发送的字节数比我发送的多。
我也尝试了两种不同的 FFmpeg 版本,但错误信息相同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。