K230 Mp4Container的性能问题

Viewed 152

重现步骤

Mp4Container 对象在录制视频后,调用相应的stop和destroy后保存文件存在性能问题

录制200帧
(2024, 12, 10, 5, 30, 22, 1, 345, 0) 开始录制第1段视频
(2024, 12, 10, 5, 30, 27, 1, 345, 0) 开始stop and destroy mp4
(2024, 12, 10, 5, 30, 31, 1, 345, 0) mp4销毁完成,开始deinit memdiamanger
(2024, 12, 10, 5, 30, 31, 1, 345, 0) deinit 完成
200帧需要4秒

录制2000帧
(2024, 12, 10, 5, 38, 23, 1, 345, 0) 开始录制第1段视频
(2024, 12, 10, 5, 39, 0, 1, 345, 0) 开始stop and destroy mp4
(2024, 12, 10, 5, 39, 10, 1, 345, 0) mp4销毁完成,开始deinit memdiamanger
(2024, 12, 10, 5, 39, 10, 1, 345, 0) deinit 完成
2000帧花费10秒

录制20000帧
(2024, 12, 10, 5, 40, 29, 1, 345, 0) 开始录制第1段视频
(2024, 12, 10, 5, 46, 21, 1, 345, 0) 开始stop and destroy mp4
(2024, 12, 10, 5, 47, 34, 1, 345, 0) mp4销毁完成,开始deinit memdiamanger
(2024, 12, 10, 5, 47, 34, 1, 345, 0) deinit 完成
20000帧花费1分13秒

期待结果和实际结果

快速保存。

软硬件版本信息

k230 嘉立创

错误日志

尝试解决过程

虽然说有源码了,但是你们肯定比我解决的更快,更轻松。

补充材料

1 Answers

是有这个问题,mp4录制后停止时间过长,原因在于当前用的mp4 muxer/demuxer开源库不是很成熟,存在bug导致。后面会使用其他库替换该开源库,同时保持接口不变。
当前的解决方法:改为录制fmp4,代码只需要修改一行:mp4_cfg.SetMuxerCfg传入最后一个参数为True。具体修改如下:

def mp4_muxer_test():
    print("mp4_muxer_test start")
    width = 1280
    height = 720
    # 实例化mp4 container
    mp4_muxer = Mp4Container()
    mp4_cfg = Mp4CfgStr(mp4_muxer.MP4_CONFIG_TYPE_MUXER)
    if mp4_cfg.type == mp4_muxer.MP4_CONFIG_TYPE_MUXER:
        file_name = "/sdcard/test.mp4"
        mp4_cfg.SetMuxerCfg(file_name, mp4_muxer.MP4_CODEC_ID_H265, width, height, mp4_muxer.MP4_CODEC_ID_G711U,True)

已验证,改成fmp4后只需要1s,查了一下这个fmp4没有看到啥缺点,为啥不直接选择fmp4呢

不同的使用场景,实际都应该支持