nboxcn 发表于 2024-3-6 15:35:11

ffmedia模块ModuleFileWriter写的视频文件没有按原视频的fps

ffmedia v2.2.4版本的ModuleFileWriter模块,写的视频文件没有按原视频的fps,播放的时候帧率跳得非常快,没法控制

nboxcn 发表于 2024-3-7 10:30:44

本帖最后由 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)

dengkx 发表于 2024-3-7 11:11:36

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-7 17:01:00

好的,感谢大神!

nboxcn 发表于 2024-3-22 19:17:53

本帖最后由 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:06:26

本帖最后由 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

WHR197 发表于 2024-5-29 09:30:18

nboxcn 发表于 2024-3-22 19:17
目标是想实现自动录制10秒的视频文件,使用ModuleFileWriter写视频文件,10秒后自动停止,单使用了stop()后 ...

您好,这个问题解决了吗?
页: [1]
查看完整版本: ffmedia模块ModuleFileWriter写的视频文件没有按原视频的fps