C++ x264 NALUs序列化和处理

C++ x264 NALUs序列化和处理,c++,video-streaming,directshow,x264,C++,Video Streaming,Directshow,X264,我有我的x264编码器,从原始视频流生成NALU。我需要通过网络发送这些NALU。这样做的最佳方式是什么 编码器被插入到DirectShow图形中,它是一个转换过滤器,下游我有一个处理网络的过滤器。我可以将转换过滤器创建的NALUs直接传递到网络“渲染”过滤器吗?它会产生一些内存问题吗 我想知道分配给NALUs的内存在x264中是如何处理的-谁负责释放它?另外,我想知道我是否可以手动将NALU序列化为位流,然后以相同的方式重建它?将NALU发送到网络的最佳方式是通过RTP流。有关H.264的RT

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

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


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

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

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

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

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

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

我想知道分配给NALUs的内存在x264中是如何处理的-谁负责释放它

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

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

是的,你能做到。如果你的一对网络过滤器可以在它们的内部连接上复制相同的流,那么它会很好地工作。就与H.264的互操作性而言,最好的网络协议是RTP。然而,与比特流的简单接受/发送/接收/复制步骤相比,这是相当复杂的