【问题标题】:Get TS packets into buffer from libavformat从 libavformat 获取 TS 数据包到缓冲区
【发布时间】:2012-05-14 08:20:25
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ffmpeg libavformat transport-stream mux


    【解决方案1】:

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

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

    【讨论】:

    • 您发布的链接中的 github 存储库已消失;如果你能记得或有一些代码,你能发布实际的代码示例吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    相关资源
    最近更新 更多