0

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

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

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

我有点迷失在 ffmpeg 代码中寻找好的例子,而且这些库的文档也不是很好。对此主题的任何意见表示赞赏。谢谢!

4

1 回答 1

1

终于让它工作了。一种方法是使用 avio_alloc_context 设置回调,您可以在其中对流执行您想要的操作。这个人有一个很好的例子:

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

于 2012-05-31T07:22:50.513 回答