admin管理员组文章数量:1516870
一、引言
按照《 》编译WebRTC成功后,除了在src/out/Default/obj目录下生成webrtc.lib文件外,src\out\Default目录下还会生成WebRTC的各个exe文件。其中,包括peerconnection_client.exe和peerconnection_server.exe:
peerconnection_client.exe和peerconnection_server.exe是WebRTC官方提供的Windows平台的示例,用来给大家体验WebRTC语音视频通话的。其中,peerconnection_client.exe是语音视频通话通话示例的客户端程序,peerconnection_server.exe是语音视频通话通话示例的信令服务器。要想学习WebRTC源码,一般从分析peerconnection_client开始。peerconnection_client包含了大部分使用WebRTC的逻辑。本系列会简单讲解peerconnection_client的构成。
二、peerconnection_client和peerconnection_server的运行测试
要想进行peerconnection_client.exe和peerconnection_server.exe的语音视频通话测试,理论上是需要准备三台Windows主机的。主机1启动peerconnection_server.exe,主机2和主机3分别运行peerconnection_client.exe。但是如果缺乏机器,两个peerconnection_client和一个peerconnection_server可以都运行在同一台Windows主机上。
下面演示在一台Windows主机上同时运行这三个exe。注:如果想看到视频画面,该Windows主机必须有摄像头。如果没有,也可以外接USB摄像机,比如下面这些:
启动peerconnection_server.exe,默认监听8888端口:
启动第一个peerconnection_client.exe,填写服务器(peerconnection_server.exe)的ip和端口号,点击Connect按钮:
这里因为还没有启动另一个peerconnection_client.exe,所以“List of currently connected peers”为空,意思是已连接的peer端为空:
启动另一个peerconnection_client.exe,填写服务器(peerconnection_server.exe)的ip和端口号,点击Connect按钮:
由于之前已经启动了一个peerconnection_client.exe,所以“List of currently connected peers”会显示之前已连接的peer端的名称。双击该名称:
如果该Windows主机没有摄像头或只有一个摄像头,则效果如下,只能听到语音视频通话中的声音但不会显示视频:
如果该Windows主机有两个摄像头(摄像头不够可以外接USB摄像机),一个peerconnection_client分配一个摄像头,那是可以看到视频画面的,效果如下。可以看到确实能实现两个peer的语音视频通话:
三、修改WebRTC源码实现只有一个摄像头也能进行peerconnection_client运行测试
在WebRTC中peerconnection_client例子中含有实现本地回环测试代码,即src\examples\peerconnection\client\conductor.cc中的ReinitializePeerConnectionForLoopback函数,其定义如下。要想实现只有一个摄像头也能进行peerconnection_client运行测试,使用该函数即可:
bool Conductor::ReinitializePeerConnectionForLoopback() {
loopback_ = true;
std::vector<rtc::scoped_refptr<webrtc::RtpSenderInterface>> senders =
peer_connection_->GetSenders();
peer_connection_ = nullptr;
if (CreatePeerConnection(/*dtls=*/false)) {
for (const auto& sender : senders) {
peer_connection_->AddTrack(sender->track(), sender->stream_ids());
}
peer_connection_->CreateOffer(
this, webrtc::PeerConnectionInterface::RTCOfferAnswerOptions());
}
return peer_connection_ != nullptr;
}修改src\examples\peerconnection\client\conductor.cc中的StartLogin函数,该函数原本的定义如下:
void Conductor::StartLogin(const std::string& server, int port) {
if (client_->is_connected())
return;
server_ = server;
client_->Connect(server, port, GetPeerName());
}将StartLogin函数修改为:
void Conductor::StartLogin(const std::string& server, int port) {
/*
loopback
*/
InitializePeerConnection();
ReinitializePeerConnectionForLoopback();
return;
/*
if (client_->is_connected())
return;
server_ = server;
client_->Connect(server, port, GetPeerName());
*/
}Visual Studio中选中peerconnection_client项目,点击“生成”,编译出新的peerconnection_client.exe可执行文件:
不需要启动peerconnection_server.exe,直接运行上述编译出来的新的peerconnection_client.exe可执行文件,点击“Connect”按钮:
可以发现实现本地回环的语音视频通话了:
需要注意的是:WebRTC官方是不推荐这种本地回环方式的。规范禁止为loopback接口收集ICE候选项,因此这是非标准的,可能会导致其他一些实现出现问题。
四、没有摄像头也能进行peerconnection_client运行测试
电脑没有任何摄像头,也没法外接USB摄像机的情况下,理论上是可以通过安装OBS Studio,启动虚拟摄像头的方式进行peerconnection_client运行测试的。该方法我也没尝试过,大家有兴趣可以自行尝试下。
五、参考
《 》
《 》
版权声明:本文标题:深入浅出peerconnectionclient与peerconnectionserver_webrtc:WebRTC中的流畅沟通秘籍 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/web/1770802118a3258687.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论