gst_h264_parser_identify_nalu 未在缓冲区中找到 NAL

gst_h264_parser_identify_nalu Not Finding NAL in Buffer

GstH264NalParser *parser = NULL;
GstH264NalUnit nal_unit = { 0 };

parser = gst_h264_nal_parser_new();
GstH264ParserResult parser_result = gst_h264_parser_identify_nalu(parser,
    buffer_map.data,
    0,
    buffer_map.size,
    &nal_unit); /* This returns GST_H264_PARSER_NO_NAL */

这是为什么?除非 data 不应该来自 GstMapInfo* 而是其他一些数据结构。来自 GstSampleGstStructure 指针,也许?

上下文

编写一个小程序来解析来自 Gstreamer 的 videotestsrc 和 appsink 插件的 h.264 编码视频。到目前为止,还不错。

在我的管道中使用(坏的)x264enc 插件转换流,然后将其送入 h264parse,然后送入 appsink。很确定 h264parse 是一个不必要的步骤,但无论有没有我得到的结果都是一样的。

确信我使用不正确的结构将数据读入 NALU 解析函数。

如果您认为传入的数据是好的,那么您很可能需要做一个小的转换,因为在 h264 流中有几种不同的编码模式。

我不确定为什么会这样,但您有时需要做一个小的转换。这就是 h264parse 元素的用途。

Pad Templates: SRC template: 'src' Availability: Always Capabilities: video/x-h264 parsed: true stream-format: { avc, avc3, byte-stream } alignment: { au, nal }

因此,在您的管道中,您可以尝试对流格式和 alignmnet 选项进行排列,例如:

gst-launch videotestsrc ! ... ! h264parse ! video/x-h264,stream-format=byte-stream,alignment=nal ! appsink