请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

av_read_frame返回-35的问题

图片描述

遇到的问题是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的值为什么会变化呀?

正在回答 回答被采纳积分+3

2回答

金鱼先森 2023-01-06 16:25:22
    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里面判断

0 回复 有任何疑惑可以回复我~
提问者 慕侠5054461 2021-10-15 19:29:04

找到一个解决办法是直接在while里面写sleep(1),而不用if判断,但是背后的机制尚不清楚。

0 回复 有任何疑惑可以回复我~
  • 李超 #1
    翻翻历史问题,之前有回答过
    回复 有任何疑惑可以回复我~ 2021-10-16 12:57:35
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信