首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我通过ffmpeg得到RTSP流时,如何创建缓冲区?

当我通过ffmpeg得到RTSP流时,如何创建缓冲区?
EN

Stack Overflow用户
提问于 2017-07-10 05:44:34
回答 2查看 1.4K关注 0票数 1

我在C上用ffmpeg从rtsp得到视频流,我直接把它写到文件中。我需要创建10秒的缓冲区,在那里我可以保存来自rtsp sream的最后10秒视频。在某个时刻,我需要开始将rtsp中的所有视频记录到文件中(包括之前的10秒缓冲区)。有人能告诉我怎么做吗?

EN

回答 2

Stack Overflow用户

发布于 2018-06-29 20:16:11

为自己创建一个足以容纳20秒数据的循环缓冲区,然后将流数据覆盖( push )到其中(不断覆盖太旧的数据)。

当您感兴趣的事件发生时,只需将之前的完整10秒和感兴趣的10秒pop给您选择的FILE*编写器。

编辑: Dilon是对的,如果你想同时进行I/O,就像他所指出的那样增加必要的复杂性。

如果只是简单地想要在10秒后没有额外数据的情况下请求数据,只需在感兴趣的事件发生时停止您的编写器进入循环缓冲区,您就完成了:)

票数 4
EN

Stack Overflow用户

发布于 2018-06-30 06:13:43

Gunther有一个很好的方法,这将解决您的问题,但如果您临时写入数据的速度比读取数据的速度快得多,则可能会覆盖数据(可能读取由于某种原因而停滞?),或者延迟到等待数据读取。

为了解决这个问题,我建议设置一些合理大小的缓冲区,然后创建一个链表来包含指向这些缓冲区的指针。一旦一个缓冲区被填满,将其从当前LL移至full LL,并开始缓冲到下一个可用缓冲区。从full LL读取缓冲区时,将它们移回empty LL。如果你用完了full LL中的缓冲区--只要再malloc()一个就行了。

这样,您有一个队列的缓冲区要读,一个队列要写,如果存在可用性问题-只需添加更多的缓冲区。没有过早覆盖数据的风险。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45001309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档