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里面判断

0
0

慕侠5054461

提问者

2021-10-15

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

0
1
李超
翻翻历史问题,之前有回答过
2021-10-16
共1条回复

音视频小白系统入门课 音视频基础+ffmpeg原理

掌握音视频采集、编解码、RTMP传输协议等核心基础

2318 学习 · 813 问题

查看课程