This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320DM368:H.264enc 内部、IDR、GDR 间隔与放大器的关系;gdrduration 参数

Guru**** 2606725 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/584957/tms320dm368-relation-of-h-264enc-intra-idr-gdr-interval-gdrduration-parameters

器件型号:TMS320DM368

当在编码器(DM368 IPNC、Platinum 编码器02.30.00.xx)中设置 GDR 时、我们会看到 XDM 错误"IH264VENC_ERR_GDRDURATION"、即使 GDR Duration 参数根据编码器手册在范围内。

它似乎与 iFrame / IDRFrame 间隔设置相关、但我找不到任何文档或论坛帖子、无法在此处解释关系或限制。

有人能解释一下使用 GDR 时 iFram/IDRframe 的交互是什么吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您能不能共享所有编码器参数设置以及您正在使用的 h264编码器版本。 GAED 的最新版本为02.30.00.06。 如果您使用的是较旧版本、则可以从此处升级到相同版本。 software-dl.ti.com/.../index_FDS.html
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    [引用 user="fridgeezer"]在编码器(DM368 IPNC、Platinum 编码器02.30.00.xx)中设置 GDR 时,即使根据编码器手册,GDR 持续时间参数在范围内,我们也会收到 XDM 错误"IH264VENC_ERR_GDRDURATION"。请确保  

    根据您的用例、enableGDR = 1/2。  

    GDRDuration < GDRinterval。

    [引用 user="frigefreezer"]

    它似乎与 iFrame / IDRFrame 间隔设置相关、但我找不到任何文档或论坛帖子、无法在此处解释关系或限制。

    有人能解释一下使用 GDR 时 iFram/IDRframe 的交互是什么吗?

    [/报价]使用 GDR 时、I/IDE 帧间隔将始终为0 (零)。 只有第一个帧是 I/IDR 帧。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、我已经更新到了最新的编码器(02.30.00.06、我们使用的是02.30.00.04)并重建了、没有对错误条件的改变。

    只要 GDRDuration > IDrFrameInterval、编码器就会以扩展错误停止:41028/0xA044 IH264VENC_ERR_GDRDURATION。

    下面是我们的 VE 设置(来自 ALG_vidEnc.c):

    输入 W/H 1080/1920

    TargetBitRate 8000000

    捕捉宽度1920

    帧速率为30000 / 30000

    profileIdc=66

    levelIdc=42

    .intraFrameInterval=0

    _h264.idrFrameInterval=30

    enableVUIparams=4

    rateControlPreset=5

    Log2MaxFrameNumMinus4=5

    ConstraintSetFlag=0

    entropyMode=0

    变压器8x8FlagIntraFrame = 0

    变压器8x8FlagInterFrame = 0

    enableVUIparams=4

    meAlgo = 0

    seqScalingFlag=0

    enableARM926Tcm=0

    enableDDRbuff = 0

    EnableLongTermFrame = 0

    outputDataMode=1.

    切片模式= 0

    切片格式= 1

    编码 Preset=2

    编码 Preset=XDM_HIGH_SPEED

    encQuality=3

    numTemporalLayers=0

    svcSyntaxEnable=0

    forceFrame = 3.

    切片大小=(1080/16)*100/100

    _h264.sliceSizeSize=67

    _h264.airRate=0

    _h264.intraFrameQP=28

    _h264.interPFrameQP=28

    _h264.initQ=28

    _h264.rcQMax=51

    _h264.rcQMin=51

    _h264.rcQMaxi=42

    _h264.rcQMini=1

    _h264.maxDelay=2000

    _h264.aspectRatioX=1

    _h264.aspectRatioY=1

    _h264.lfDisableIdc=0

    _h264.enableBufSEI=1

    _h264.enablePicTimesi=1

    _h264.perceptualRC=1

    _h264.mvSADoutFlag=0

    _h264.resetHDVICPeveryFrame = 0

    _h264.enableROI=1

    _h264.metaDataGenerateConius=0

    _h264.interlaceRefMode=0

    _h264.enableGDR=2

    _h264.GDRDuration=31

    _h264.GDRinterval=269

    _h264.LongTermRefreshInterval=0

    _h264.UseLongTermFrame = 0

    _h264.SetLongTermFrame = 0

    _h264.maxBitrateCVBR=12000000

    _h264.maxHighCmpxIntCVBR=0

    _h264.CVBRsensitivity = 0

    _h264.CVBRminbitrate=0

    _h264.LBRmaxpicsize=50

    _h264.LBRminpicsize=0

    _h264.LBRskipcontrol=0x50004

    _h264.disableMVDCostFactor=0

    _h264.rcAlgo = 1.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Prashanth Kumar15"]

    当您使用 GDR 时、I/IDE 帧间隔将始终为0 (零)。 只有第一个帧是 I/IDR 帧。

    [/报价]

    您能否澄清以下陈述:您说 I/IDR 间隔必须设置为0、还是说启用 GDR 具有将其设置为0的效果?

    H.264编码器用户指南没有提到这一点。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    让我尝试澄清你的疑问。
    GDR 用于刷新整个帧、而不使用 I 帧。 是的、I/IDR 间隔应设置为0。
    2. enableGDR = 1/2 (请参阅用户指南)。
    2.使用 GDR 时,只有第一个帧是 I/IDR 帧。 其余全部为 P 帧。
    3.例如 让我们看一下、GDRDuration = 10、GDRinterval = 100。
    这里   是 IPPPPPP.......... 第...页。 第...........页 第...页。 第页 第...页。 第...页。
    帧编号12345.......... 100...110.......... 200...210............ 300...110
    现在、每100、200、300次将是 GDR 间隔(每100帧一次)。 因此、从帧#100-110开始、整个帧将被刷新。 同样,200-210..... 等等。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Prashanth、这确实说明了这一操作。 但是、我已经尝试将设置为您的示例:
    enableGDR = 2
    GDRInterval = 100
    GDRDuration = 10
    iFrame = 0
    IDR = 0

    我们无法获取数据流-没有编码器错误、但我的理论是、WIS-Streamer 没有从编码器获取任何 SPS/PPS (无 IDR)、因此不会生成 SDP、数据流无法启动。

    如果我将 IDRInterval 设置为30、它工作正常、我们可以流式传输视频。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您能否共享编码流?

    SPS 在每个 GDRinterval 从编码器发送、但 PPS 不是。 您可以尝试在帧工作时存储 SPS、PPS - NAL (仅 IDR 帧)、并以 GDRintervals 发送。 现在、让我们保持 enableGDR = 1。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    看起来问题可能出在 Appro IPNC 代码中、它似乎依赖 I/IDR 帧来锁定 GOP 并开始流式传输。 无论出于何种原因、当 I/IDR = 0时、尽管编码器手册中有说明、但它不会获得初始 I/IDR 帧。

    如果 I/IDR =0或>200,则无论 GDR 设置如何,Appro 链都无法锁定 GOP。 目前、我认为我们不能对此做太多工作、因此我们只需限制用户设置即可避免出现问题。


    作为后续操作、我们会看到 I 和 IDR 帧不同步、即使我们设置了 i=IDR=30、我们也可以看到、有时流将类似于:

    P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-

    这是预期行为还是我们配置了错误? 是否会在编码器启动时强制进行 I/IDR 同步?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    [引用 user="frigefreezer"]

    作为后续操作、我们会看到 I 和 IDR 帧不同步、即使我们设置了 i=IDR=30、我们也可以看到、有时流将类似于:

    P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-

    这是预期行为还是我们配置了错误? 是否会在编码器启动时强制进行 I/IDR 同步?

    [/报价]

    这不是预期的行为! 当 i=IDR 时、您不应看到 i.. IDR 将覆盖 I. 是否可以通过禁用 GDR (enableGDR=0)来运行相同的设置? 并分享您的观察结果。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Prashanth、

    我认为我们已经确定了原因:如果您的 i=IDR 并启动/重新启动流式传输、则它们处于同步状态。

    如果您修改动态参数(I、IDR、帧速率、可能还有一些参数)、则可能会不同步。 重新启动流式传输会使其返回。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    很高兴知道您的路线导致了问题。 感谢您关闭此主题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的帮助!