本机WebRTC如何为PeerConnection的DataChannel禁用加密

时间:2018-09-13 07:34:38

标签: encryption webrtc rtp

我目前正在一个项目中工作,该项目正在尝试为旧游戏Supreme Commander构建通信适配器。此通信适配器使用本机webrtc。该项目是Forged Alliance Forever,这是通信适配器的存储库:github.com/FAForever/ice-adapter

通信适配器当前正在使用加密通信,但是我们想禁用加密。在有很多参与者的游戏中,上传带宽是一个限制因素,DTLS增加了每条消息的开销。这些消息的大小大约为20-50字节。因此,DTLS标头和填充的开销很大。

所以这是一个问题: 是否可以使用本地webrtc版本68禁用PeerConnection数据通道的加密?

如果是,怎么办?你有一个简单的例子吗?

我尝试了以下操作(对代码段感到抱歉):

在以下选项中创建PeerConnectionFactory并禁用加密:

_pcfactory = webrtc::CreateModularPeerConnectionFactory(nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);
webrtc::PeerConnectionFactoryInterface::Options webRtcOptions;
webRtcOptions.disable_encryption = true;
_pcfactory->SetOptions(webRtcOptions);

使用启用rtp数据通道创建PeerConnection:

webrtc::PeerConnectionInterface::RTCConfiguration configuration;
configuration.servers = _iceServerList;
configuration.enable_rtp_data_channel = true;
_peerConnection = _pcfactory->CreatePeerConnection(configuration,nullptr, nullptr, _peerConnectionObserverObj);

到目前为止,这是我测试过的。现在的问题是,应答方在channel.cc中产生中止,所以也许我没有正确使用该接口。你有什么建议吗?

致谢

1 个答案:

答案 0 :(得分:0)

创建对等连接时,可以将DtlsSrtpKeyAgreement约束设置为false。但是,此选项可能很快会从库中删除,请参见https://bugs.chromium.org/p/chromium/issues/detail?id=804275

但是必要的代码更改仍然会保留在git中,因此您可以通过在编译库之前还原更改来重新启用该选项。