首页 > 解决方案 > h.264 解码器的“无效 NAL 单元大小”是什么意思?

问题描述

我想使用 Libav 将 .mkv 文件转换为 .mp4,但是当我尝试解码视频 h.264 流时,我的代码出现故障

NAL 单元大小无效 21274662>141

将输入拆分为 NAL 单元时出错

该流似乎包含带有附件 B 格式数据的 AVCC 额外数据,该数据无效。无框!

无法发送解码包(“处理输入时错误无效数据”)

下面提供了相关的代码部分。

while(!(ret = av_read_frame(ifmt_ctx, &input_packet))&&(ret>=0)){

         if ((ret = avcodec_send_packet(avctx, &input_packet)) < 0) {
            fprintf(stderr, "Could not send packet for decoding (error '%s')\n",get_error_text(ret));
            return ret;
        }

        ret = avcodec_receive_frame(avctx, iframe);
        if (ret == AVERROR(EAGAIN)) {
            goto read_another_frame;
            /* If the end of the input file is reached, stop decoding. */
        } else if (ret == AVERROR_EOF) {
            break;
        } else if (ret < 0) {
            fprintf(stderr, "Could not decode frame (error '%s')\n",get_error_text(ret));
            break;
        }
        // Default case: encode data
         else {

        }

我主要使用新的 API(发送/接收数据包/帧)并且存在混淆,因为似乎 h.264 需要一个特殊的实现。我期待着从哪里开始调试的任何想法。

标签: apidecodeh.264libavmux

解决方案


这意味着 ES 格式与容器不兼容。阅读本文:H.264 流的序列/图片参数集的可能位置


推荐阅读