【问题标题】:x264 NALUs serialization and handlingx264 NALU 序列化和处理
【发布时间】:2014-02-04 15:15:24
【问题描述】:

我有我的 x264 编码器,可以从原始视频流生成 NALU。我需要通过网络发送这些 NALU。这样做的最佳方式是什么?

编码器被插入到 DirectShow 图中,它是一个转换过滤器,下游我有处理网络的过滤器。我可以将由转换过滤器创建的 NALU 直接传递给网络“渲染”过滤器吗?它会产生一些内存问题吗?

我想知道在 x264 内部如何处理分配给 NALU 的内存 - 谁负责释放它?另外我想知道我是否可以手动将NALU序列化为比特流,然后以相同的方式重建它?

【问题讨论】:

    标签: c++ video-streaming directshow x264


    【解决方案1】:

    我需要通过网络发送这些 NALU。这样做的最佳方式是什么?

    “最佳”需要澄清:最容易做到,在兼容性方面最好,与特定的对应实现兼容等。

    我可以将由转换过滤器创建的 NALU 直接传递给网络“渲染”过滤器吗?它会产生一些内存问题吗?

    没有库存的网络渲染器,您应该阅读如何使用您要使用的特定渲染器来完成它。

    我想知道在 x264 内部如何处理分配给 NALU 的内存 - 谁负责释放它?

    x264 管理它填充的缓冲区,x264_encoder_encode 返回这些缓冲区上的引用并且您不需要释放数据,只需确保及时将其复制出来,因为它将在下次调用时失效。之后不要忘记x264_encoder_close - 它会释放内部管理的所有资源。

    另外我想知道我是否可以手动将 NALU 序列化为比特流,然后以相同的方式重建它?

    是的,你可以做到。如果您的网络过滤器对可以在其内部连接上复制相同的流进行网络处理,那么它会正常工作。就与 H.264 的互操作性而言,最好的网络协议是 RTP。然而,如果与比特流的简单接受/发送/接收/再现步骤相比,它是相当复杂的。

    【讨论】:

      【解决方案2】:

      将 NALU 发送到网络的最佳方式是通过 RTP 流。查看RFC 6184 以了解有关 H.264 的 RTP 数据包化的详细信息。我认为您可以安全地将 NALU 传递给您的渲染器,前提是您的媒体缓冲区足够大以容纳您的 NALU。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-02
        • 2011-05-25
        • 2019-08-01
        相关资源
        最近更新 更多