<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[一蓑烟雨任平生 也无风雨也无晴]]></title><description><![CDATA[白云一片去悠悠 青枫浦上不胜愁]]></description><link>https://blog.csdn.net/wangshubo1989</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; wangshubo1989]]></copyright><item><title><![CDATA[WebRTC Native M96 SDK接口封装--本地音频录制(纯音频)startAudioRecording开始客户端录音]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/128399909</link><guid>https://blog.csdn.net/wangshubo1989/article/details/128399909</guid><author>wangshubo1989</author><pubDate>Wed, 21 Dec 2022 17:33:00 +0800</pubDate><description><![CDATA[此前已经说道，通过注册回调，给上层APP抛音频裸数据：上一篇文章，我们已经实现了混音回调：onMixedAudioFrame。本篇我们要在实现纯音频录制接口： startAudioRecording。]]></description><category></category></item><item><title><![CDATA[WebRTC Native M96 回调音频裸数据IAudioFrameObserver--采集和播放语音混音后的数据(onMixedAudioFrame)]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/128252853</link><guid>https://blog.csdn.net/wangshubo1989/article/details/128252853</guid><author>wangshubo1989</author><pubDate>Fri, 09 Dec 2022 14:40:20 +0800</pubDate><description><![CDATA[此前已经说道，通过注册回调，给上层APP抛音频裸数据：《WebRTC Native M96 SDK接口封装–注册语音观测器对象获取原始音频数据registerAudioFrameObserver》[https://dabaojian.blog.csdn.net/article/details/128218542]此篇，就详细讲述一下，如果实现onMixedAudioFrame。]]></description><category></category></item><item><title><![CDATA[WebRTC Native M96 回调音频裸数据IAudioFrameObserver-播放的音频(onPlaybackAudioFrame)]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/128242177</link><guid>https://blog.csdn.net/wangshubo1989/article/details/128242177</guid><author>wangshubo1989</author><pubDate>Thu, 08 Dec 2022 19:06:09 +0800</pubDate><description><![CDATA[上篇已经说道，通过注册回调，给上层APP抛音频裸数据：《WebRTC Native M96 SDK接口封装–注册语音观测器对象获取原始音频数据registerAudioFrameObserver》[https://dabaojian.blog.csdn.net/article/details/128218542]此篇，就详细讲述一下，如果实现onPlaybackAudioFrame。]]></description><category></category></item><item><title><![CDATA[WebRTC Native M96 回调音频裸数据IAudioFrameObserver--采集的音频(onRecordAudioFrame)]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/128225175</link><guid>https://blog.csdn.net/wangshubo1989/article/details/128225175</guid><author>wangshubo1989</author><pubDate>Thu, 08 Dec 2022 00:30:00 +0800</pubDate><description><![CDATA[上篇已经说道，通过注册回调，给上层APP抛音频裸数据：
《WebRTC Native M96 SDK接口封装–注册语音观测器对象获取原始音频数据registerAudioFrameObserver》[https://dabaojian.blog.csdn.net/article/details/128218542]此篇，就详细讲述一下，如果实现onRecordAudioFrame。

AudioFrame的定义，这里就不在重复了，可以看上一篇博客。上文书说道，上层APP已经给我们SDK设置了回调函数，并且我]]></description><category></category></item><item><title><![CDATA[WebRTC Native M96 SDK接口封装--注册语音观测器对象获取原始音频数据registerAudioFrameObserver]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/128218542</link><guid>https://blog.csdn.net/wangshubo1989/article/details/128218542</guid><author>wangshubo1989</author><pubDate>Wed, 07 Dec 2022 13:14:03 +0800</pubDate><description><![CDATA[很多时候，上层app需要获取RTC中的音频数据，比如获取RTC麦克风采集的裸数据、扬声器播放的混音之后的裸数据，再比如麦克风和扬声器混音后的裸数据等等。在实时音视频中，用户可以对采集到的音频数据进行前处理和后处理，获取自己想要的播放效果，例如变音、录音等等。那么就需要上层APP向RTC SDK注册一个观测器，也就是我们所说的callback，订阅音频数据输出
该方法用于注册音频观测器对象，即注册回调。当需要 SDK 给出 onMixedAudioFrame、onRecordAudioFrame、onPlay]]></description><category></category></item><item><title><![CDATA[WebRTC Native M96收集网卡地址信息以及筛选过滤VPN网络(CreateNetworks、FilterNetworks)]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/125750487</link><guid>https://blog.csdn.net/wangshubo1989/article/details/125750487</guid><author>wangshubo1989</author><pubDate>Tue, 12 Jul 2022 21:51:37 +0800</pubDate><description><![CDATA[网络类型很多，比如网线、WIFI、蜂窝网络、VPN、LOOPBACK等等。
那么WebRTC在连接的时候，就可以对网络进行筛选，尤其是对于多网卡，多种连接方式的设备。WebRTC 收集网卡信息的时机线程： signaling thread

线程： network thread
在StartUpdating()中，向消息队列抛一个消息：kUpdateNetworksMessage
接收到 KUpdateNetworksMessage 后调用 BasicNetworkManager::UpdateNetwor]]></description><category></category></item><item><title><![CDATA[WebRTC Native M96编码规范向导(C++ C Python Java Oc Gn)]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/125450985</link><guid>https://blog.csdn.net/wangshubo1989/article/details/125450985</guid><author>wangshubo1989</author><pubDate>Fri, 24 Jun 2022 19:08:47 +0800</pubDate><description><![CDATA[https://webrtc.googlesource.com/src.git/+/17071682f7fa70589e194b5882b43c611d055c74/style-guide.mdWebRTC遵循Chromium和Google C++ type的编码规范，如果两者有冲突，那么请参照Chromium的编码规范。
《Chromium C++ style guide》
《Google C++ Style Guide》WebRTC使用C++11：.h和.cc要成对的出现，并且使用同样的名字，在相同的文]]></description><category></category></item><item><title><![CDATA[WebRTC Native M96 基础Base模块介绍之网络相关的封装]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/125433325</link><guid>https://blog.csdn.net/wangshubo1989/article/details/125433325</guid><author>wangshubo1989</author><pubDate>Thu, 23 Jun 2022 19:17:58 +0800</pubDate><description><![CDATA[与版本无关的 IP 地址类，包装了 in_addr 和 in6_addr 的联合。对IP地址的封装IPAddress和InterfaceAddress，IPAddress重载了==、!=、、地址支持string()、sensitive_string()和uint32_t(AF_INET)()类型输出，还支持IPV4转IPV6类型()。InterfaceAddress是IPAddress的子类()，增加了IPv6属性()
使用：
还提供一些方法，比如字符串转IP：
rtc_base SocketAddr...]]></description><category></category></item><item><title><![CDATA[WebRTC Native M96 基础Base模块介绍之实用方法的封装(MD5、Base64、时间、随机数)]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/125403530</link><guid>https://blog.csdn.net/wangshubo1989/article/details/125403530</guid><author>wangshubo1989</author><pubDate>Wed, 22 Jun 2022 09:49:42 +0800</pubDate><description><![CDATA[实现了多种类型的消息摘要算法，DIGEST_MD5、DIGEST_SHA_1、DIGEST_SHA_224、DIGEST_SHA_256、DIGEST_SHA_384、DIGEST_SHA_512[];
MD5:
MD5信息摘要算法（英语：MD5 Message-Digest Algorithm），一种被广泛使用的密码散列函数，可以产生出一个128位（16字节）的散列值（hash value），用于确保信息传输完整一致。

HMAC是密钥相关的哈希运算消息认证码（Hash-based Message Aut]]></description><category></category></item><item><title><![CDATA[WebRTC Native M96 基础Base模块介绍之字符串处理相关的封装]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/125367658</link><guid>https://blog.csdn.net/wangshubo1989/article/details/125367658</guid><author>wangshubo1989</author><pubDate>Mon, 20 Jun 2022 10:32:00 +0800</pubDate><description><![CDATA[字符串相关操作是永恒的话题，c++的string类给我们提供很多字符串操作的方法，但是再具体的情况下，还需要自己实现一些字符串的组装、格式化、转换等。rtc::GetStringFromJsonObject使用：
rtc::StringBuilder使用：
rtc::StringFormat使用：
rtc::ToString的使用：
rtc_base crypt_strings
封装了一个加密字符串CryptString，加密字符串的字符可以是任意字符
使用：
rtc_base string_encode
]]></description><category></category></item><item><title><![CDATA[WebRTC Native M96 基础Base模块介绍之缓冲区相关的封装(CopyOnWriteBuffer、ByteBufferWriter、BitBufferWriter、BufferT、Buf]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/125322582</link><guid>https://blog.csdn.net/wangshubo1989/article/details/125322582</guid><author>wangshubo1989</author><pubDate>Thu, 16 Jun 2022 20:17:08 +0800</pubDate><description><![CDATA[在WebRTC中，不论是发送接收数据通道的数据、还是发送接收音视频数据，数据本身都存储于一个临时的Buffer中，这个Buffer的实现类为CopyOnWriteBuffer。顾名思义，该Buffer实现了 “写时复制” 的技术。封装了一个写时复制缓存CopyOnWriteBuffer，其实就是封装了一个共享指针Buffer以及处理nullptr Buffer的情况，WebRTC中常用于RTP包的传递。Copy-on-write 主要用于共享操作系统进程的虚拟内存，在 fork 系统调用的实现中。通常，该进]]></description><category></category></item><item><title><![CDATA[WebRTC Native M96 H264打包方式解读--kH264SingleNalu、kH264StapA、kH264FuA]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/125285116</link><guid>https://blog.csdn.net/wangshubo1989/article/details/125285116</guid><author>wangshubo1989</author><pubDate>Tue, 14 Jun 2022 20:04:22 +0800</pubDate><description><![CDATA[在中介绍了WebRTC中H264的相关知识，这边不再啰嗦。抓了一个rtp的包：

RTP包header
V：RTP协议的版本号，占2位，当前协议版本号为2
Version: (2 bits) Indicates the version of the protocol. Current version is 2.P：填充标志，占1位，如果P=1，则在该报文的尾部填充一个或多个额外的八位组，它们不是有效载荷的一部分。
P (Padding): ...]]></description><category></category></item><item><title><![CDATA[WebRTC Native M96 SDK接口封装--setLogFile设置 SDK 输出的日志文件]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/125201107</link><guid>https://blog.csdn.net/wangshubo1989/article/details/125201107</guid><author>wangshubo1989</author><pubDate>Thu, 09 Jun 2022 12:44:51 +0800</pubDate><description><![CDATA[日志，是排查问题的主要手段。
WebRTC自己带有日志模块，但是不够灵活，我们需要上层自己封装一层，提供成接口供上层调用。
比如，设置日志生成的位置，设置日志的大小，以及设置日志的等级。...]]></description><category></category></item><item><title><![CDATA[WebRTC Native M96视频基础知识介绍--使用H264]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/124463121</link><guid>https://blog.csdn.net/wangshubo1989/article/details/124463121</guid><author>wangshubo1989</author><pubDate>Wed, 27 Apr 2022 23:11:47 +0800</pubDate><description><![CDATA[名词解释
视频
泛指将动态影像以电信号方式加以捕捉、纪录、处理、存储、发送与重现的各种技术。
视频格式
视频是现在电脑中多媒体系统中的重要一环。为了适应储存视频的需要，人们设定了不同的视频文件格式以将视频和音频放在一个文件中，以方便同时播出。
什么3gp、mp4、avi啊，这些视频格式，从中学时代就有听说。
首先，MP4、AVI、MKV都是本地视频文件的后缀，在windows系统下，用于提示操作系统应该采用哪个应用程序打开。而在流媒体领域，这些都被称为『视频封装格式』

视频协议
是针对网络流媒体而言的，也]]></description><category></category></item><item><title><![CDATA[WebRTC Native M96音频基础知识介绍--使用Opus]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/124440301</link><guid>https://blog.csdn.net/wangshubo1989/article/details/124440301</guid><author>wangshubo1989</author><pubDate>Tue, 26 Apr 2022 23:50:39 +0800</pubDate><description><![CDATA[声波
声音是振动产生的声波，通过介质（气体、固体、液体）传播并能被人或动物听觉器官所感知的波动现象。
声音的特性可由三个要素来描述，即响度、音调和音色
音频（音调）
音调就是音频。物理学中用每秒内振动的次数–频率来描述物体振动的快慢。物体振动的快（即频率高）则音调高，物体振动的慢（及频率低）则音调低。
声音的频率一般会以赫兹表示，记为Hz，指每秒钟周期性震动的次数
音量（响度）
响度就是声音的大小强弱。取决于物体振动的幅度
分贝是用来表示声音强度的单位，记为dB。
数字音频
数字音频是指使用脉冲编码调制、.]]></description><category></category></item><item><title><![CDATA[WebRTC Native M96 SDK接口封装--muteRemoteVideoStream接收/停止接收指定远端用户的视频流]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/124001210</link><guid>https://blog.csdn.net/wangshubo1989/article/details/124001210</guid><author>wangshubo1989</author><pubDate>Wed, 06 Apr 2022 21:50:28 +0800</pubDate><description><![CDATA[之前，介绍了如何实现muteLocalVideoStream和muteLocalAudioStream。

接口定义(Agora)
接口名：
&nbsp;&nbsp;&nbsp;muteRemoteVideoStream
接口定义：
virtual int agora::rtc::IRtcEngine::muteRemoteVideoStream(uid_t userId, bool mute)  

接口功能：
&nbsp;&nbsp;&nbsp;接收／停止接收指定远端用户的视频流。
注解：
&nbsp;]]></description><category></category></item><item><title><![CDATA[WebRTC Native M96 SDK接口封装--muteLocalAudioStream开关本地音频发送]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/123722654</link><guid>https://blog.csdn.net/wangshubo1989/article/details/123722654</guid><author>wangshubo1989</author><pubDate>Thu, 24 Mar 2022 21:49:24 +0800</pubDate><description><![CDATA[摊牌了，水了一篇。
因为之前介绍了muteLocalVideoStream接口的实现，那么实现muteLocalAudioStream就大同小异了。

接口定义(Agora)
接口名：
&nbsp;&nbsp;&nbsp;muteLocalAudioStream
接口定义：
virtual int agora::rtc::IRtcEngine::muteLocalAudioStream(bool mute)

接口功能：
&nbsp;&nbsp;&nbsp;开关本地音频发送。
&nbsp;&nbsp;&nb]]></description><category></category></item><item><title><![CDATA[WebRTC Native M96 SDK接口封装--muteLocalVideoStream开关本地视频发送]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/123722559</link><guid>https://blog.csdn.net/wangshubo1989/article/details/123722559</guid><author>wangshubo1989</author><pubDate>Thu, 24 Mar 2022 21:47:02 +0800</pubDate><description><![CDATA[https://dabaojian.blog.csdn.net/article/details/123587207

已经介绍了如何开关本地预览，现在介绍一下mute/unmute本地音视频设备的接口。
比如，实时直播课课间休息，老师想要干一点自己的事情，例如，对着摄像头补妆一下，但是又不想被学生看到。
这个时候可以调用muteLocalVideoStream接口，本地的摄像头还依然在采集的数据，本地预览还是正常的，只是采集的视频数据不发送到远端用户。
所以，这么分析之后，比较明朗了，这个接口，不需要操作硬]]></description><category></category></item><item><title><![CDATA[WebRTC Native M96 SDK接口封装--startPreview开启视频预览]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/123587207</link><guid>https://blog.csdn.net/wangshubo1989/article/details/123587207</guid><author>wangshubo1989</author><pubDate>Fri, 18 Mar 2022 23:51:48 +0800</pubDate><description><![CDATA[今天聊的事儿，跟peer connection一点关系没有，只是开启本地预览。
在没有进行任何网络连接的时候，用户也可以先把本地的摄像头打开，孤芳自赏一下。
如何枚举视频设备，已经介绍过了：https://dabaojian.blog.csdn.net/article/details/123511090
如何设置本地和远端的视频显示视图，也已经介绍过了：
接口定义(Agora)
接口名：startPreview
接口定义：
virtual int agora::rtc::IRtcEngine::start.]]></description><category></category></item><item><title><![CDATA[WebRTC Native M96数据统计-- 使用PeerConnection::GetStats获取WebRTC实时统计信息]]></title><link>https://blog.csdn.net/wangshubo1989/article/details/123560700</link><guid>https://blog.csdn.net/wangshubo1989/article/details/123560700</guid><author>wangshubo1989</author><pubDate>Thu, 17 Mar 2022 21:15:24 +0800</pubDate><description><![CDATA[ShineMo Demo
https://rtc.api.zhlh.sinopec.com/
web端可以使用以下功能来看数据统计：
chrome://webrtc-internals/
chrome://webrtc-internals/
https://rtc.api.zhlh.sinopec.com/



下面介绍native端的数据统计！！！
监控打点的意义
实时音视频通话受网络状态影响很大，网络丢包延时都会导致视频通话质量。受设备性能影响也很大，CPU或者内存使用率高，可能导致音视频编解码卡顿。]]></description><category></category></item></channel></rss>