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*
而是其他一些数据结构。来自 GstSample
的 GstStructure
指针,也许?
上下文
编写一个小程序来解析来自 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
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*
而是其他一些数据结构。来自 GstSample
的 GstStructure
指针,也许?
上下文
编写一个小程序来解析来自 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