av_read_frame返回-35的问题
来源:6-10 代码优化

慕侠5054461
2021-10-15
遇到的问题是read frame总是返回-35,于是整个while都被直接跳过。如果像按照上图的解决办法操作,在while里面写if,那样while不是仍然会因为条件不符合而被直接跳过吗?
然后又发现一个问题是:
当我写while (ret=av_read_frame())==0 的时候,while被跳过,while之后打出来的ret值是-35;
当我写while (ret=av_read_frame()) < 0 的时候,while被跳过,while之后打出来的ret值是0;
当我写while (ret=av_read_frame()) 的时候,while被跳过,while之后打出来的ret值是0;
这个ret的值为什么会变化呀?
写回答
2回答
-
金鱼先森
2023-01-06
while (count++ < 500) { ret = av_read_frame(fmt_ctx, &packet); // 这里可能读取的时候,ret返回-35 表示设备还没准备好, 先睡眠1s if (ret == -35) { sleep(1); continue; } printf("read frame --- ret %d \n",ret); if (ret < 0) { break; } printf("pkt size is %d \n" , packet.size); }
换成这样的写法,while先执行其他语句,再在while里面判断
00 -
慕侠5054461
提问者
2021-10-15
找到一个解决办法是直接在while里面写sleep(1),而不用if判断,但是背后的机制尚不清楚。
012021-10-16
相似问题