我正在尝试使用mediasoup通过room.createRtpStreamer转发RTP流
我的问题是我从producer.rtpParameters.codecs[i].payloadType得到的有效负载类型(对于OPUS)是111,
而我在实际RTP数据包上得到的是100 (在Wireshark上可以看到)
我尝试在服务器的配置中设置preferredPayloadType,但似乎没有什么不同。
注意:如果我硬编码100作为OPUS流的有效负载类型,我可以使用FFPlay查看/听到流
我使用的是Chrome 55 (最新版本)和mediasoup 2.0.5 (最新版本)
任何帮助都将不胜感激。
发布于 2017-12-05 23:15:41
由于Producer的RTP参数由客户端(浏览器)决定,所以OPUS的PT为111 (Chrome生成的默认值)。
但是,一旦进入mediasoup服务器,与该Producer相关联的Consumers就会使用房间创建过程中给出的RTP参数。因此,如果提供给room = new server.Room(codecs) 1的编解码器具有preferredPayloadType字段,则将在Consumers中使用该字段(否则将由服务器随机选择)。
因此,当您调用room.createRtpStreamer()时,您提供了一个Producer,并且生成的RtpStreamer 2具有一个关联的Consumer和PlainRtpTransport。所以,你应该阅读rtpStreamer.consumer.rtpParameters,而不是producer的。
发布于 2017-12-05 17:06:56
您应该查看call setup消息的SDP,并检查OPUS有效负载是111还是100。从那里你可以决定哪个部分有bug (Chrome还是mediasoup)。在呼叫建立消息(发起呼叫)中,检查OPUS代码的有效负载。如果被叫方接受OPUS,则被叫方应该用相同的有效载荷号码进行响应,然后双方都应该在RTP分组中使用相同的有效载荷号码。
发布于 2017-12-05 19:42:26
因此,我发现我在producer.rtpParameters.codecs[i].payloadType上获得的有效负载是原始有效负载,并且room.createRtpStreamer更改了有效负载类型。
最终执行了以下操作来解决该问题
// get the payload (type) from the room.rtpCapabilities.codecs.preferredPayloadType for the specific codec
let payload = this.room.rtpCapabilities.codecs.find((c)=>{
return c.name === producer.rtpParameters.codecs[i].name;
}).preferredPayloadType;https://stackoverflow.com/questions/47649251
复制相似问题