自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 资源 (1)
  • 收藏
  • 关注

原创 libuv 基本概念

libuv是一个跨平台库,是围绕着事件驱动的异步I/O模型来设计的。本库不止提供了对不同I/O polling机制的抽象,handles和streams机制也提供了一个更高层的对于sockets和其他实体的抽象。本库还提供了跨平台的文件I/O操作及线程功能。最底层的socket相关操作有epoll/kqueue和event ports,这些事基于unix like系统的,在这些系统特定的API之上抽象出了一层uv_io_t结构用于提供统一的unix-like平台上的...

2021-12-03 10:58:38 386

原创 libuv 的Processes

libuv提供了相当多的子进程管理函数,并且是跨平台的,还允许使用stream,或者说pipe完成进程间通信。在UNIX中有一个共识,就是进程只做一件事,并把它做好。因此,进程通常通过创建子进程来完成不同的任务(例如,在shell中使用pipe)。 一个多进程的,通过消息通信的模型,总比多线程的,共享内存的模型要容易理解得多。当前一个比较常见的反对事件驱动编程的原因在于,其不能很好地利用现代多核计算机的优势。一个多线程的程序,内核可以将线程调度到不同的...

2021-12-02 18:00:52 306

原创 libuv 基础

libuv强制使用异步和事件驱动的编程风格。它的核心工作是提供一个event-loop,还有基于I/O和其它事件通知的回调函数。libuv还提供了一些核心工具,例如定时器,非阻塞的网络支持,异步文件系统访问,子进程等。Event loops在事件驱动编程中,程序会关注每一个事件,并且对每一个事件的发生做出反应。libuv会负责将来自操作系统的事件收集起来,或者监视其他来源的事件。这样,用户就可以注册回调函数,回调函数会在事件发生的时候被调用。event...

2021-12-02 17:06:29 734

原创 uwebsoket的编译

1)添加OpenSSL libuv 的头文件依赖性 ,下载openssl的版本(win64 openssl v1.1.1l)。2)添加库的依赖项目3)输入为libuv.lib psapi.lib userenv.lib iphlpapi.lib capi.lib dasync.lib li apps.lib libcrypto.liblibcrypto_static.lib libssl.lib libssl_static.lib libtestutil.lib..

2021-11-29 11:47:48 251

原创 webrtc 协议博客参考

WebRTC 1.0: Real-Time Communication Between Browsers

2021-11-27 11:17:43 159

原创 webrtc 中的scoped_refptr

C++中在堆中申请的内存都需要程序员自己手动删除,这是C++容易造成内存泄漏的根本原因。使用过Java的朋友都清楚,Java有完善的内存回收机制,无需程序员调用释放内存的操作。C++里是否能够实现类似Java的自动回收内存的机制呢?答案是肯定的,而Webrtc中的scoped_refptr就是实现类似的功能。首先我们从这个类的名字入手去理解它的含义。名字由三个单词组成,分别为scope,ref,ptr。先看ptr,C++程序员都知道这是pointer指针的意思,但是类名中包含指针的语...

2021-11-27 10:43:30 228

原创 c++ 11 lambda表达式

lambda表达式的语法形式:[ capture ] ( params ) opt -> ret { body; };[capture](parameters) mutable ->return-type{statement}其中carpture是捕获列表,params是参数,opt是选项,ret则是返回值的类型,body则是函数的具体实现。1.捕获列表描述了lambda表达式可以访问上下文中的哪些变量。[] :表示不捕获任何变量[=]:表...

2021-11-26 14:00:31 388

原创 VS 全部注释和取消注释

注释: 先CTRL+K,然后CTRL+C取消注释: 先CTRL+K,然后CTRL+U

2021-11-20 15:16:55 1628

原创 zlib 库的编译

1)用管理员方式打开zlib 目录,执行bld_ml64.bat2) 执行如下命令生成库nmake -f win64/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF -I." OBJA="inffasx64.obj gvmat64.obj inffas8664.obj"zlib1.2.11的VS2019动态库静态库命令行编译_心飞的博客-CSDN博客记 windows命令行编译64位zlib - 知乎VS编译 x64版本zlib库 - 乌合之众 - .

2021-11-20 09:45:34 173

原创 zlib 的编译

1)用管理员方式打开zlib 目录,执行bld_ml64.bat2) 执行如下命令生成库nmake -f win64/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF -I." OBJA="inffasx64.obj gvmat64.obj inffas8664.obj"zlib1.2.11的VS2019动态库静态库命令行编译_心飞的博客-CSDN博客记 windows命令行编译64位zlib - 知乎VS编译 x64版本zlib库 - 乌...

2021-11-20 09:30:10 233

原创 Openssl 版本编译

一、准备1、安装 perlhttp://strawberryperl.com/download/5.28.1.1/strawberry-perl-5.28.1.1-64bit.msi2、下载 openssl 1.0.2uhttps://www.openssl.org/source/old/1.0.2/openssl-1.0.2u.tar.gz二、编译1、打开 vs2019 命令行工具切记:不要使用 x86 和 x64 的交叉命令行工具,要编译 x86 版本的 openssl,

2021-11-20 08:52:31 328

原创 c资料共享

GitHub - jobbole/awesome-cpp-cn: C++ 资源大全中文版,标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。由「开源前哨」和「CPP开发者」微信公号团队维护更新。

2021-11-18 15:26:29 450

原创 windows VS2017 编译最新的libuv 库

下载libuv:https://github.com/libuv/libuv(注意下载 libuv-1.35.0.tar.gz 版本,含有vcbuild.bat 文件,往后的版本没有) 下载gyp(https://github.com/turbulenz/gyp)解压后放在libuv/build下 gyp安装需要python环境,下载Python2.x(https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi)安...

2021-11-15 15:39:43 685

原创 epoll 的边缘触发与水平触发

水平触发对于读操作:只要缓冲内容不为空,LT模式返回读就绪。 对于写操作:只要缓冲区还不满,LT模式会返回写就绪。#include #include #include int main(){ int epfd, nfds; char buf[256]; struct epoll_event event, events[5]; epfd = epoll_create(1); event.data.fd = STDIN_FILENO;

2021-11-14 21:58:28 307

原创 webrtc 交互过程

图一: ICE建立连接的过程 用户A 向用户B发起WEBRTC呼叫时,A首先创建自己的会话描述信息(SDP),之后通过信令服务器发送给B。同时B同样创建自己的会话信息,应答发给A。这个过程由ICE控制。现在A和B都拥有了自己的会话描述信息,接下来就可以传输媒体数据了。...

2021-11-12 11:09:57 564

原创 c++11 新特性

1) C++11标准更好地管理和使用动态内存,防止内存泄漏和悬垂指针,定义了两个智能指针类型,分别是shared_ptr和unique_ptr。shared_ptr可以让多个智能指针指向同一个对象,而unique_ptr只容许一个指针独自指向一个对象。Shared_ptr是用于管理动态内存的指针,它拥有垃圾回收机制。可与其他对象共享管理,这种指针具有取得指针所有权并共享该所有权的能力。当最后一个指针释放所有权时,也就是引用计数为0时,指针的所有者将删除该指针。Shared_...

2021-11-12 10:31:18 728

原创 webrtc 二次开发参考

webrtc demo编译笔记 - 尚码园webrtc 编译 · 音视频/C++/k8s/Docker等等 学习笔记 · 看云

2021-11-07 17:12:22 689

原创 windows 提取webrtc的所有头文件

windows下:进入webrtc目录(即src上级目录) ,写上此脚本echo off :: 定义源目录set sourcePath=.\src::定义目标路径set resulePath=.\include xcopy %sourcePath%\*.h %resulePath%\ /s /e /c /y /h /r pause此方式还会保留之前的目录结构linux下:注:脚本应当在WebRTC的webrtc目录的上一级目录运行 这样才能对应头文件中的相对路...

2021-11-07 14:14:29 473

原创 webrtc Windows 程序处理流程

wndows程序程序是由消息驱动的,它的核心是注册窗口类API RegisterClass 中指定的 WinProc 函数。WinProc是Windows消息处理中心,所有的消息都要交由它来处理。然后对一个最简单的 Windows程序做了剖析,通过 6 大步可以创建出一个最简单的 Windows程序。 1)设置入口点,WinMain。 2)创建 WinProc 函数。 3)注册窗口类。 4)创建窗口。 5)显示窗口。...

2021-11-03 08:53:07 125

原创 webrtc 视频数据流程概览

视频数据由VideoCapture 采集后交给VideoSource,VideoSource 通过VideoBroadcaster成员,把数据发送给每个VideoSink(VideoEncoder和LoacalPreview)。VideoEncoder把视频数据编码之后交给网络层进行发送,LoacalPreview把视频数据渲染到屏幕上。 从网络层收到视频数据后,先交给VideoEncoderLoacalPreview进行解码,解码之后交给VideoBroadcaster...

2021-11-01 16:07:39 760

原创 webrtc 的线程模型

webrtc 的PC Factory 拥有3个线程: 1)signaling_thread_ :所有PCFactory 和PC 的对外接口,都会切换到signaling_thread_ 执行,而PC Observer 所有的回调函数也都在signaling_thread_ 执行。2) network_thread_:和网络有关的操作都在 network_thread_执行,比如收发数据包、绑定网络端口等。3) w...

2021-10-30 17:48:47 393

原创 Webrtc Windows 端初始化

1)peerconnection_client 的 main.cc文件:2)PC factory 的代码在 examples/peerconnection/client/conductor.cc中的Conductor::InitializePeerConnection 函数中,这个函数会在Demo 中首页peer 列表元素被双击或收到其他的peer的呼叫信息后被调用。3)windows 端创建PC....

2021-10-29 17:48:56 284

原创 windows下VS2019编译webrtc

1、阿里云上购买一台windows 云主机服务器。获取webrtc 源码1、下载源码git clone https://chromium.googlesource.com/chromium/tools/depot_tools.gitmkdir webrtc_checkoutfetch --nohooks webrtcexport PATH=$PATH:/c/Users/Administrator/Desktop/webrtc/depot_tools2、同步源码:set DEPOT_T

2021-10-27 10:55:26 433

原创 Linux 下的操作命令:

1、在命令模式下清除Vi/Vim中的所有行或文本:1,$d

2021-10-20 17:12:37 48

原创 webrtc Native 开发实践

参考地址:源码地址:​​https://github.com/hackwebrtc/webrtcWEBRTC Native App 使用最多的SDK就是Google WebRTC,现在也有一些其他的开源版本:源码地址:​​https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c纯Go 语言实现的:GitHub - pion/webrtc: Pure Go implementation of the WebR.

2021-10-14 10:45:18 540

原创 拥塞控制和带宽策略

estimator设计了⼀套基于延迟和丢包反馈的拥塞机制(Google Congestion Control,简称GCC)和带宽调节策略来保证延迟、质量和⽹路速度之间平衡。图 1 拥塞控制循环示意图estimator(评估者)通过RTCP的feedback反馈过来的包到达延迟增量和丢包率信息计算出⽹络拥塞状态并评估出适合当前⽹络传输的码率,根据这个码率改变视频编码器码率,然后改变pacer的码率。 pacer(定速器)会根据这个码率改变pacer的⽹络发送速度和padding⽐例,并⽤新的⽹

2021-10-14 08:55:23 669

原创 webrtc 的名词

RTC Real-Time Communication实时通信 SDP Session Description Protocol 会话描述协议 ICE Interactive Connectivity Establishment 交互式连接建⽴ JSEP JavaScript Session Establishment Protocol js会话建⽴协议...

2021-10-14 08:30:12 88

原创 Docker 的安装使用

Release 1.25.0-rc4 · docker/compose · GitHub

2021-10-09 10:18:49 44

原创 Spring Boot starter 和 YAML

springboot 项目创建 请参考:springboot 项目创建_abc1231987的专栏-CSDN博客Spring Boot 的特点Spring Boot 具有以下特点:1. 独立运行的 Spring 项目Spring Boot 可以以 jar 包的形式独立运行,Spring Boot 项目只需通过命令“java–jar xx.jar” 即可运行。2. 内嵌 Servlet 容器Spring Boot 使用嵌入式的 Servlet 容器(例如 Tomcat、Jetty ..

2021-10-07 09:46:32 289 1

原创 音视频同步

1)正常可以接受的范围:-100ms 到 100ms ,严格要求 -50ms 到100ms。音视频同步的方式: *)以音频为基准 *)以视频为基准 *)以外部时钟为基准主流以音频为基准,

2021-09-26 17:50:14 87

原创 Webrtc 连接管理

webrtc 对实时传输和编解码技术进行了封装及优化,在浏览器中内置对RTP的支持。优化的内容具体包括如下几项: *)丢包隐藏 *)回声消除 *)带宽自适应 *)动态抖动缓冲 *)自动增益控制 *)降噪抑制 *)画质优化 Webrtc 的建立连接的过程: ICE 建立...

2021-09-26 17:13:10 67

原创 webrtc 传输技术

Webrtc 基础传输技术架构: 媒体流的传输到对等端,涉及到媒体信息协商、网络建连协商、网络传输技术。 RTP(Real-time Transport Protocol)通过IP网络实时传输音频和视频。遵循RFC3550。 大多数RTP应用都是基于UDP构建的,并额外提供抖动补偿,包丢失检测和无序传递检测功能。RTP也支持TCP,但应用的少,因为TCP更注重可靠性而不是实时性。 RTP主要特点: ...

2021-09-26 10:50:48 1037

原创 本地媒体111

1.1 媒体流 媒体使用Mediastream 接口来管理,通常获取媒体流的方式有如下几种:*)从摄像头或者话筒获取对象流*)从屏幕共享获取流对象*)从 canvas(HTMLCavasElment)内容中获取流对象*)从媒体元素(HTMLMediaElment)中获取流对象MediaStream 的定义: interface Mediastream:EventTarget { constructor(); con...

2021-09-26 09:16:10 349

原创 Centos7 安装python3

安装依赖:yum install libffi-developenssl-devel -y在更新python3的时候会自动安装pip3,但是安装完成后,pip -V发现出错:command not found,找了好久,发现在建立软连接的时候路径写错了。总结一下安装python3和发现pip:command not found 之后的思路。centOS安装python3参考链接准备编译环境yum groupinstall 'Development Tools'yum install..

2021-09-09 14:59:47 116

原创 2021-08-28

如果网络是理想的,即无丢包、无抖动、低延时,那么接收到一帧完整数据就直接播放,效果一定会非常好。但是实际的网络往往很复杂,尤其是无线网络。如果还是这样直接播放,网络稍微变差,视频就会卡顿,出现马赛克等异常情况。所以,在接收端对接收的数据做一个缓冲是很有必要的。缓冲一定是以延时作为代价的,延时越大,对抖动的过滤效果越好。一个优秀的视频jitterbuffer,不仅要能够对丢包、乱序、延时到达等异常情况进行处理,而且还要能够让视频平稳的播放,尽可能的避免出现明显的加速播放和缓...

2021-08-28 11:23:30 74

原创 2021-08-22

客户端服务端交互过程服务端函数:

2021-08-22 17:42:58 62

原创 2021-08-11

1、与NACK对应的是ACK,ACK是到达通知技术。以TCP为例,他可靠因为接收方在收到数据后会给发送方返回一个“已收到数据”的消息(ACK),告诉发送方“我已经收到了”,确保消息的可靠。2、NACK也是一种通知技术,只是触发通知的条件刚好的ACK相反,在未收到消息时,通知发送方“我未收到消息”,即通知未达。在rfc4585协议中定义可重传未到达数据的类型有二种:RTP:Real-time Transport Protocol:实时传输协议1)RTPFB(Transport layer f.

2021-08-11 13:39:52 177

原创 licode 中用到的webrtc 部分

由于webrtc工程代码本身非常庞大,编译工具也很独特,Licode并未全部引入,仅仅抽取了webrtc的部分代码,如下图所示:https://tools.ietf.org/pdf/rfc4585.pdfRTP/AVPF 传输层反馈;https://tools.ietf.org/pdf/rfc4588.pdf4585补充 重传包格式;https://tools.ietf.org/pdf/rfc4588.pdf4585补充 负载层反馈;https://tools.ietf.org...

2021-08-09 13:55:43 211

原创 WebRTC API :

概述:媒体捕获设备包括摄像机和麦克风,还包括屏幕捕获“设备”。对于相机和麦克风,我们使用navigator.mediaDevices.getUserMedia()捕获MediaStreams。对于屏幕录制,我们改用navigator.mediaDevices.getDisplayMedia()。const constraints = { 'video': true, 'audio': true}navigator.mediaDevices.getUserMedia(cons...

2021-07-14 10:51:13 278

原创 WebRTC通信模型的对比:

https://developer.mozilla.org/zh-CN/docs/Web/API/WebRTC_APIhttps://webrtc.org/getting-started/data-channels

2021-07-13 17:49:27 630

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除