为v4l2实现循环缓冲区

时间:2018-02-08 03:33:07

标签: ffmpeg v4l2

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

1 个答案:

答案 0 :(得分:2)

L = [y for x in data for y in x.values()] print (L) [{'d': 'Meatball', 'b': 'Milk', 'l': 'Apple'}, {'dislike': 'juice', 'favourite': 'coke'}, {'d': 'Meatball2', 'b': 'Milk1', 'l': 'Apple1'}, {'dislike': 'juice3', 'favourite': 'coke2'}] 可执行文件有一些可以使用它的队列实现,请检查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) 将为您提供当前队列中的视频帧数。 2秒的帧数意味着PacketQueue.nb_packets,即60fps视频,VideoFps * 2最大值应为120帧。如果尝试实现此功能,您可以轻松添加nb_packets以删除多余的框架(最旧的框架),如果它是> 2秒(即120帧)。我可以举一个关于packet_queue_discardpkt函数的例子 希望有所帮助。