# rtc_one2one **Repository Path**: qingfuliao/rtc_one2one ## Basic Information - **Project Name**: rtc_one2one - **Description**: webrtc音视频一对一通话,支持web、Android、pc端 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-12-14 - **Last Updated**: 2023-09-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # # 1 介绍 webrtc音视频一对一通话,支持web、Android、pc端 # 2 使用说明 ## 从文件提取yuv数据 ffmpeg -i 720x480_25fps.mp4 -an -c:v rawvideo -pix_fmt yuv420p 720x480_25fps_420p.yuv 将他们都放到执行文件的目录。 使用 720x480_25fps_420p.yuv 的yuv数据作为采集源,可以参考代码 YuvCapturer类的实现。 在YuvCapturer::Run函数不断读取YUV数据帧,封装成webrtc frame给到本地渲染以及peerconnection。 ## Web端代码 在工程目录web\client ## 信令代码 在工程目录web\server # 3 使用webrtc库文件说明 在qt配置库文件比如容易,可以在qt工程的pro文件配置库文件路径, 正确编译后再使用vs2019的qt插件转成vs工程。 具体的配置文件见rtc_one2one.pro ![image-20221227202016687](.\doc\image-vs2019qt插件转vs工程.png) # 4 QT小技巧 标准string转QString ``` string s= "123"; QString str= QString::fromStdString(s); ``` # 5 报错记录 ### WebRTC库和QT库的signals,emit关键字冲突 ``` F:\0voice\av_media\webrtc\win\webrtc\webrtc\webrtc-checkout\src\rtc_base\third_party\sigslot\sigslot.h:323: error: C2143: 语法错误: 缺少“)”(在“...”的前面) ``` 报各种莫名其妙的错误,主要是因为webrtc库和qt库一起使用时,需要注意signals,emit关键字冲突的问题,因为webrtc头文件中有emit等关键字,没有加命名空间 故需要在引入qt时,添加QT_NO_KEYWORDS宏定义,这样qt就会使用Q_SIGNALS,Q_EMIT, Q_SLOTS来代替原来的emit等关键字,从而解决冲突; 相应的,自己编写的代码中 slots需要替换为Q_SLOTS signals需要替换为Q_SIGNALS emit替换为Q_EMIT; ```C++ class LoginDialog : public QDialog { Q_OBJECT public: explicit LoginDialog(QWidget *parent = nullptr); void initView(); QWidget *createLoginPanel(); void paintEvent(QPaintEvent *); Q_SIGNALS: public Q_SLOTS: }; ``` ### Qt频繁调用update()若干时间后无法自动重绘界面的问题 https://www.jianshu.com/p/b7992593e6a0 参考:https://www.jianshu.com/p/67dde91e6f1f 智能指针方式 ``` F:\0voice\av_media\webrtc\win\rtc_one2one\homedialog.cpp:11: error: C2259: “Conductor”: 无法实例化抽象类 ..\rtc_one2one\homedialog.cpp(11): error C2259: “Conductor”: 无法实例化抽象类 F:\0voice\av_media\webrtc\win\rtc_one2one\conductor.h(10): note: 参见“Conductor”的声明 ..\rtc_one2one\homedialog.cpp(11): note: 由于下列成员: ..\rtc_one2one\homedialog.cpp(11): note: “void rtc::RefCountInterface::AddRef(void) const”: 是抽象的 F:\0voice\av_media\webrtc\win\webrtc\webrtc\webrtc-checkout\src\rtc_base/ref_count.h(56): note: 参见“rtc::RefCountInterface::AddRef”的声明 ..\rtc_one2one\homedialog.cpp(11): note: “rtc::RefCountReleaseStatus rtc::RefCountInterface::Release(void) const”: 是抽象的 F:\0voice\av_media\webrtc\win\webrtc\webrtc\webrtc-checkout\src\rtc_base/ref_count.h(57): note: 参见“rtc::RefCountInterface::Release”的声明 ``` ### socket notifiers cannot be enabled from another thread 网络io不能跨线程使用。 ### windows下CreateOffer时没有回调的原因 peer_connection_->CreateOffer(this,webrtc::PeerConnectionInterface::RTCOfferAnswerOptions()); 具体原因是: 没有在Ui主线程,就接收不到消息。 解决: 切换到Ui主线程,就可以了。 ———————————————— 版权声明:本文为CSDN博主「rjc_lihui」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/rjc_lihui/article/details/123898465 参考文档 [(226条消息) Qt5.15.2+WebRTC学习笔记(六)打开本机摄像头并显示(win10+vs2019)_꧁白杨树下꧂的博客-CSDN博客_webrtc qvideowidget](https://blog.csdn.net/aggs1990/article/details/118251094)