H264parse:NAL类型损坏/无效 [英] h264parse: broken/invalid nal Type

查看:12
本文介绍了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 6700 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆