FFmpeg非阻塞读取AVPacket—FFmpeg API教程

作者:罗上文,微信:Loken1,公众号:FFmpeg弦外之音

AVFormatContext 结构里面的 flags 字段有一个属性 AVFMT_FLAG_NONBLOCK,当设置了这个属性的时候,av_read_frame() 函数就可以非阻塞读取 AVPacket

默认情况下,av_read_frame() 函数是阻塞型读取 AVPacket 的,只有读到 AVPacket 才会返回,或者出错直接返回 AVERROR_EOF,阻塞型读取是不会返回 AVERROR(EAGAIN) 错误码的。

但是在 ffmpeg.c 里面,故意把 flags 设置成 AVFMT_FLAG_NONBLOCK,如下:

1-1

我一开始看到这个属性,以为能用在 AVIO 那里,AVIO 的场景也能设置成非阻塞读取 AVPacket

但是我搜索后发现,在 mp4flv 之类的 demuxer 解复用器里面,根本没有用到 AVFMT_FLAG_NONBLOCK 属性,所以这些常规格式是无法非阻塞读取 AVPacket 的,只能用阻塞读取

AVFMT_FLAG_NONBLOCK 属性用在哪里?我搜索了一下,发现是用在 libavdevice 里面的,也就是捕捉摄像头,麦克风之类的数据的时候可以非阻塞,如下:

1-2

1-3



感谢 NETINT(镕铭微电子) 赞助《FFmpeg原理》免费版一书的服务器费用,下面是 VPU 产品介绍

版权所属 xianwanzhiyin.net 罗上文 2024 all right reserved,powered by Gitbook该文件修订时间: 2023-05-17 11:39:54

results matching ""

    No results matching ""