ffmedia模块ModuleFileWriter写的视频文件没有按原视频的fps
ffmedia v2.2.4版本的ModuleFileWriter模块,写的视频文件没有按原视频的fps,播放的时候帧率跳得非常快,没法控制本帖最后由 nboxcn 于 2024-3-7 10:32 编辑
写视频文件,跑不到一天一夜就crash崩溃,总体文件不到10G,每个文件不大于20M进行分割,磁盘剩余空间还有很多,存储盘为固态SSD盘,错误信息
ERROR: 17DynamicFileWriter: work: Consume failed
WARN: ff_media: encode: Fail to handle media data: -2
ERROR: 17DynamicFileWriter: work: Consume failed
WARN: ff_media: encode: Fail to handle media data: -2
ERROR: 17DynamicFileWriter: work: Consume failed
WARN: ff_media: encode: Fail to handle media data: -2
ERROR: 17DynamicFileWriter: work: Consume failed
WARN: ff_media: encode: Fail to handle media data: -2
ERROR: 17DynamicFileWriter: work: Consume failed
Segmentation fault (core dumped)
nboxcn 发表于 2024-3-7 10:30
写视频文件,跑不到一天一夜就crash崩溃,总体文件不到10G,每个文件不大于20M进行分割,磁盘剩余空间还有 ...
1. 这个错误不影响,changeFileName之后,如果第一帧没有参数集(sps、pps等),会封装失败丢弃该帧,直到参数集到来,编码模块默认gop是60,也就是间隔59帧才有i帧带参数集来。
2. 段错误可以使用gdb查看core文件定位引发core dump的函数或某一行。
好的,感谢大神! 本帖最后由 nboxcn 于 2024-3-23 14:03 编辑
目标是想实现自动录制10秒的视频文件,使用ModuleFileWriter写视频文件,10秒后自动停止,单使用了stop()后就会出错,并导致程序异常变慢,最终会crash并自动重启系统,报错信息
INFO: 10MppDecoder: getTimeoutSample: 0x559d447e40 frame info changed 0 error 1 discard 0
ERROR: 10RTSPClient: postRecvBuf: wait for client to post recv buffer time out
ERROR: 10RTSPClient: postRecvBuf: wait for client to post recv buffer time out
WARN: 12ModuleMppEnc: waitAllForConsume: wait for consumer ModuleFileWriter timeout
WARN: 12ModuleMppEnc: waitAllForConsume: ModuleFileWriter lost a frame
WARN: 12ModuleMppEnc: waitAllForConsume: input queue empty: 0
WARN: 9ModuleRga: waitAllForConsume: wait for consumer ModuleMppEnc timeout
WARN: 9ModuleRga: waitAllForConsume: ModuleMppEnc lost a frame
WARN: 9ModuleRga: waitAllForConsume: input queue empty: 0
ERROR: 9ModuleRga: work: wait for productor ModuleMppDec timeout
WARN: 16ModuleRtspClient: waitAllForConsume: wait for consumer ModuleMppDec timeout
WARN: 16ModuleRtspClient: waitAllForConsume: ModuleMppDec lost a frame
WARN: 16ModuleRtspClient: waitAllForConsume: input queue empty: 0
INFO: ff_media: processNextPacket: pt: 96, rtp sequence error: 29703, prev: 29700
ERROR: 19ModuleRendererVideo: work: wait for productor ModuleRga timeout
INFO: 10MppDecoder: getTimeoutSample: 0x559d447e40 frame info changed 0 error 1
如果新建一个子类,使用restart()修改文件名,则可以继续进行,但是也要一直写文件才行,如果使用了stop()还是会报上面的错误,最终导致系统错误重启,是否要把source层先stop()后,再把FileWriter层stop()并start() source层,是需要那样使用吗?请指教正确的使用方法,谢谢! 本帖最后由 nboxcn 于 2024-3-23 14:39 编辑
另外,如果用FileWriter写视频软件,内容来自rga层那么就会丢失fps,写出来的视频文件就不是按原来的fps播放,以极快的速度播放,加file_writer->setSynchronize(make_shared<Synchronize>(SynchronizeType(SYNCHRONIZETYPE_VIDEO))); 也不奏效,应该如何处理?谢谢!
编码大概如下:
input_para = dec->getOutputImagePara();
output_para = input_para;
output_para.width = input_para.width;
output_para.height = input_para.height;
output_para.hstride = output_para.width;
output_para.vstride = output_para.height;
output_para.v4l2Fmt = V4L2_PIX_FMT_NV12;
shared_ptr<ModuleRga> rga2 = make_shared<ModuleRga>(output_para, RGA_ROTATE_NONE);
// The producer of the rga module is the same as the inference module producer.
rga2->setProductor(rga);
ret = rga2->init();
if (ret < 0) {
ff_error("rga init failed\n");
}
// // 2.3 encode
input_para = rga2->getOutputImagePara();
shared_ptr<ModuleMppEnc> enc = make_shared<ModuleMppEnc>(ENCODE_TYPE_H265, input_para, 30, 30);
enc->setProductor(rga2);
enc->setBufferCount(8);
enc->setDuration(0);// Use the input source timestamp
ret = enc->init();
if (ret < 0) {
ff_error("Enc init failed\n");
}
// write file
file_writer = make_shared<ModuleFileWriter>("/srv/src/storage/out.mp4");
file_writer->setProductor(enc);
ret = file_writer->init();
if (ret < 0) {
ff_error("ModuleFileWriter init failed\n");
}
出错信息如下:
WARN: 12ModuleMppEnc: waitAllForConsume: wait for consumer ModuleFileWriter timeout
WARN: 12ModuleMppEnc: waitAllForConsume: ModuleFileWriter lost a frame
WARN: 12ModuleMppEnc: waitAllForConsume: input queue empty: 0
ERROR: 16ModuleRtspServer: work: wait for productor ModuleMppEnc timeout
WARN: 9ModuleRga: waitAllForConsume: wait for consumer ModuleMppEnc timeout
WARN: 9ModuleRga: waitAllForConsume: ModuleMppEnc lost a frame
WARN: 9ModuleRga: waitAllForConsume: input queue empty: 0
WARN: 16ModuleFileReader: waitAllForConsume: wait for consumer ModuleMppDec timeout
WARN: 16ModuleFileReader: waitAllForConsume: ModuleMppDec lost a frame
WARN: 16ModuleFileReader: waitAllForConsume: input queue empty: 0
nboxcn 发表于 2024-3-22 19:17
目标是想实现自动录制10秒的视频文件,使用ModuleFileWriter写视频文件,10秒后自动停止,单使用了stop()后 ...
您好,这个问题解决了吗?
页:
[1]