encoder.GetStream(venc_chn, streamData)卡住

Viewed 140

问题描述


示例脚本使用MP4模块API手册例程2
1、单纯示例脚本——可运行
2、示例脚本+线程——可运行
3、拆分sensor初始化、MP4写入,写成两个函数,初始化后3s再读取数据流写入——可运行
4、添加另一个sensor双通道,一个显示一个录制——出错后原因为第一帧为I帧不是header
5、添加判定逻辑需要先获取header,不然释放该帧并continue,运行程序会获取到第一帧为I帧,跳过后再次获取帧数据——通过调试发现卡在encoder.GetStream(venc_chn, streamData)获取帧这行代码
image.png
备注:双通道初始化代码如下
image.png
请问问题出在哪里,需要如何排查?

硬件板卡


01Studio CanMV K230

软件版本


CanMV_K230_01Studio_micropython_v1.5-legacy-41-g65e9758_nncase_v2.9.0

2 Answers

你好,请将编码器通道修改为通道 1:VENC_CHN_ID = VENC_CHN_ID_1。
原因:Display.init(Display.ST7701, width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT, to_ide=True) 函数在初始化显示时,会默认占用编码器通道 0,用于 IDE 图传的 JPEG 编码,因此需要将编码器通道切换为通道 1 以避免冲突。后续版本会改成全部动态获取编码器可用通道来解决这一问题。

您好,修改VENC_CHN_ID = VENC_CHN_ID_1后可以实现边显示边录制MP4,但出现了新问题,板子上电后第一次运行程序时可能出现两种情况:
1.可以正常录制200帧MP4程序停止;
2.录制过程中出现获取数据流list索引超限(encoder.GetStream(venc_chn, streamData)这句报错IndexError: list indexout of range)然后程序由于报错停止
无论第一次结果如果不重启板子直接第二次运行程序:
就会在获取数据流这行代码第一帧获取I帧被跳过,第2帧就卡住
我整理了一个PPT里面有图片说明,还是邮箱发您么?情况说明PPT+代码
这个评论不能发图片

您好,请问有进度么?

发现了新的情况:
如果加上Display初始化,则会读数据流卡住,如注释该行,则可以正常写入mp4
image.png
这是什么原因

您好,麻烦将完整代码发送邮箱:sunxiaopeng@canaan-creative.com
我这边会搭建本地环境复现问题后给您详细排查回复。

您好大佬,完整代码已发邮箱,麻烦了

您好,这个问题复现怎么样了,目前有结论了么?