自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 c++编译常见错误

webrtc\src\modules\rtp_rtcp\include\rtp_rtcp_defines.h(519): error C2059: 语法错误:“public”rc: 都是汉字comments,引起的类的定义错误。根本不是网上说的什么类头文件引用重复。就是汉字comments,引起的类没有编译成功。不允许汉字做comments. 各种编译错误。error C2504未定义基类。//记录 RTP 包的发送时间。

2022-11-17 23:21:11 552 1

转载 WebRTC架构分析-WebRTC 的线程模型

由于其功能多样性,注定了系统结构的复杂性,再加上音视频需要做很多编码前后的处理,算法非常复杂,逻辑结构也复杂。线程之间的通信要么是通过图中标出的 Packet 队列,要么是通过 WebRTC 的 MessageQueue 来实现的。之所以要分析线程模型,因为 WebRTC 明确规定了哪些模块在哪些线程下执行,在 Debug 版本中增加了很多检测,如果哪个模块没有在自己的线程下执行,会产生 abort 异常,程序自动退出。WebRTC 的线程模型相对复杂一些,哪些模块要在哪些线程下运行,都是有规定的。

2022-11-13 18:50:57 303

原创 云服务器环境搭建

111

2022-11-03 23:32:28 266

转载 极致流畅体验的密码:网易云信 QoS 策略介绍 | 体验共享技术专题

算法的改进通常不是一蹴而就的,需要通过实验室弱网模拟结合线上灰度观察关键指标来验证,采用数据驱动的方式,帮助打磨出最合适的拥塞控制策略和参数,根据过去一段时间统计的发送总码率与编码码率的比值,得到当前的带外系数样本值,经滤波平滑处理(取观察窗口内的均值)后,得到最终的带外系数,用它乘以编码最大推荐码率,作为新的带宽估计上限。,当网络出现拥塞时,传输延时呈现逐渐增加的趋势,所以 delay-based 算法能够及时检测网络处于拥塞状态,从而可以准确计算得到带宽估计值,并进行拥塞控制。

2022-10-10 15:18:41 247

原创 windows下运行QT程序

4 注意qt项目.vcxproj.user不能删除,它是第一次创建qt程序时候生成的.这里最主要的是QTDIR.移植到新server上,将对应的qtdir路径改成本机的qt dir。5 安装qt依赖dll: 打开qt cmd,执行windeployqt.exe。自动安装moc.exe, uic.exe,3 安装qt 插件,选择2中的qmake。1 安装vs2017。

2022-09-25 11:41:25 414

原创 UDP高并发

原设计的单端口:一个端口一个socket 接收。新设计的单端口:一个端口N个socket接收。

2022-09-25 11:19:09 375

原创 网络编程汇总

你可以把这个socket 看成是一个特殊的文件(好比登记表), 当有新的连接进来的时候, 都可以通过 accept 系统调用让操作系统接受一个新的连接, 同时返回一个新的socket, 这个socket 是绑定在(本机ip,本机port,对端ip,对端port) 这个上面的, 也就是对应了一个unique的连接.端口只是在操作系统中用来区分一个连接和另一个连接的其中一个项(剩下的还有本机ip,对端ip,和对端port), 因此和真正的通信并无太大关系, 你一定是把它想象成了和网卡的出口类似的东西.

2022-09-12 17:23:51 244

原创 virtualbox 部署ubuntu--janus

3 翻墙下载webrtc源码:classx。

2022-08-28 21:09:18 146

原创 libnice 源码分析

对应的janus 应用层,如何将不同的流区分还没完全想好。应该是在下面的函数中的某个参数绑定。libnice 接收数据&callback给janus。

2022-08-28 14:44:40 287

原创 将string转成16进制的数

没有转成,转成16进制格式的string。是每个char 减去0x30吗?

2022-08-28 13:44:03 1

原创 UDP网络通信

注意事项:htons(htonl),大小端转换。尤其port,len容易改错,因为大小端都是65535之内,需要抓包看下。to do--如果发送65535,接收1024,需要如何循环接收?此前发送1500,使用1024会造成解析错误。与tcp相比,udp client 不需要connect。server不需要accept。双方的peer断网,如何处理?......

2022-08-28 13:13:42 154

原创 c语言解析协议常用套路

协议定义username,len,value;2个switch,case解析.读取value。

2022-08-28 12:49:56 600

转载 动态库、可执行文件符号表分析&编译问题

000000000000067a T func1 ===================实现函数===================0000000000000681 T func2 ===================实现函数===================0000000000000696 T func4 ===================实现函数===================从而观察对比不同的函数、变量在符号表中的异同。...

2022-08-23 16:47:47 835

原创 webrtc 编译

webrtc 编译

2022-08-07 22:50:46 126

转载 VOIP使用单端口替换动态端口池进行UDP通信

做过VOIP的同学都知道,基于UDP实现RTP包收发时需要进行SDP协商或者ICE协商,通常服务器都是用一个端口池来和客户端进行RTP包的转发,而当前的网络环境下,开放端口池给运维带来了维护的风险,也给部分代理场景下带来了实现的复杂度,所以如果使用一个端口用来做媒体数据包的转发,那带来了极大的便利;这种单端口的实现受限于操作系统内核句柄和客户端的分发实现,可能存在数据混乱的情况,只能作为一个思路而已,更好的单端口实现还是需要在协议报文中识别是不同的用户,然后分发给不同的组或者目标;...

2022-08-07 13:59:30 266

转载 10、SRS4.0源代码分析之WebRTC推流端处理

根据上一节的介绍,推流客户端通过API接口完成SDP交换,再从服务器的SDP信息中,获取服务器的IP地址+端口号,并按照WebRTC协议的要求,向服务器端口依次发送各种协议报文,完成客户端与服务器的连接建立、安全认证和RTP报文加密传输。最终SrsRtcSource::on_timer()超时函数以100毫秒的周期被执行,以默认6秒为周期调用一次publish_stream_->request_keyframe()函数,插入plis_队列,并触发条件变量。DTLS和TLS内部已经包含了这两种加密方式。...

2022-08-05 15:31:09 789

原创 Mac m1 安装janus

将/usr/local 改成/opt/homebrew。

2022-08-04 23:14:12 256 2

转载 Ubuntu下搭建Janus Server

下载源码https//github.com/warmcat/libwebsockets/tags,这里下载3.2.2。下载源码https//github.com/meetecho/janus-gateway这里下载0.11.5版本。cert=/etc/nginx/cert/app.pem//测试安装,用上面生成的证书。下载源码https//github.com/cisco/libsrtp/releases/tag/v2.2.0。但建立连接时会比较慢。......

2022-07-27 15:26:46 595

转载 absl教程(四):Strings Library

该库提供了用于操作和比较字符串、将其他类型(例如整数)转换为字符串或为其他用途评估字符串的类和实用程序函数。此外,该strings库还包含用于将数据存储在连续内存中的“类字符串”类的实用程序函数。本文档概述了strings库的亮点和一般用例。有关特定类、函数和字段的更多详细信息,请参阅特定头文件中的源文档。尽管“字符串”通常被认为是C++中的标准类型,但它们并不是内置类型,而是通过类在标准库中提供。从根本上说,一个字符串由一个大小和一个char字符数组组成。...

2022-07-23 11:45:43 898

原创 c++ SharedPtr 智能指针

此时假设第2步出现异常,则在第一步申请的内存将没处释放了,上面产生内存泄露的本质是当申请数据指针后,没有马上传给stdshared_ptr,因此一个可能的解决办法。因为make_shared只申请一次内存,因此控制块和数据块在一起,只有当控制块中不再使用时,内存才会释放,但是weak_ptr却使得控制块一直在使用。调用shared_from_this函数的时候,就能够通过weak_ptr构造出对应的shared_ptr。计数为0,控制块不在使用,内存释放。...

2022-07-23 11:41:23 332

原创 docker 常用命令

在http//x.x.x.x8080/jenkins/job/mediasoup-1.0/build?在vm上dockerpullai-live-harbor.zkjin.local5000/zrtc/nametagname下来。dockerimages查看dockerimagename;dockerexec-itdockeridbash进入docker。dockerps-a查看dockername;dockerimages=安装包。控制台查看error。......

2022-07-23 11:10:19 207

转载 C++11 Lambda表达式

c++11 lambda

2022-07-14 19:29:00 154

原创 janus视频房间插件协议交互整理

janus 流程图

2022-07-06 15:17:53 368

转载 WebSocketpp

WebSocket是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得 CS 之间的数据交换变得更加简单,允许 S 主动向 C 推送数据。WebSocket 和 HTTP 一样都是应用层的一种协议,可以使用各种编程语言实现之。WebSocketpp 是一个仅仅由头文件构成的 C++库,它实现了 WebSocket 协议(rfc 6455),可以在项目中方便简洁地实现客户端和服务器。WebSocketpp 底层使用了 C++ 的 iostream 库和基于 Boo

2022-06-17 13:08:52 2063

原创 Janus feature草稿

Janus mq 可以接收 nginx mq调度janus rabbit 可以接收 java层 认证ice 重连问题:ice断了。 信令层重协商,sdp 有一项标记重协商的sdp. ice重连。好在janus层不受影响,在重协商sdp之后,认为你是重新入会,不是新入会。还给你以前的sessionID,roomid和role...

2022-06-08 09:24:54 188 1

转载 Linux 下开发基于 webrtc 的实时音视频 SDK本文

在 Linux 平台下开发实时通话 SDK 其实是主要应用于未来的 IOT 行业,先基于 Ubuntu 作为开发平台,完成后再基于每个客户提供的其交叉编译 工具 链进行交叉编译以供用户使用。如果是自己下载编译的话,可以参考官方教程,或者参考本人之前的一篇博客: https://www.jianshu.com/p/09f065f3feb0https://www.jianshu.com/p/09f065f3feb0 ,其实 Ubuntu 下编译 webrtc 是比较简单的,只要可以翻墙,其它都只是时间问题了。那

2022-06-04 16:50:19 801 1

原创 linux webrtc 环境搭建常见问题

1 下载代码,需要翻墙或者ftp上去2 编译就是webrtc使用libc++. 二次开发的clang,g++使用libstd++,造成找不到调用函数under define XXX3 debug: 编译的时候release版本造成只能找到符号表,找不到源码。改成debug版本。二次开始debug libwebrtc.a也是可以进入源码的,.........

2022-06-03 22:58:33 315

原创 CMake 介绍和实例分析

gcc 是命令行实现,makefile是将gcc 文件化gcc 找调用静态和动态库静态库:外部调用静态库,-L指定路径即可,这样就可以找到静态lib.-I 是头文件. 后面是依赖库,这些依赖库要放到最后,放前面编译不通过.g++ -o 1 main.cpp -I/home/zf/src -I/home/src/third_party/abseil-cpp -L/home/src libwebrtc.a -ldl -lpthread `pkg-config --cflags --libs glib-2.0`

2022-06-02 14:35:26

原创 freeswtich 草稿杂

一、基本概念(1)Sofia-sip:FreeSwitch使用了比较成熟的开源的SIP协议栈。(2)EndPoint:互联协议接口模块。如SIP、H232.(3)mod_Sofia:实现了SIP中的注册服务器、重定向服务器、媒体服务器等各种功能。他的定位是一个B2BUA,不能实现代理服务器。(4)SIP profile:在mod_sofia中,SIPprofile相当于SIPUA,通过不同的配置参数配置一个UA的行为.每个SIP profile可以监听不同的IP地址和端口。(5)GetWay:一个

2022-05-13 18:02:11 233

原创 x264材料搜集

x264使用:https://blog.csdn.net/weixin_45736829/article/details/108399051x264 encode函数源码1.x264是编码器,将原始数据(例如YUV420P)编码成h.264标准的原始视频流(ES流)2.FFmpeg为多媒体库,里面有音频、视频的解析、解码、编码以及其他功能的大量API可以给你使用。FFmpeg可以调用x264编码,也可以通过其他编码器编码(例如nvenc英伟达显卡编码器)ffmpeg:https://zhuanlan.

2022-05-08 15:13:14 520

原创 Webrtc源码分析:PeerConnection 草稿

2022-05-06 15:00:53 226

原创 Janus-webrtc端口复用和rtp流单端口的设计和实现草稿

什么是单端口为什么使用单端口:如何实现单端口:单端口结构:Janus使用了Libnice库作为底层网络传输库,该库本身是多端口的实现,因此要在Janus基础上实现单端口存在两种方案:1) 直接替换掉Libnice库,重新构建底层,改为单端口的传输方式。但是由于Janus和Libnice库的耦合非常紧密,若要使用重新构建底层的方式,实现较为复杂的,难度很大;2) 保留Libnice多端口的实现,在Janus上增加单端口代理的功能。代理的功能是指将单一的对外端口传输的客户端的数据,在接..

2022-05-01 10:05:48 1167

转载 最简单的基于DirectShow的示例:视频播放器自定义版

=====================================================最简单的基于DirectShow的示例文章列表:最简单的基于DirectShow的示例:视频播放器最简单的基于DirectShow的示例:视频播放器图形界面版最简单的基于DirectShow的示例:视频播放器自定义版最简单的基于DirectShow的示例:获取Filter信息=====================================================

2022-04-20 11:32:29 412

原创 Webrtc 发送和接收草稿

WebRTC线程关系和数据流WebRTC对外提供两个线程:Signal和Worker,前者负责信令数据的处理和传输,后者负责媒体数据的处理和传输。图1 WebRTC线程关系和数据管线发送端:Capture线程从摄像头采集原始数据,得到VideoFrame;接下来原始数据VideoFrame从Capture线程到达Worker线程,Worker线程起搬运工的作用,没有对数据做特别处理,而是转发到Encoder线程。Encoder线程调用具体的编码器(如VP8, H264)对原始数据Vide..

2022-04-13 09:11:38 167

原创 Webrtc nack

Nack 协议头Nack: webrtc 10ms发送一次?Nack重传分成两种类型的包,不仅仅是重传rtp 报文PID(Packet identifier),即为丢失的 RTP 数据包的序列号BLP(Bitmao of Lost Packets),通过掩码的方式指出了接下来 16 个数据包的丢失情况Packet identifier(PID)即为丢失RTP数据包的序列号,Bitmap of Lost Packets(BLP)指示从PID开始接下来16个RTP数据包的丢失情况..

2022-04-11 11:45:23 236

原创 Janus-freeswitch mcu合流(client)

2个scenario:分成两个流程图1 run_sip 用于sip fs注册,接收sip sdp2 janus_ice_process_incoming_rtp_packet用于发给fs的一路流。run_sip_rtp用于接收合流的图片,然后发给listenersscenario1: sip1) 注册sip2) 接收sip:即接收sdpscenario2: 流媒体1) 将janus流转给fs2) fs合流发回给janus,janus转给listeners...

2022-04-08 14:15:57 664

转载 Android OpenGL ES - 纹理

纹理基本概念纹理是一个2D图片(甚至也有1D和3D的纹理)纹理坐标为了能够把纹理映射(Map)到三角形上,我们需要指定三角形的每个顶点各自对应纹理的哪个部分.这样每个顶点就会关联着一个纹理坐标(Texture Coordinate),用来标明该从纹理图像的哪个部分采样(译注:采集片段颜色)。之后在图形的其它片段上进行片段插值(Fragment Interpolation)。纹理坐标在x和y轴上,范围为0到1之间(注意我们使用的是2D纹理图像)。使用纹理坐标获取纹理颜色叫做采样(Samplin

2022-04-06 16:30:44 648 1

转载 Opengl基础

Opengl定义:OpenGL 着色语言(OpenGL Shading Language)是用来在OpenGL中着色编程的语言,也即开发人员写的短小的自定义程序, 它们在图形卡的GPU (Graphic Processor Unit图形处理单元)上执行的,代替了固定的渲染管线的一部分,使渲染管线中不同层次具有可编程型。比如:视图转换、投影转换等。GLSL(GL Shading Language)的着色器代码分成2个部分:Vertex Shader(顶点着色器)和Fragment(片断着色器),有时.

2022-04-06 15:43:00 504

原创 GPUimage实现filter和源码分析

1 GPUimage 使用2 GPUimage 源码GPUimagefilter,GPUimagegroupGPUimageFilter.java, GPUimageFilterNative.java.gpu_image_filter.ccOpengGL的API和着色器工作流程:1,通过OpenGL客户端的API(就是我们编写的代码)把各种顶点数据传到内存/GPU显存;2、顶点着色器经过原始程序集之后,分配到对应的顶点数据;3、光栅化,即正方体经过MVP矩阵映射到屏幕上之后,变.

2022-04-02 22:16:08 658

转载 如何理解深度学习中的卷积? 从卷积到滤镜到深度学习

有太多的公开课、教程在反复传颂卷积神经网络的好,却都没有讲什么是“卷积”,似乎默认所有读者都有相关基础。这篇外文既友好又深入,所以翻译了过来。文章高级部分通过流体力学量子力学等解释卷积的做法在我看来有点激进,这些领域恐怕比卷积更深奥,所以只需简略看看即可。卷积现在可能是深度学习中最重要的概念。正是靠着卷积和卷积神经网络,深度学习才超越了几乎其他所有的机器学习手段。但卷积为什么如此强大?它的原理是什么?在这篇博客中我将讲解卷积及相关概念,帮助你彻底地理解它。网络上已经有不少博客讲解卷积和深度学习中的卷

2022-03-27 22:48:36 188

socket 连接http 服务器

4种方法实现socket数据转发,socket 连接http 服务器. 内有socket,select,poll,多线程等的详细实例

2020-09-19

空空如也

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

TA关注的人

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