2

我一直在玩 5.0 SDK 中包含的 cudaencode 示例。它以 YUV(未压缩视频)文件作为输入,并写出原始 H.264 流(或者也可以是 VC1)。这项工作由作为编码器 API 一部分的“NVEncodeFrame”函数执行。该程序将 FILE 对象 (stdio.h) 作为输出到写入编码结果(压缩的 H.264 视频)的位置。现在我想将正在编码的视频流式传输到网络中。

我的具体问题是:

  1. 有没有办法将 HandleReleaseBitStream(int nBytesInBuffer, unsigned char *cb,void *pUserData) 中的“unsigned char * cb”转换为 NAL 和 numberOfNals?

非常感谢。

4

1 回答 1

1

使用libh264bitstreamfind_nal_unit()。在你的数据上重复调用这个,直到你找到所有的 nals。这确实假设/要求 nals 具有标准的 nal 前缀。此外,这不会在缓冲区中找到最后一个nal:您可以假设从找到的最后一个 nal 的末尾到缓冲区的末尾的所有内容都是一个 nal,或者,将下一个缓冲区附加到剩余数据并继续解析.

您也可以尝试使用 libavformat's ,当从原始 H.264 流(示例代码)读取时av_read_frame(),它应该返回 nals(as s )。这可能要复杂得多。AVPacket

于 2012-12-25T15:56:18.427 回答