H264parse:NAL类型损坏/无效 [英] h264parse: broken/invalid nal Type
本文介绍了H264parse:NAL类型损坏/无效的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在通过串行链路上接收H.64帧,尝试使用GStreamer播放它们。我将大写字母设置为gst_caps_from_string("video/x-h264")
,它似乎接受它们(如果我使用其他大写字母,例如application/x-rtp
,则GStreamer日志输出报告不兼容的大写字母)。
更具体地说,我使用了以下元素:appsrc ! h264parse ! rtph264pay
,看起来h264parse
是不快乐的那个。
当我通过(通过appsrc
)我得到的长度为8018的byte[]
帧时,我得到以下日志输出:
WARN h264parse gsth264parse.c:1496:gst_h264_parse_handle_frame:<h264parse0> broken/invalid nal Type: 6 SEI, Size: 12 will be dropped
WARN h264parse gsth264parse.c:1496:gst_h264_parse_handle_frame:<h264parse0> broken/invalid nal Type: 6 SEI, Size: 12 will be dropped
WARN h264parse gsth264parse.c:1496:gst_h264_parse_handle_frame:<h264parse0> broken/invalid nal Type: 1 Slice, Size: 7986 will be dropped
请注意这3行警告是如何相似的,前两行的大小为12,最后一行的大小为<my byte[] size> - 32
。
这在我发送的所有帧中都是一致的:它总是两次报告丢弃12,然后丢弃我传递的帧的长度减去32。
为什么会这样?这是否与我的管道未接收到SPS/PPS数据有关?我一直在转储帧(appsrc ! identity dump=true ! ...
),但似乎找不到任何以00 00 00 01 67
或00 00 00 01 68
开头的帧,尽管我不确定这是否会产生这些警告。
推荐答案
来自the source code,此消息来自:
if (!gst_h264_parse_process_nal (h264parse, &nalu)) {
GST_WARNING_OBJECT (h264parse,
"broken/invalid nal Type: %d %s, Size: %u will be dropped",
nalu.type, _nal_name (nalu.type), nalu.size);
[...]
}
WHEREgst_h264_parse_process_nal()
,对于SEI帧,returns FALSEWHEN:
case GST_H264_NAL_SEI:
/* expected state: got-sps */
if (!GST_H264_PARSE_STATE_VALID (h264parse, GST_H264_PARSE_STATE_GOT_SPS))
return FALSE;
GST_H264_PARSE_STATE_VALID
定义为:
#define GST_H264_PARSE_STATE_VALID(parse, expected_state)
(((parse)->state & (expected_state)) == (expected_state))
似乎在未设置GST_H264_PARSE_STATE_GOT_SPS
状态时出现此错误。
作为结论,以上问题中的帧将被丢弃,因为此时尚未接收到SPS数据。
这篇关于H264parse:NAL类型损坏/无效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文