我正在寻找一种有效的方法来实现像对象一样的循环缓冲区,以便从网络摄像头连续录制,但只持有固定的时间。即连续监视视频流,但任何时候只能将最后2秒保留在内存中。
答案 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
函数的例子
希望有所帮助。