【问题标题】:X264 Decoder complete frame not come in one NAL UnitX264 解码器完整帧不在一个 NAL 单元中
【发布时间】:2013-10-08 18:01:17
【问题描述】:

我使用 libX264 库进行编码。编码后数据采用 NAL 单元()的形式.....。这是我需要的相同格式(AVC),但问题是一帧来自两个 Nal 单元(一帧 =(长度,数据)+(长度,数据))并且我需要(一帧=(长度,数据)以单个最终单位)。当我转换为文件然后播放时,它首先显示屏幕的上部,然后显示下部。我的配置参数如下

param.i_width = 1680//;
param.i_height = 948;
param.i_fps_num = some no;
param.i_fps_den = 1;
param.i_keyint_max = 1 ;
param.rc.i_rc_method = //;
param.rc.f_rf_constant = //;
param.rc.f_rf_constant_max = //;
param.rc.b_mb_tree = 1;
param.rc.i_vbv_max_bitrate = ; // Convert to Kbps
param.rc.i_vbv_buffer_size = param.rc.i_vbv_max_bitrate / param.i_fps_num;
param.b_repeat_headers = 0;
param.b_annexb = 0;

【问题讨论】:

    标签: video h.264 libx264


    【解决方案1】:

    您可以发送您的编码器代码吗?通常你应该有以下代码:

    naluSize=x264_encoder_encode(h, &nal, &i_nal, pic, &pic_out);
    if(naluSize_size>0)
    {
        memcpy(Framebuffer, nal[0].p_payload, frame_naluSize);
        FrameBufferSize= frame_naluSize;
    }
    

    因此,您将在 Framebuffer 中获得编码帧,并且其大小在 FrameBufferSize 中。这在我的应用程序中就像一个魅力。

    另一个建议是不要碰任何你不知道的参数(至少在你解决问题之前)。只需使用

    x264_param_default_preset(&param, "ultrafast", "zerolatency");
    

    这将为您设置许多参数。当然,别忘了设置分辨率:)

    【讨论】:

      【解决方案2】:

      需要更多信息才能获得完整答案,但只是猜测。如果第一个 NALU 是 AUD(类型 9),您可以忽略它。或者不要通过设置 b_aud = 0 一开始就生成它们。

      【讨论】:

        猜你喜欢
        • 2014-06-02
        • 2014-05-13
        • 1970-01-01
        • 2011-10-15
        • 2011-08-29
        • 1970-01-01
        • 1970-01-01
        • 2014-11-25
        • 1970-01-01
        相关资源
        最近更新 更多