![](https://img-blog.csdnimg.cn/e46d5e84694e421e949fbfe87f460ae3.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
webrtc
文章平均质量分 72
Webrtc Native C++
优惠券已抵扣
余额抵扣
还需支付
¥99.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
、、、、南山小雨、、、、
秋风吹湘水,落叶满南山.
展开
-
webrtc m120/m126版本编译错误
src/examples/BUILD.gn中,找到stunserver,将对此工程的编译除去。不编译这个demo并不影响生成的libwebrtc.a。在g++9编译器带的库中报错,应该是与webrtc-m120版本不匹配,升级成gcc/g++11后OK。这个报错意思是为结构体内没有添加上初始化函数?在m126版本中,出现以下错误。原创 2024-06-27 14:43:50 · 45 阅读 · 0 评论 -
webrtc-m120编译 (m126)
目标cpu架构,ios:arm,arm64,x64,x86,Android:arm,arm64,x86(32位),x64(64位),Windows:x86、x64。is_component_build 是否使用动态运行期库,这里取false,使用静态运行期库,Release版本将对应MT,Debug版将对应MTd。是否使用动态运行期库,这里取false,使用静态运行期库,Release版本将对应MT,Debug版将对应MTd。是否是Debug版,这里取false,表示编译Release版。原创 2024-06-26 15:20:14 · 118 阅读 · 0 评论 -
x86_64 ubuntu22.04编译MetaRTC
用QT打开demo里的metaplayer7,metapushstream7,并编译,注意QT的工程项目生成路径建议使用默认的,如果自定义的话,需要同级目录,因为.pro里用到了这个目录。下载yangh264decoder(从metartc7开始,解码由ffmpeg改为重新造的轮子yangh264decoder,这个库编译后只有1M,适合嵌入式)将上面编译的libyangh264decoder.a,放到linux/thirdparty/lib中。放到linux/thirdparty/lib中。原创 2024-03-29 13:29:02 · 219 阅读 · 0 评论 -
Check failed: current_thread->IsInvokeToThreadAllowed(this) Fatal error in: ../../rtc_base/thread.c
webrtc有三大线程,线程之间的并不能随便调用,也就是不同的函数工作在不同的线程中,因此在使用C++api或者改动源码时一定要注意,不同的函数里不能随意调用其他的接口api,可能会报这个错误。笔者是在推流断网重连后,在以下函数中调用了拉流的代码报出的以上错误。原创 2023-04-29 11:55:04 · 200 阅读 · 0 评论 -
Failed to set remote answer sdp: Called in wrong state: stable
这是因为上次的webrtc的通道没有关闭,内存没有清除。原创 2023-04-14 17:38:42 · 814 阅读 · 0 评论 -
Webrtc Native C++如何自定义断网重联
在 OnIceConnectionChange 方法中,当 ICE 连接状态变为 kIceConnectionDisconnected 时,可以启动一个计时器,在一定时间后尝试重新连接。综上所述,您可以通过重写 OnIceConnectionChange 方法来监听 ICE 连接状态的变化,并在一定时间后尝试重新连接,从而实现在 WebRTC 中自定义重连时间的功能。例如,可以使用 rtc::Thread::Current()->PostDelayedTask 方法来实现计时器。原创 2023-04-10 19:41:05 · 838 阅读 · 0 评论 -
Webrtc Native C++切换音频输入源
/ 将音频源添加到 PeerConnectionFactory。// 创建一个 AudioDeviceModule 对象。// 创建 PeerConnectionFactory。// 创建 AudioOptions 对象。// 创建 Device 对象。// 没有找到指定的音频设备。// 获取要使用的音频设备。原创 2023-02-14 18:19:22 · 750 阅读 · 0 评论 -
scoped_refptr, unique_ptr的各种用法
scoped_refptr 是 Chromium 项目中用于管理内存的一种类型,它是一种引用计数智能指针,用于指向对象。scoped_refptr 的这些用法提供了一种很好的方式来管理内存,确保内存在不再需要时被正确释放,并且在使用过程中可以方便地维护对象的引用计数。原创 2023-01-11 11:35:16 · 530 阅读 · 0 评论 -
Webrtc Native C++在root模式下启用PulseAudio,音频采集替换为ALSA模式
但是,除非您自己编译应用程序并在各处启用ALSA支持-或使用基于源的发行版(如Gentoo),否则可能会遇到混合问题。默认情况下,它带有PulseAudio,因此每个应用程序都被编译为仅使用PulseAudio。人们说这对处理网络音频非常有用,它解决了纯ALSA下发生的多通道音频流的一些问题。在运行时,它使用Alsa(无dmix),并管理各种混合,设备,网络设备以及所有内容。但是,在默认配置中,它向混合中添加了不小的延迟。对于某些要求低延迟的任务,例如某些游戏和软件,这是一个很大的缺点。原创 2023-01-05 12:51:29 · 1133 阅读 · 0 评论 -
webrtc Native C++ 音视频实时开关,码率/帧率实时调控,分辨率调整,音量大小调节
这个是实时开启关闭音视频的接口,这里是在放入轨道时的控制,这个轨道是用于添加到传输流里的,因此在这里开启关闭不会影响分发器分发给本地,而是对是否发送给远端进行开启关闭,设置了这个之后编码器也就接收不到音视频流了,因此编码器并不会编码,也节省了不少cpu。码率的最大值设置,期待值设置,这里有点像CBR模式,不过在webrtc中这些设置好了后并不会严格按照这个来,还要根据传输时的带宽评估,码率自动调节搭配起来一起管控码率。WebRTC版本M76。原创 2022-12-26 09:40:01 · 1449 阅读 · 0 评论 -
Simulcast与SVC
通过api方式设置进去,如下,设置三路,第一路码率是900kb,第二路是300kb,分辨率是第一路的二分之一,第三路码率是100kb,分辨率是第一路的四分之一。一个客户端向服务器发送高清,标清,低清三种视频流,服务器根据其他接收客户端的带宽情况分发不同的视频流。Simulcast不仅有客户端的工作,还有服务器的工作。1.这些修改SDP比较麻烦,需要配置各个流之间的关系。拿到VP9的SVC码流如何区分出各层,并分别转发各层。老的rid方式(firefox用法)新的rid方式(规范)VP9中的SVC码流。原创 2022-12-19 20:29:57 · 768 阅读 · 0 评论 -
webrtc Native C++视频旋转/裁减/绿屏问题
一、绿屏和裁减现象 1.1绿屏现象 1.2裁减问题 二、出现绿屏和裁减现象的原因 三、如何防止这两个现象 3.1webrtc中相关宏 3.2在接收函数中处理原创 2022-11-16 13:49:43 · 1554 阅读 · 0 评论 -
webrtc 源码分析视频编码器创建,编码的过程
创建任务,并将任务插进队列,这个任务是一个匿名函数,主要调用MaybeEncodeVideoFrame(incoming_frame, post_time.us())函数,下面图片中这个函数名字拼写有误,这个函数在src/video/video_stream_encoder.cc中。)内部的函数调用过程,如果没有创建编码器则调用左列创建,创建好后调用右列进行编码,编码好通过回调函数再调回编码后的数据。)这个函数来获取分发器给的视频帧数据。编码器是什么时候开始创建的呢,是在第一帧数据来的时候开始创建的。原创 2022-10-30 18:48:49 · 539 阅读 · 0 评论 -
webrtc 源码分析 视频的采集与分发器
>->vcm_=RegisterCaptureDataCallback(this)//为这个视频设备设置回调,this为VcmCapture的对象,拿到视频后给这个对象。->TestVideoCapturer::AddOrUpdateSink(sink, wants)//这里类里有分发器对象最为引用的。)//创建一个视频设备。可以看到当完成编码器这块后,调用的过程和第一种方法相同了,把编码器注册进sink_pairs。VcmCapturer持有vcm_这个对象作为成员,vcm_具有控制底层摄像头的能力。原创 2022-10-29 18:59:08 · 776 阅读 · 0 评论 -
ice-full与ice-lite
本端和对端的ice会收集到很多Candidate,两端会形成NxN的配对,也就是一对对CandidatePair,如果对每个Pair都做连通性检测,会花很多时间,因此有了ice提名,看对方是否同意,同意就对这个Pair做连通性检测,一旦成功建立好连接,就不会对后面的Pair再连通性检测了。为什么有ice-lte:一些客户端放在公网上,没有网络的限制,其他客户端都能与它连接,因此它不需要ice协议里的一些复杂操作,但它依然要与其他通信,因此有些必要的操作要实现。ice-full是ice协议的完整实现。原创 2022-10-24 08:46:16 · 1218 阅读 · 0 评论 -
SioChatDemo_CM环境配置
笔者安装为7.85.0版本。原创 2022-10-21 14:10:33 · 222 阅读 · 0 评论 -
webrtc Native C++ 客户端的内存释放问题
但是对摄像头的访问,是互斥的,一旦一个webrtc客户端正在占用,这时再启用另一个webrtc客户端时,无法访问摄像头,也取不到视频流。(2.)ref代表它有引用记数功能,它指向的对象必定继承自RefCountInterface抽象类。还有本地的摄像头一直被原来申请的webrtc底层的设备管理对象占用着,怎么才能再次获得摄像头的使用权呢?(1.)scoped代表了当它超过了它的作用域时,会自动释放对象,也就是它时有范围的。当挂断后再次推拉流,那么原来的申请的webrtc的底层各种对象空间该怎么释放呢?原创 2022-10-19 17:43:11 · 1128 阅读 · 0 评论 -
webrtc Native C++ 注册渲染器获取本地的视频流
在webrtc源码中取到本地的视频流后会把视频流交给分发器,一部分交给编码模块编码,一部分可以取出来作为本地的渲染。考虑到音视频交互如视频电话,视频会议都会有一个本人的窗口,在这里补充如何使用Google webrtc的C++ API,注册渲染器来获取本机摄像头采集到的视频流。这里把本地的视频video_track_分发成两路,一路通过AddTrack(video_track_, {kStreamId});4.给渲染器类声明对象,启动订阅视频帧,启动将渲染器类对象注册webrtc底层。原创 2022-10-17 17:17:44 · 1329 阅读 · 0 评论 -
webrtc Native C++ Datachannel使用
Datachannel有两种传输方式,DCT_RTP,DCT_SCTP,DCT_RTP是不可靠的传输, DCT_SCTP-可靠的传输,它们的加密方式有对应关系,DCT_RTP加密方式必须为SDES,也可以选择不加密,DCT_SCTP加密方式必须为DTLS。Datachannel使用udp发送,但在上层协议使用SCTP,SCTP是一个具备流量控制,拥塞控制的可靠协议。以下改动均在peerconnection_client代码上改动,其他版本差别不大,逻辑是每10向对端发送一个字符串,对端接收后就打印出来。原创 2022-10-12 17:02:56 · 1450 阅读 · 0 评论 -
webrtc防抖动策略NetEq
NetEq用到的几种缓冲区。NetEq的MCU与DSP。原创 2022-10-11 16:36:06 · 748 阅读 · 0 评论 -
webrtc的传输质量
rtp包头里含有Sequence字段,这个字段用于接收端对数据包重新排序,因为udp传输不能保证包的有序性。除此之外还有丢包重传的作用,接收端发现一个包丢了,就会通过rtcp返回发送端,发送端进行重新传输。这也就是NACK的原理。组帧:一帧视频会分为多个rtp包,一帧的帧头和帧尾在rtp包中都有标识,因此接收端按照Sequence排序后,也知道从哪些包到哪些包组成一个完整的帧。RTP/RTCP协议。原创 2022-10-04 12:30:03 · 405 阅读 · 0 评论 -
webrtc Native C++ 视频采集详解 从应用层到源码层
前者用于捕获记录设备信息。后者用于采集视频帧。NumberOfDevices()记录有几个可采集的设备,GetCapability()函数用于获取设备的能力比如支持多大分辨率和帧率。VideoCaptureModule拥有DeviceInfo作为它的引用,同时有DirectShow的接口 ,CaptureSinkFilter用于存放采集好的视频帧。webrtc在不同平台下使用的采集库不同,在windows下使用的DirectShow,因此VideoCaptureDS类中的DS即指代DirectShow。原创 2022-10-02 16:39:21 · 798 阅读 · 0 评论 -
webrtc(native C++) + srs 拉流客户端
同时因为VideoRenderer类中也含有窗口类因此需要重新定义,去除其中的窗口类,这个类也就是我们自定义的渲染器,这个类继承自publicrtc::VideoSinkInterface。首先修改void Conductor::AddTracks()函数,在推流阶段这里是把音视频流轨道添加进去,现在需要改动一下,需要添加好接收的流轨道。,其中有个OnFrame函数必须要重写,因为将VideoRenderer类的对象注册进webrtc后,当视频帧来时调用OnFrame函数来获得。这个函数本来是执行以下。原创 2022-09-26 15:19:00 · 1129 阅读 · 4 评论 -
调用libwebrtc.a+srs(sfu)
rtc_include_tests=false//rtc_include_tests:关闭测试代码,如果用libstdc++,编译test部分会报错。use_custom_libcxx=false//使用libstdc++,默认使用libc++这两个文件放到项目里去。use_rtti=true//这里用了rtti,在CMakeLists中要保持一致。rtc_enable_protobuf=false//不使用protobuf。is_clang=false//使用gcc编译器,默认使用clang编译器。原创 2022-09-23 10:36:29 · 495 阅读 · 0 评论 -
linux 编译c++ socket.io(webrtc信令协议)
运行起来后,可以用几个浏览器界面打开:http://localhost:3000进行通信,或使用c++客户端。可以看到它依赖的外部库,这四个文件夹都是空的,删除他们,自己下载相对应的库放在这个目录下,并不需要编译它们。运行./bootstrap.sh,作编译前的配置,下面配置以下生成库存放的路径。同时它运行时还依赖boost,需要编译boost库。可以看到这里配置了boost库的路径和版本。开始编译socket.io客户端了。下载socket.io客户端。原创 2022-08-31 10:01:31 · 452 阅读 · 0 评论 -
各webrtc sfu对比
SIMcst 要上传三路分辨率 下行一路 声网用,一般用这个SVC也有用的,zim,思科之类 分为核心层,扩展层,边缘层,有依赖关系,第一层码率很低也很模糊,同时它的分辨率也很小,每多来一层就更清晰一点,sfu发现接收端带宽不够就少发外层,再不够就再少发一层两种方案不能混用licode 是mcu的优秀方案,官方规定只能在Ubuntu14.04上部署,或者docker环境。最好使用它官方的docker不然编译大把问题,但是docker本身也增加性能损耗 对licode二次开发比较困难 代码笨重janus原创 2022-07-05 17:52:16 · 3381 阅读 · 0 评论 -
webrtc优势与模块拆分
webrtc网络模块好在哪里:保障数据传输的实时性原创 2022-06-27 14:20:00 · 1200 阅读 · 0 评论 -
webrtc直播框架
标准 WebRTC 接入过程会有各种限制:它不支持直播中常用音频 AAC 编码和 44.1k 采样率。其它不支持视频 B 帧、H265等编码特性,多 slice 编码在弱网下也会花屏。WebRTC 建联过程耗时过长,会影响秒开体验。如果用p2p的模式无法是实现多人直播业务,所以应当一路采集推送服务器,多路拉取,采集推送和拉取都使用webrtc协议。目前开源的主流webrtc媒体服务器如下:Kurento(https://github.com/Kurento/kurento-media-server原创 2022-01-06 08:43:26 · 2352 阅读 · 0 评论 -
在webrtc中新建一个工程
在webrtc中新建一个工程:然后在/home/yqw/temp/webrtc_all/webrtc-checkout_render/src/examples/peerconnection目录下建立文件夹client_srs,把.h和.cc文件放入这个文件夹。打开src\examples\BUILD.gn,在657行左右:if (is_linux || is_chromeos || is_win) { #####################yqw 新增界限 rtc_executable("原创 2022-05-11 15:42:40 · 304 阅读 · 0 评论 -
webrtc+turn+peerconnection_server测延时
一、环境说明:在centos7上运行turn+peerconnection_server一台网关下的局域网ubuntu20运行peerconnection_client一台wifi ubuntu20运行peerconnection_client期待:要么打动成功,要么中继,两端都应该能看到视频二、在centos7上配置turn:安装相关依赖:yum install -y make gcc cc gcc-c++ wget openssl-devel libevent libevent-devel原创 2022-04-22 16:59:57 · 1184 阅读 · 0 评论 -
webrtc(native C++)+srs(sfu)测延时200ms
srs集成了信令服务器的功能srs没有打洞功能,推拉流端与它连接时需要手动设置CANDIDATE,把自己的公网ip暴露给srs,这样推拉流两端都和srs建立了p2p,这就是sfu的模型,one-to-many,suf服务器会把接收到的流分发给其他参与者。参考:peerconnection_client实现srs推拉流sfu原理.........原创 2022-04-20 12:00:35 · 2207 阅读 · 2 评论 -
webrtc报错:Unable to load:src/third_party/usrsctp/BUILD.gn
gn gen out/linux --args=‘is_debug=true target_os=“linux” target_cpu=“x64” is_clang=false treat_warnings_as_errors=false rtc_include_tests=false rtc_use_h264=true is_component_build=false use_custom_libcxx=false rtc_enable_protobuf=false use_rtti=true propr原创 2022-04-19 13:17:59 · 986 阅读 · 0 评论 -
拉取webrtc代码报错:python3/bin/python3: 没有那个文件或目录
fetch --nohooks webrtc/home/deviser/temp/webrtc_all/depot_tools/bootstrap_python3: 行 32:bootstrap-2@3.8.10.chromium.23_bin/python3/bin/python3: 没有那个文件或目录 cat:/home/deviser/temp/webrtc_all/depot_tools/python3_bin_reldir.txt:没有那个文件或目录 /home/deviser/tem原创 2022-04-18 11:40:35 · 6476 阅读 · 1 评论 -
ubuntu20.4编译metartc
sudo apt-get install build-essential //执行这个不然qt的qmake无法执行安装QT:5.14.2开始载入项目,编译器用默认的。将第三方库放入thirdparty/lib中将运行时库放入bin/app_debug/lib中,同级目录还应该有yang_config.ini其中yangwincodec3不能在ubuntu20上编译。此时逐个qmake和重新构建,其中metaplayer3需要安装ffmpeg库才能正常,不然缺少库。ffmpeg应该去这个目录下找原创 2022-04-13 11:19:31 · 1652 阅读 · 0 评论 -
metapushstreams推流+srs+metaplayer3
metapushstreams:webrtc://127.0.0.1/live/livestreammetaplayer3:webrtc://127.0.0.1/live/livestreamsrs:objs/srs -c conf/https.rtc.conf原创 2022-04-09 14:43:40 · 2613 阅读 · 0 评论 -
使用webrtc去共享内存读取数据
\srcmodules\video_capture\linux :StartCapture() / StopCapture() / RegisterCaptureDataCallback() / DeRegisterCaptureDataCallback()https://blog.csdn.net/boywgw/article/details/68059457?ops_request_misc=%257B%2522request%255Fid%2522%253A%252216486307771678原创 2022-03-30 17:18:03 · 379 阅读 · 0 评论 -
编译webrtc报错:ERROR: The installation of the Chrome OS default fonts failed.
Installing Chrome OS fonts.Installing Chrome OS fonts to /usr/local/share/fonts/chromeos. % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0原创 2022-03-21 14:26:17 · 827 阅读 · 0 评论 -
webrtc编译
官网:https://webrtc.googlesource.com/src/+/refs/heads/main/docs/native-code/index.md源码:https://webrtc.googlesource.com/src/首页:https://webrtc.org/webrtc中文网:https://webrtc.org.cn/大话webrtc:https://blog.jianchihu.net/big-talk-webrtc.html 及剑痴乎:https://blog.ji原创 2022-03-21 11:13:06 · 3140 阅读 · 0 评论