从libavformat获取TS数据包到缓冲区

时间:2012-05-14 08:20:25

标签: ffmpeg libavformat transport-stream mux

我想捕获视频,压缩视频并将其复制为mpeg2 ts。使用ffmpeg库所有这一切都非常简单,但是我想要做的,而不是将其写入文件,是在缓冲区中捕获ts数据包并以其他方式使用此流。有一种简单的方法可以做到这一点吗?

要立即将编码的帧写入文件,我使用av_interleaved_write_frame(oc,& pkt)。 OC是输出上下文,其中定义了文件名和格式。 pkt是一个包含压缩帧的AVPacket。 av_interlaced_write_frame正在执行多路复用并写入文件。

我想最终实现的是将相同的ts流写入多个文件,并开始和停止彼此独立地编写不同的文件。为每个流启动一个新的muxer似乎效率低下,因为TS流不需要任何头或正确的结尾才能正确播放(如果我读的是正确的)

我有点想在ffmpeg代码中找到好的例子,并且这些库没有很好的记录。有关此主题的任何意见表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:1)

终于搞定了。一种方法是使用avio_alloc_context设置回调,您可以使用流执行所需的操作。这家伙有一个很好的例子:

https://github.com/EvilTengil/kinect-streamer/blob/master/src/kstreamer/ffv1_depth_encoder.cpp