ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

手把手教你:如何处理C++编译webrtc无法成功获取sdp的问题?

2021-06-16 15:57:08  阅读:165  来源: 互联网

标签:sdp c++ 接口 C++ go 超时 数据 webrtc 服务端


近期我们在编译WebRTC时碰到了一些问题,通过C++编译WebRTC项目,获取sdp的数据为空。我们使用windows api调用go服务端接口,接收到的数据为空。

0c171a0c500b4730acacfa544766f811.png

返回的数据如下:

e2d7caf7b856483b96c6adc8a5367ffa.png

通过数据打印出来,发现bufRev没有数据,也没有出现其他错误信息。通过打断点分析发现,异常情况下,select函数一直始终返回0:

b642222eddd94f5abcfcc7f49bcc2c42.png

再到go服务端发现接口已经调用成功:

9d5b6d979aac41b487bb93c806a5411c.png

使用上面简单测试go服务器接口(/stream/test/:channel:)。通过这个接口测试,select函数返回的是1,而且可以接收服务端返回的数据并进去打印。再使用Postman测试接口也发现没有问题,如此则说明c++写的调用接口有点问题。

在分析服务端接口和c++ 客户端接口请求时发现,go服务端有一个接口数据返回时间为359.4826ms。而c++ 请求超时的时间100ms,所以c++请求接口到了100ms超时,才导致select函数已经超时一直返回0的状态。

既然问题已经发现是超时的问题,那么把超时时间设置大点(timeout.tv_usec = 1000 * 6 * 1000),测试是否可行。经过测试发现把时间设置大一点,调用接口能获取到接口数据。

59473cb22a594f97a93986740dcfa22e.png

但是有一点,把时间设置大不现实,因为这样服务端有反馈数据,那么客户端也要等到这个设置时间点来获取到服务端的数据,说白了就是要等到设置的时间点来拿数据。

请求接口是同步接收服务端数据的,所以添加一个变量用于记录次数。如果数据是空的,那么就跳过这次循环,再次接收数据。知道拿到数据或者记录次数小于等于0,才算请求失败。

3d2c1db45e874bb8a7c08d68b48eda01.png

 

标签:sdp,c++,接口,C++,go,超时,数据,webrtc,服务端
来源: https://blog.51cto.com/tsingsee/2908465

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有