为v4l2实现循环缓冲区

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为v4l2实现循环缓冲区相关的知识,希望对你有一定的参考价值。

我正在寻找一种有效的方法来实现像对象这样的循环缓冲区,以便从网络摄像头连续录制但只持有固定的时间。即连续监视视频流,但任何时候只能将最后2秒保留在内存中。

答案

ffplay可执行文件有一些你可以使用的队列实现,请检查ffplay.c

你将导入这个结构PacketQueue和这些功能:

static int  packet_queue_put_private (PacketQueue *q, AVPacket *pkt)
static int  packet_queue_put (PacketQueue *q, AVPacket *pkt)
static int  packet_queue_put_nullpacket (PacketQueue *q, int stream_index)
static int  packet_queue_init (PacketQueue *q)
static void packet_queue_flush (PacketQueue *q)
static void packet_queue_destroy (PacketQueue *q)
static void packet_queue_abort (PacketQueue *q)
static void packet_queue_start (PacketQueue *q)
static int  packet_queue_get (PacketQueue *q, AVPacket *pkt, int block, int *serial)

这个实现非常快。 PacketQueue.nb_packets将为您提供当前队列中的视频帧数。 2秒的帧数意味着VideoFps * 2,即60fps视频,nb_packets最大值应为120帧。如果尝试实现这一点,您可以轻松添加packet_queue_discardpkt以删除多余的帧(最旧的帧),如果它> 2秒(即120帧)。我可以举一个关于这个packet_queue_discardpkt函数的例子。 希望有所帮助。

以上是关于为v4l2实现循环缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

摄像头v4l2编写,实现视频在帧缓冲显示

Linux之V4L2基础编程

如何 开发 v4l2 tuener驱动

Linux应用开发第七章摄像头V4L2编程应用开发

V4L2捕捉画面+H264压缩视频+帧缓冲显示视频————帧缓冲显示视频

Linux下V4L2捕捉画面+H264压缩视频+帧缓冲显示视频————H264压缩视频