我试图在C++中实现一个Opus转换程序,我有一些概念性的问题。至于useinbandfec参数,我不太理解用RFC7587,第7.1节编写的“单向接收参数”的含义。
"useinbandfec“参数是一个单向接收参数。
例如,爱丽丝打电话给鲍勃。Alice在useinbandfec=1中使用Opus编解码器,而Bob不使用Opus。因此,两者之间应该有一个Opus转换器。如果是,我如何配置Opus编码器和解码器的设置?
对于需要opus_decode()的Alice->Bob,应该发送什么值作为第5个参数(fecFlag)?对于Bob->Alice,在需要Opus编码器的地方,应该用OPUS_SET_INBAND_FEC()在opus_encoder_ctl()中发送什么值?
谢谢!
发布于 2017-10-18 22:50:09
参数在中的应用
此参数意味着编码器向流中添加其他信息以恢复丢失的数据包。它是如何工作的,当编码器编码数字N+1数据包时,它添加了一些关于分组N的信息,如果它支持恢复,对解码器是有用的。
如果解码器不支持恢复,那么这些信息是无用的,浪费带宽。
单向接收仅表示参数
这意味着如果在会话描述符(SDP)中指定它,则此参数描述接收方的能力,并建议发送方使用或不使用入站FEC。
问题:
1
例如,爱丽丝打电话给鲍勃。Alice在useinbandfec=1中使用Opus编解码器,而Bob不使用Opus。因此,两者之间应该有一个Opus转换器。如果是,我如何配置Opus编码器和解码器的设置?
在这种配置中,您需要Alice和Bob之间的代码转换。如果代码转换程序支持FEC,您可能更喜欢包含useinbandfec=1到SDP fmtp属性。如果编码器( Alice上的发送方)也在您的控制下,您可以设置ask编码器在以下条件下将FEC添加到流中:
2
对于需要opus_decode()的Alice->Bob,应该发送什么值作为第5个参数(fecFlag)?
当您检测到数据包丢失时(例如,通过opus_decode序列号),将使用RTP FEC标志。假设您接收到的数据包N和N-1数据包丢失了.然后,您可以通过调用opus_decode并将fecFlag设置为true来恢复数据包N1,然后解码数据包N:
packets[N-1] = decode_opus(pktN, fecFlag=true)
packets[N] = decode_opus(pktN, fecFlag=false)3
对于需要Opus编码器的Bob->Alice,应该在opus_encoder_ctl()中用opus_encoder_ctl()发送什么值?
OPUS_SET_INBAND_FEC最好是从从Alice检索的useinbandfec参数中设置。另外,除非您没有设置PERC,否则不要将FEC包括在编码流中。
https://stackoverflow.com/questions/46819965
复制相似问题