WebRTC
webrtc相关知识记录
优惠券已抵扣
余额抵扣
还需支付
¥29.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
chinabinlang
webrtc,音视频编程,视频会议开发,视频直播,电子白板开发
展开
-
webrtc packetbuffer 完整frame 判断
视频 packet,假定一下9个 video rtp packet 在buffer中, 如果 5 丢失了,判断5是前一个frame的最后一个packet,还是后一个frame的第一个packet;原创 2022-08-17 12:00:05 · 380 阅读 · 0 评论 -
webrtc Android 端 video 软解码创建
关于软解码的创建,webrtc 在Android端 默认添加有 vp8 和 vp9 两个软解码;如果需要 h264 软解码,需要自己添加,参考之前的文章;1:如果指定只要软解码,可以手动修改代码;2:webrtc默认启动会检测 Android 是否支持 hwdecode,如果不支持或者hwinitdecode 失败,会创建软解码; 但是如果检查到 hwdecode 存在,但是 initdeocde 的时候却 crash 了,需要自己手动修改代码,支持切换到软解;3:根据web...原创 2021-06-24 11:49:28 · 702 阅读 · 1 评论 -
webrtc 中的 Android 端 jni
一:基本知识点:简单说明一下;java 和 C++ 需要相互调用,所以自然就需要相关的技术形式;1: java 调用 C++: 在 java 层 通过 函数声明 native 实现,然后再 C++ 中实现相关函数,c++ 中实现的函数要有相关命名规则,包名_函数名:如:Calculator.javapublic Class Calculator {pbulic int native Add(int a, int b);}Calculator.cc 如...原创 2021-06-23 18:31:27 · 512 阅读 · 0 评论 -
webrtc Android 端 添加 h264 软解码
说一下流程:也没啥东西,按着vp8 ,vp9的方法添加就可以了;1webrtc\src\examples\androidapp\src\org\appspot\apprtc\PeerConnectionClient.java原创 2021-06-15 11:29:44 · 1816 阅读 · 4 评论 -
RTCP包中的NTP Time 计算
关于 RTCP中的NTP Time计算有很多人不清楚,还好因为有很多开源的rtp库,这里可以参考ORTP库中的算法://oRTP开源工程uint64_t ortp_timeval_to_ntp(const struct timeval *tv){uint64_t msw;uint64_t lsw;msw=tv->tv_sec + 0x83AA7E80; /* 0x83A原创 2014-10-15 13:58:19 · 6682 阅读 · 0 评论 -
webrtc 在 Windows 上 调试时,崩溃问题
目前的 webrtc 版本调试运行的时候,会遇CaptureInputPin::Receive 崩溃问题,屏蔽 check 就可以了;STDMETHODIMP CaptureInputPin::Receive(IMediaSample* media_sample) {// RTC_DCHECK_RUN_ON(&capture_checker_); // 屏蔽这句话;...原创 2021-05-12 17:15:44 · 909 阅读 · 0 评论 -
mac 编译webrtc SDK 版本错误
Mac 升级后,编译 webrtc 提示SDK版本错误,需要修改:1:webrtc -> src -> build -> mac -> find_sdk.py 修改这个文件;2:查看 SDK 版本: xcrun --show-sdk-version我的版本显示的是:11.1修改:75行:sdks = [re.findall('^MacOSX(11\.\d+)\.sdk$', s) for s in os.listdir(sdk_dir)]...原创 2021-04-16 11:21:55 · 588 阅读 · 0 评论 -
OpenH264的参数
一:创建编码器,初始化设置:说明:不是所有参数都是要设置,可以通过 int EXTAPI GetDefaultParams (SEncParamExt* pParam) = 0;获取默认参数,然后修改几个主要初始化编码参数;1.1: 常用初始化参数设置:typedef struct TagEncParamBase {EUsageTypeiUsageType; ///< application type; please refer to the definition of EU.原创 2021-04-14 17:49:09 · 705 阅读 · 1 评论 -
webrtc支持的最小分辨率
constexpr int kDefaultMinPixelsPerFrame = 320 * 180; // We will never ask for a resolution lower than this. // TODO(kthelgason): Lower this limit when better testing // on MediaCodec and fallback implementations are in place. // See h...原创 2021-03-08 16:51:24 · 648 阅读 · 0 评论 -
webrtc音频回调设置
// Connect the ADM to our audio path. //就在这里; adm()->RegisterAudioCallback(audio_state()->audio_transport());原创 2021-02-25 16:05:43 · 565 阅读 · 0 评论 -
webrtc 中 音频采集设备的开启
在webrtc中,如果自己创建了 adm,那么一般会自己打开设备,退出的时候,再关闭设备;但是webrtc在创建stream的时候,会自动判断,如果设备没有打开,会自动打开,关闭的时候,会自动关闭;当然设备需要自己创建;以下关于音频设备的的自动打开;//音频添加 send stream;void AudioState::AddSendingStream(webrtc::AudioSendStream* stream, ...原创 2021-02-07 11:32:00 · 547 阅读 · 0 评论 -
webrtc VisaulStudio2017 IntelliSense 设置
编译一个webrtc最新版本后,提示有问题,很多红线,参数提示错误;主要是因为在工程中,sdk版本应该设置为编译需要的sdk版本;修改:属性管理器 -》 单击第一个工程,Shift+单击最后一个工程 -》 设置指定版本SDK;然后打开任意cc(cpp)文件 -》右键 -》 重新扫描 -》 重新扫描整个解决方案;...原创 2021-01-05 10:44:20 · 323 阅读 · 0 评论 -
webrtc 中的buffer
C++ 关于 buffer 的管理,webrtc 进行了很好的封装:1:webrtc_clang\src\rtc_base\bit_buffer.h关于 bit 的封装;2: webrtc_clang\src\rtc_base\byte_buffer.hByteBufferWriterT: 负责添加字节,可以动态添加void WriteBytes(const char* val, size_t len)ByteBufferWriter:负责获取字节,获取后,自动计算内存大小;..原创 2020-12-09 15:20:13 · 567 阅读 · 0 评论 -
webrtc 音频采集参数的设置
webrtc音频采集参数:以windows为例:先看这个文件:D:\webrtc_clang\src\modules\audio_device\win\audio_device_core_win.cc// Capture initialization when the built-in AEC DirectX Media Object (DMO) is// used. Called from InitRecording(), most of which is skipped over.原创 2020-12-07 15:09:03 · 1310 阅读 · 0 评论 -
webrtc “cannot increment value-initialized deque iterator“
webrtc一个bug,直接修改:\src\rtc_base\thread.cc:void ThreadManager::RegisterSendAndCheckForCycles(Thread* source, Thread* target) { CritScope cs(&crit_); std::deque<Thread*> all_targets({ta...转载 2020-11-18 21:33:01 · 1177 阅读 · 0 评论 -
PCM 音频 AV_SAMPLE_FMT_S32 转 AV_SAMPLE_FMT_S16
以 pc 为例:设: 转换 的值为 X_short_sample;因为: n_int_sample / int_Max =X_short_sample / short_Max;所以:X_short_sample = ( n_int_sample *short_Max) / int_Max ;其它相关格式转换,原理应该一样;float 转换稍微麻烦,可...原创 2019-12-05 18:54:49 · 1168 阅读 · 0 评论 -
WebRTC::FEC
WebRTC::FEC目录WebRTC::FEC ULPFEC FLEXFEC Encode ulpfec Decode ulpfec 动态 FEC 冗余度 FlexFEC in WebRTC WebRTC::FECTags: WebRTC FECWebRTC中的 FEC 实现分为 UlpFEC 和 FlexFEC ulpfec:rfc 5109 ...转载 2019-11-28 18:10:40 · 814 阅读 · 0 评论 -
webrtc BWE 判断流程
这里主要说的是接收端的判断流程:// Send-side BWE. rtp 扩展 transport sequence number// Receive-side BWE. Rtp 扩展 abs-send-time1:PacketReceiver::DeliveryStatus Call::DeliverRtp(MediaType media_...原创 2019-11-18 19:06:55 · 1050 阅读 · 0 评论 -
webrtc 中 Rtcp NACK 接收处理流程
webrtc_m741:解析 rtcp ,如果是 NACK,那么解析;主要是解析相关的类型,和 获取相关参数; case rtcp::Rtpfb::kPacketType: switch (rtcp_block.fmt()) { case rtcp::Nack::kFeedbackMessageType:...原创 2019-11-15 18:11:15 · 1311 阅读 · 0 评论 -
WebRTC音视频同步
这两篇文章,可以直接去看;《WebRTC音视频同步机制实现分析》https://www.jianshu.com/p/3a4d24a71091《WebRTC音视频同步分析》https://blog.csdn.net/lincaig/article/details/81209895《RTCP(一): RR--Receiver Reports 接收者报告》htt...转载 2019-11-12 16:34:06 · 723 阅读 · 0 评论 -
webrtc 中的 rtp-hdrext
https://webrtc.org/experiments/rtp-hdrext/Home Experiments Rtp hdrextrtp-hdrextShow ContentsUnderneath this page, RTP header extensions are listed.abs-send-time abs-capture-time col...转载 2019-12-13 14:57:55 · 293 阅读 · 0 评论 -
单独编译使用WebRTC的音频处理模块 - android
单独编译使用WebRTC的音频处理模块 - android原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://billhoo.blog.51cto.com/2337751/1213801更新 【2014年5月14日】 昨天有幸在 Google 论坛里询问到 AECM 模块的延迟计算转载 2014-12-11 15:20:17 · 17653 阅读 · 5 评论 -
C++中的“信号和槽”机制,sigslot.h
用过Qt的,都知道,Qt中的事件是通过信号和槽进行传递的;在C++中,通过这个方式,可以简单实现模块的高内聚,低耦合;这里推荐的是一个sigslot.h的库文件,就一个h文件;在webrtc中用的到了这个信号和槽机制;关于webrtc中用到的“信号和槽”机制,和Qt中的概念差不多;webrtc中用的是开源的文件;sigslot.h ,http:/原创 2017-05-24 15:43:12 · 3082 阅读 · 0 评论 -
译:WebRTC视频通信浅析
译:WebRTC视频通信原文:http://www.html5rocks.com/en/tutorials/webrtc/infrastructure/WebRTC可以进行p2p之间的通信,但是仍需要服务支持. 1. signaling服务: 客户端之间交换元数据来建立通信. 2. 穿透NATs和防火墙.在本文中,我们想你展示如何构建一个signaling服务,如何用STUN/TURN服务转载 2017-07-14 17:31:03 · 1013 阅读 · 0 评论 -
H264 sps pps 解析
关于H264的结构解析,最基本的方法就是根据官方文档自己根据标准解析;或者从网上直接找到开源函数解析出结构体;这里介绍一个简单的方法:通过webrtc实现sps pps的解析;当前的webrtc版本是58;可以参考: h264_bitstream_parser_unittest.cc 文件,示例说明;主要解析实现:h264_bitstream_parse原创 2017-08-08 10:39:31 · 1051 阅读 · 0 评论 -
基于WebRTC技术的多人音视频解决方案
from: https://www.agora.io/cn/blog/%E5%9F%BA%E4%BA%8Ewebrtc%E6%8A%80%E6%9C%AF%E7%9A%84%E5%A4%9A%E4%BA%BA%E9%9F%B3%E8%A7%86%E9%A2%91%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/本文主要讨论如何使用WebRTC技术转载 2017-07-24 11:26:12 · 5899 阅读 · 0 评论 -
webrtc中的音频设备 音频采集 AudioDeviceModule
在webrtc58中,目前用音频模块是VoiceEngine;一般的创建流程是: VoiceEngine* m_voe ; VoEBase* base1 ; m_voe = VoiceEngine::Create();base1 = VoEBase::GetInterf...原创 2017-08-09 15:15:31 · 6176 阅读 · 0 评论 -
webrtc封装sdk 思路
webrtc封装sdk(一)思路本文原文地址:http://www.jianshu.com/p/2254aad0c98b最近在研究最新版本webrtc代码,打算将公司音视频sdk中的旧webrtc升级一下。升级到branch56(代码中已经出现56,但是release note中目前只到55)通过两个星期的研究,大概找到了思路。所以写了一个测试程序,只能做到简单的功能-转载 2017-08-21 17:29:56 · 6935 阅读 · 1 评论 -
webrtc中yuv
在webrtc中,YUV数据是通过libyuv这个开源库实现的; 可以自己直接用这个库;一:这里方法比较简单,这里示例一个YUV转rgb: webrtc::VideoFrame frame;rtc::scoped_refptr<webrtc::VideoFrameBuffer> buffer(frame.vide...原创 2017-09-06 11:06:16 · 2206 阅读 · 0 评论 -
webrtc视频采集
webrtc\src\webrtc\test 目录中的vcm_capturer.h 和 vcm_capturer.cc如果仅仅是采集视频,可以参考或直接用这个例子;一般仅仅是视频数据采集,Windows上直接用directshow就可以了;移动端用相关平台sdk接口就可以了;webrtc只是实现了上层接口的统一封装而已;原创 2017-07-27 18:54:33 · 2016 阅读 · 0 评论 -
webrtc中的音频采集,播放,record,Playout
webrtc中的采集播放,也是通过上次接口,统一封装,底层平台相关实现;一般关于音频设备,分为两部分:1:采集设备; 获取数据源音频;2:播放设备; 播放数据源音频;关于设备,一般的编程过程都是,枚举,验证,选择,设置;原创 2017-09-19 15:30:38 · 2012 阅读 · 0 评论 -
webrtc中的rtp解析
原创文章,禁止转载!否则追究!之前已经说明了webrtc中的rtp头的信息解析;这里讲解一下webrtc中的rtp解析,这里主要说明一下h264的解析;关于vp8和vp9,webrtc中都相关的类实现和相关test文件;关于h264的rtp文件解析,webrtc中主要实现了三种rtp的打包协议:enum H264Packetization原创 2017-09-26 16:20:50 · 2763 阅读 · 0 评论 -
webrtc中的位运算封装 BitBuffer
关于位运算,C++的书中讲的很多;1:一般可以通过&运算获取指定的位bit数据,也可以通过左移右移获取,但是有点麻烦;2:如果方便一点的话,可以自己封装一下:根据输入的获取的位的数量,自己提前封装;3:可以用std::std::bitset4:在webrtc中可以直接用: "webrtc/base/bitbuffer.h" rtc::BitBuffer原创 2017-09-18 16:33:33 · 640 阅读 · 0 评论 -
webrtc总的字符串类型转换
通常的字符串类型,UTF8,UTF16,ANSI,UNICODE;通常,C语言函数,C++的std::stirng方法,以及系统提供的函数都可以实现;我前面的文章也已经讲过;现在这里主要讲一下webrtc中的字符串转换函数:具体头文件:webrtc58\src\base\strings\utf_string_conversions.hnamespace base {原创 2017-09-28 14:49:28 · 476 阅读 · 0 评论 -
webrtc中的系统音视频设备监测
一般可以通过directx相关函数实现;或者自己写线程,不断枚举设备变化;这里简单介绍webrtc中关于设备变化监测的实现:// Class for monitoring various system-related subsystems// such as power management, network status, etc.// TODO(mbelsh原创 2017-09-28 15:19:50 · 1491 阅读 · 0 评论 -
webrtc中的h264解析
H264的码流解析,网上有很多开源文件;一般的解析有: 获取NALU,sps,pps,NALU type,slice type,获取Qp等;可以通过C++的位运算实现获取计算,但是一般可以定义结构体直接获取;这里要说的是webrtc中的H264解析相关:在webrtc中,关于H264的相关源码文件在:webrtc58\src\webrtc\common_video\h264中;都包含了很好的函数:...原创 2017-09-28 16:54:53 · 1813 阅读 · 0 评论 -
RTP Header解析
RTP的Header解析,比较简单;一般有几个比较简单的方法:写在前面:从rfc3550文档中可以找到rtp_header定义:不要用但是不要用这个文件,在Windows中,因为大小端的问题,Android端应该可以用,具体看资料;需要用从ortp或jrtplib中找到的定义;内容一样,但是顺序不一样,主要是大小端的问题;开源项目中应该也有注释;/** RTP da...原创 2017-08-21 19:11:54 · 2931 阅读 · 0 评论 -
webrtc中的rtp扩展 rtp-hdrext
在代码中,可以直接搜索:struct RTPHeaderExtension ; https://webrtc.org/experiments/rtp-hdrext/Home Experiments Rtp hdrextrtp-hdrextShow ContentsUnderneath this page, RTP header extensi...原创 2017-10-25 18:23:34 · 1282 阅读 · 0 评论 -
什么是FEC/NACK/RTX /RED
FEC(Forward Error Correction) 中文叫前向纠错 前向纠错技术(Forward Error Correction)在确保信号的长距可靠传输方面也起着非常重要的作用,逐渐成为必不可少的主流技术。这里借用光通讯的图来描述FEC的基本原理。图1 FEC在光通信中的位置 FEC技术是一种广泛应用于通信系统中的编码技术。以典型的分组码为例,其基本...转载 2017-08-08 16:22:01 · 6673 阅读 · 0 评论 -
webrtc58 中的音频采集
关于webrtc中的音频采集,当然和是各个平台采集具体实现,上层封装统一接口;从数据源来看,音频数据来自于class AudioDeviceModule;然后查看:virtual int32_t RegisterAudioCallback(AudioTransport* audioCallback) = 0;class AudioTransport {public:...原创 2017-11-06 15:17:00 · 1265 阅读 · 0 评论