前言
webrtc源码目录下,有个examples目录,里面放置着官方的示例,其有peerconnection示例。
一、问题
peerconnection示例分客户端和服务端,以win系统为例,编译后会在输出目录生成两个可执行文件
服务端程序可以正常启动,但客户端程序旧版可以正常运行,最新版无法正常运行,需要修改下部分文件
二、解决方法
根据官方解决方案
fix.patch (1.2 KB) - webrtc - Web-based real-time communication - Monorail
需要对源码做下修改
1.在/examples/peerconnection/client/main.cc文件中,添加如下部分
WindowsCommandLineArguments::WindowsCommandLineArguments() {
LocalFree(wide_argv);
}
+class CustomSocketServer : public rtc::PhysicalSocketServer {
+ public:
+ bool Wait(webrtc::TimeDelta max_wait_duration, bool process_io) override {
+ if (!process_io)
+ return true;
+ return rtc::PhysicalSocketServer::Wait(webrtc::TimeDelta::Zero(),
+ process_io);
+ }
+};
+
} // namespace
2.在/examples/peerconnection/client/main.cc文件中,修改如下部分
int PASCAL wWinMain(HINSTANCE instance,
HINSTANCE prev_instance,
wchar_t* cmd_line,
int cmd_show) {
rtc::WinsockInitializer winsock_init;
- rtc::PhysicalSocketServer ss;
+ CustomSocketServer ss;
rtc::AutoSocketServerThread main_thread(&ss);
WindowsCommandLineArguments win_args;
3.在/examples/peerconnection/client/main.cc文件中,添加如下部分
int PASCAL wWinMain(HINSTANCE instance,
PeerConnectionClient client;
auto conductor = rtc::make_ref_counted<Conductor>(&client, &wnd);
+ main_thread.Start();
// Main loop.
MSG msg;
BOOL gm;
三、重新编译运行
1.重新编译,执行如下命令
ninja -C out/Default peerconnection_client
2. 先运行服务端,再运行客户端
注:IP地址需要填写“127.0.0.1”,而不是“localhost”!!!
后记
根据webrtc官方文档指引,这两个示例是开发学习webRTC的敲门砖,建议新入坑的小伙伴仔细研究下相关代码