什么" useinbandfec是一个单向的只接收参数" Opus意味着什么?

时间:2017-10-18 22:02:56

标签: c++ audio codec opus

我正在尝试用C ++实现Opus转码器,我有一些概念性的问题。 至于useinbandfec参数,我并不完全理解"单向只接收参数"的含义,如RFC7587, section 7.1中所述:

  

" useinbandfec"参数是单向只接收   参数。

例如,Alice正在给Bob打电话。 Alice使用Opus编解码器,useinbandfec = 1,而Bob没有使用Opus。因此,两者之间应该有一个Opus转码器。如果是这样,我该如何配置Opus编码器和解码器的设置?

至于Alice-> Bob需要opus_decode(),应该将什么值作为第5个参数(fecFlag)发送?至于需要Opus编码器的Bob-> Alice,应该在OPUS_SET_INBAND_FEC()中使用opus_encoder_ctl()发送什么值?

谢谢!

1 个答案:

答案 0 :(得分:2)

参数useinbandfec

此参数表示编码器将其他信息添加到流中以恢复丢失的数据包。它是如何工作的,当编码器编码N + 1个数据包时,它会添加一些关于数据包N的信息,如果它支持恢复,它对解码器很有用。

如果解码器不支持恢复,则此信息无用且浪费带宽。

单向仅接收参数含义

这意味着如果您在会话描述符(SDP)中指定它,那么此参数描述接收者的能力并建议发送者使用或不使用入站FEC

<强>问题:

<强> 1

  

例如,Alice正在给Bob打电话。 Alice使用Opus编解码器   useinbandfec = 1,而Bob没有使用Opus。因此,应该有   两者之间的Opus转码器。如果是这样,我该如何配置   Opus编码器和解码器的设置?

在此配置中,您需要Alice和Bob之间的代码转换器。如果代码转换器支持FEC,您可能更喜欢将useinbandfec = 1包含到SDP fmtp属性中。如果编码器(Alice设备上的发送者)也在您的控制之下,您可以设置ask encoder以在以下条件中将FEC添加到流中:

  • 网络损失(可通过RTCP检测)
  • 解码器的解码器功能(可从SDP参数中获知)

<强> 2

  

至于Alice-&gt; Bob需要opus_decode(),应该是什么值   作为第5个参数发送(fecFlag)?

opus_decode检测丢包时使用FEC标志(例如通过RTP序列号)。让我们假设您收到数据包N和N-1数据包丢失。然后你可以通过在fecFlag设置为true的情况下调用opus_decode来恢复数据包N-1,然后解码数据包N:

packets[N-1] = decode_opus(pktN, fecFlag=true)
packets[N]   = decode_opus(pktN, fecFlag=false)

第3

  

至于Bob-&gt; Alice,需要Opus编码器的是什么价值   应该与opus_encoder_ctl()中的OPUS_SET_INBAND_FEC()一起发送?

OPUS_SET_INBAND_FEC最好根据从Alice SDP检索到的useinbandfec参数进行设置。另请注意,除非您未设置OPUS_SET_PACKET_LOSS_PERC

,否则FEC不会包含在编码流中