自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lcalqf的专栏

努力奋斗、从容应对

  • 博客(306)
  • 资源 (17)
  • 收藏
  • 关注

原创 webrtc视频处理流程图

视频编码、入pacer队列

2024-03-08 22:26:08 86

原创 srs集群下行edge处理逻辑

2024-02-21 20:19:51 629

原创 srs 边缘集群

本篇分析一下边缘集群中上行边缘节点的处理逻辑。关于上行的边缘节点:SRS对于上行边缘,采取直接代理方式,并没有采取边缘缓存方式。所谓边缘缓存方式,即推流到边缘时边缘也会当作源站直接缓存(作为源站),然后转发给源站。边缘缓存方式看起来先进,这个边缘节点不必回源,实际上加大了集群的逻辑难度, 不如直接作为代理方式简单。

2024-02-19 15:54:33 290

原创 srs rtmp转flv

srs实现rtmp转flv

2024-02-05 16:26:58 211

原创 webrtc 的TaskQueue() 任务队列

webrtc 任务队列 TaskQueue

2023-07-31 17:51:53 724 1

原创 webrtc的线程模型

webrtc线程模块的实现逻辑在 rtc_base\thread.h 文件中下面看下线程的具体实现引入了一个新的对象 ThreadManager线程的Start()函数才是真正创建线程的地方,只看android(即linux)端。具体的实现是用的pthread,而没有用标准的std::thread。

2023-07-31 16:29:00 676

原创 webrtc jitterbuffer 模块分析

介绍webrtc 的jitterbuffer

2022-07-10 17:53:56 720 3

原创 音频弱网优化Red

目录1、音频弱网优化的主要方法2、red 包格式3、audio red 封装逻辑4、audio red 的解析1、音频弱网优化的主要方法业界常用的音频抗丢包算法和相互对比,本文主要介绍的 red 方式2、red 包格式音频 red的协议见 :RFC 2198 - RTP Payload for Redundant Audio Data具体的格式如下 0 1 2 .

2022-05-04 18:37:57 836

原创 linux c 获得当前时间精确到毫秒

#include <sys/time.h>#include <stdio.h>#include <unistd.h>#include<iostream>using namespace std;static string GetLocalTimeWithMs(void){ struct timeval curTime; gettimeofday(&curTime, NULL); int milli = curTime.

2022-03-11 14:50:42 2137

原创 vscode Run coder 支持c++11

首先找到安装的Code Runner 插件,点击右下角小齿轮,打开扩展编辑打开 在setting.json中编辑在setting.json的最后 自己添加如下新的配置 "code-runner.runInTerminal": true, "C_Cpp.default.cppStandard": "c++11", "code-runner.executorMap": { "cpp": "cd $dir &..

2022-01-10 16:59:23 667

原创 mediasoup 源码分析(二十八)rtx 重传包

文章目录rtx 协议格式字段细节上行rtx处理下行rtx处理rtx 主要用来进行封装重传包rtx 协议格式The format of a retransmission packet is shown below: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-

2021-08-24 18:20:51 738 2

原创 mediasoup 源码分析 (二十七)simulcast

原理介绍simulcast :字面意思是多播,在webrtc中指大小流。推流的客户端同时发生多路不同分辨率、帧率的视频到服务器,服务器根据下行用户网络情况,选择一路合适流进行转发。它的主要应用场景:一次视频会议时不同参会人员的网络带宽不一样,不能仅仅因为一个人的网络不好就降低分辨率,因为那样网络好的人体验效果也变差了。所以应该探测出谁的网络不好,只给他降码率、帧率就行了。如下图所示:pc客户端上行推送了1080p、720p、360p三路流,服务器在转发时给手机端下发了360p,给网络状...

2021-08-15 17:29:37 1069

原创 REMB 拥塞控制

REMB 协议介绍REMB (Receiver Estimated Maximum Bitrate) 接收端最大码率估计。REMB一直是一个草案,并没有定义到标准rfc文档中,虽然主流的webrtc开源服务器,如:mediasoup、licode都支持REMB方式进行拥塞控制,但是会逐步放弃支持,未来会在发送到进行码率估计,即通过transport-cc的方式。由于目前很多服务器还支持REMB方式,所以本篇文章打算介绍一下实现过程。协议格式文档:https://datatracker.ie

2021-05-19 18:43:46 1273

原创 解析RTCP组合包

目录RTCP 组合包介绍服务端解析组合包RTCP 组合包介绍在实际应用中RTCP包如:SR、RR包等可以做为一个单独包进行发送,也可以和其他包组合一起发送。当多个RTC包组合发送时,服务端需要拆分组合包得到单个包,然后再进行处理。如下图:RR包和Feedback反馈包组合一起发送。服务端解析组合包先看下RTCP 协议,以RR包为例:(mediasoup中解析rtcp逻辑见packet.cpp)RTCP包前四个字节都是一样的固定头,对应mediasoup..

2021-05-12 10:47:26 492 1

原创 srs4.0 webrtc分析(五)网络模块

网络模块介绍webrtc 中音视频数据是通过udp传输,所以srs4.0要支持webrtc得开启一个udp server进行收发流。具体代码见文件:srs_app_rtc_server.cpp监听逻辑srs_error_t SrsRtcServer::listen_udp(){ //首先获得监听的IP、PORT int port = _srs_config->get_rtc_server_listen(); string ip = srs_any_address_fo

2021-03-12 20:48:31 1744 1

原创 srs4.0 webrtc分析(四)推流、播放类逻辑分析

介绍分析SrsRtcPublishStream、SrsRtcPlayStream 创建过程推流类SrsRtcPublishStream,关键代码// A RTC publish stream, client push and publish stream to SRS.class SrsRtcPublishStream : virtual public ISrsHourGlass, virtual public ISrsRtpPacketDecodeHandler , virt.

2021-02-27 16:33:45 1711

原创 RTP协议介绍

RTP协议介绍RTP即实时传输协议(real-time transport protocol),它是应用层协议,用来封装音视频包,下层通过UDP协议传输。协议格式   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 

2021-02-21 20:45:37 627 1

原创 srs4.0 webrtc 分析(三) 推流

设计方案详情见:https://github.com/rtcdn/rtcdn-draft基于http接口以json格式上传webrtc建接所有的SDP信息代码分析首先看下推流端rtc_publisher.html 模块,文件在trunk\research\players目录下代码逻辑创建RTCPeerConnection设置音视频收发方式与参数信息,contraints设置了视频最大高度获得媒体流创建offer sdp,并把该sdp设置为本地描述信息通过post 接口,把offer s

2021-02-01 00:30:06 3180 2

原创 mediasoup 源码分析(二十六)SRTP

目录协议介绍协议格式srtp加密上下文信息协议介绍SRTP,即安全实时传输协议(Secure Real-time Transport Protocol),是在实时传输协议(Real-time Transport Protocol)基础上所定义的一个协议。协议格式01234567890123456789012345678901+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...

2021-01-31 23:24:06 684 1

原创 obs-studio 二次封装(十一)添加增益模块 、完善demo

目录介绍增益模块SDK 中添加增益介绍自动增益控制(automatic gain control)AGC。简单讲,音频增益是对音频信号的强度进行放大或者缩小的一种功能。obs也提供了增益,不过做的相对简单,只是乘以了一个增益系数,没有做静音检测。增益模块代码: gain-filter.c具体的处理逻辑如下:每个通道中的音频数据都乘以一个固定的增益系数multiplestatic struct obs_audio_data *gain_filter_audio..

2021-01-31 12:21:56 1248 7

原创 srs4.0 webrtc 模块分析(二) rtmp转webrtc

介绍srs4.0 支持rtmp推流webrtc播放。本文演示通过obs推rtmp流,web端进行webrtc播放。环境搭建运行srs4.0./objs/srs -c conf/rtc_live.confsrs默认是控制台模式运行,如果喜欢后台运行,可以修改rtc_live.conf文件,打开daemondaemon on;推流通过obs推送rtmp流,具体操作如下:打开obs--》设置推流地址,服务器地址即你srs的部署地址。..

2021-01-25 20:22:01 2391 5

原创 mediasoup 源码分析(二十五)dtls握手协议(二)

目录DTLS 协议介绍DTLS交互过程抓包基于mediasoup 分析dtlsssl 中的BIO处理收到的DTLS数据,得到私钥基于获得的私钥key创建srtpDTLS 协议介绍DTLS(Datagram Transport Layer Security)数据包传输层安全协议。TLS不能保证UDP传输的安全性,DTLS在TLS基础上进行扩展,使之支持UDP。补充第十九篇dtls 握手,十九篇见下面链接。https://blog.csdn.net/lcalqf.

2021-01-25 01:58:07 704 1

原创 srs4.0 webrtc模块分析(一)环境搭建

介绍srs 是国内开源的一套流媒体服务器,目前发展到4.0版本(4.0还没正式发布),服务支持RTMP/HLS/WebRTC/SRT/GB2818。github地址:https://github.com/ossrs/srs我们主要分析srs4.0 webrtc模块,后面我将陆续介绍srs 对webrtc支持,欢迎大家关注给与支持。环境搭建一、源码下载git clone https://github.com/ossrs/srs.git如果github 下载慢或者失败可以用国.

2021-01-21 00:06:57 3085 2

原创 mediasoup 源码分析(二十四)stun 协议分析

目录stun介绍stun 协议分析属性消息stun介绍stun 即:Session Traversal Utilities for NAT。用于NAT穿透的网络协议。作用:stun协议主要用来得到自己的外网IP,然后进行连通性检测。客户端比如chrome会向stun服务器发送stun包得到自己的外网IP。对于mediasoup和srs等webrtc服务器,本身实现了ice-lite,不需要单独部署stun服务,只需要响应客户端发送的stun request就表明连接.

2021-01-16 22:01:30 969 1

原创 mediasoup 源码分析(二十三)SDP 协议介绍

目录SDP 介绍协议介绍SDP 介绍SDP(Session Description Protocol)是一种会话描述协议,不是传输协议。什么意思呢?,就是说SDP不是传输层协议(如UDP、TCP),也不是应用层协议(如HTTP),它是一种自定义的私有协议格式,用来交换webrtc建联所需要的配置信息、媒体属性信息等。SDP 分为offer、answer两种类型,且服务端和客户端既可以做offer也可以做answer。v=0o=-14034283583473731...

2021-01-09 19:09:51 936 1

原创 boost json 解析数组

利用boost 自带的json库,解析数组,json格式如下:{ "roomId":"room_123", "pubUid":"uid1", "subList":[ "uid2", "uid3", "uid4" ]}解析代码:#include <boost/asio.hpp>#include <boost/shared_ptr.hpp>#include <boost/thread.hpp>#include &

2021-01-04 20:16:55 1578 3

原创 obs-studio 二次封装(十)SDK 中添加降噪模块

目录介绍添加降噪模块介绍在obs-studio封装(九)https://blog.csdn.net/lcalqf/article/details/111999838 ,分析了降噪实现过程,具体的细节见上篇。本篇文章封装降噪部分,并集成到sdk中。降噪模块bool LiveModule::set_noise_suppression(int suppress_level){ obs_source_t* filter_source = obs_source_cre...

2021-01-01 22:18:43 557 3

原创 obs-studio 二次封装(九)噪声抑制(降噪)

一、降噪模块分析 降噪模块被封装为obs的一个filer,代码目录为:plugins-->obs-filters--->noise-suppress-filter.c obs利用第三方开源降噪库speex进行处理,下载地址为:http://speex.org/downloads/,业界经常拿speex和webrtc的降噪模块对比,大多认为webrtc效果更好。但是,通过obs直播效果来看,speex完全可以。 用到的函数:设置帧大小,采样...

2020-12-30 23:41:06 1112

原创 mediasoup 源码分析(二十二) XR包

目录协议介绍协议分析1、BT=42、BT=5协议介绍XR 包是RTCP 扩展报告的一种,PT=207,主要用来提供更加详细的时间、丢包等统计信息。XR包总共有七个报告块,mediasoup主要第四和第五即BT=4 ,BT=5两个。代码见:XR.cpp 、XrDelaySinceLastRr.cpp、XrReceiverReferenceTime.cpp协议分析协议文档:https://datatracker.ietf.org/doc/rfc3611/?include.

2020-12-14 00:32:02 717 2

原创 mediasoup源码分析 (二十一)sdp中profile-level-id 作用

目录一、格式二、作用一、格式SDP 中对于H264编码的协商 ,会有如下内容:a=rtpmap:126 H264/90000a=fmtp:126 profile-level-id=42e01f;level-asymmetry-allowed=1;packetization-mode=1表示H264 的playloadType=126,也可能是其他值。该类型的profile-level-id=42e01f。二、作用profile-level-id 用来设置H264的..

2020-12-10 00:29:16 1066

原创 obs-studio 二次封装(八)添加直播显示器与录屏模块

目录一、直播当前显示器二、添加录屏模块2、录制当前屏幕可以直播当前显示器,并录屏保存为本地文件。一、直播当前显示器二、添加录屏模块1、直播当前显示器//添加显示器模块bool LiveModule::LiveDisplay(HWND hWnd){ //捕获指定窗体句柄 m_pMonitorSource = obs_source_create("monitor_capture", "MonitorSource", NULL, nullptr); if (.

2020-12-09 23:49:02 1326 4

原创 mac 下 sourcetree 设置忽略文件夹

仓库---》仓库设置点击高级--》编辑在弹出的对话框中输入自己想忽略的文件夹,图中,out ,build就是我想忽略的文件夹。

2020-11-19 19:36:15 1204

原创 obs-studio 二次封装(七)拉流播放视频大小问题

目录问题描述修改方法问题描述 上篇文章封装了一个推流模块,但拉流播放时视频大小不对。这块倒不是bug,而是obs视频源缩放机制导致的。如下图,添加完视频源后,直播流的实际大小和红色框内的视频大小有关。如果自己不拉大,推出来的流就是默认大小。修改方法如果能力允许,最好把上面红色边框拖动视频、拉大缩小的功能添加到demo中,这样就可以实时调节直播流大小。但这个逻辑蛮复杂的,不太好改。如果感觉不好改,也可以直接把缩放比例、视频位置写死。比如默认把红色框拉大三倍。具体操作就是..

2020-11-18 00:29:02 1311 1

原创 obs-studio二次封装(六)完善推流模块 + 部署流媒体服务器

目录部署流媒体服务obs-studio 推流上一篇写了预览摄像头的demo,这次添加了推流模块。效果如下: 有个bug,拉流播放时视频大小不正确,等后面有时间再改正。注意下:用vlc播放延时偏大,多等会。可以选择用srs 提供的rtmp播放器拉流播放,这个延时低。把下面的URL改成自己的。如果用SRS播放器的话,启动srs命令如下:./obs/srs -c conf/srs.conf然后浏览器打开 http://localhost:8080/players/srs...

2020-11-09 01:07:35 1261 6

原创 mediasoup源码分析(二十)服务端架构设计

目录简介信令服务(房间服务)调度服务媒体服务简介流媒体服务器大的方向上可以分为上述三个模块。目前行业内都是分布式服务,独立部署。mediasoup信令与媒体之间虽然可以管道通信。但在行业内,服务之间通过管道通信用的少。一般是rpc、mq,或者传统的tcp。这块licode架构比较不错,licode是信令和媒体服务通过MQ消息队列解耦。下面介绍一下这三个服务主要功能,当然文中所说也是一家之言。信令服务(房间服务) 信令服务也称为房间服务。有的企业把信令和房间分开,信..

2020-11-07 21:03:08 1246 2

原创 mediasoup 源码分析(十九)dtls 握手

一、DTLS 作用dtls是udp层的安全传输协议,用来交换srtp的解密的秘钥。需要注意一点,dtls只用在srtp秘钥交换过程,秘钥交换完成后面发srtp的过程就不用dtls了。二、DTLS 关注点1、角色dtls角色是在sdp协商时确定的。sdp协议中有a=setup字段。有如下三个可选值:a=setup:actpass 既可以是客户端,也可以是服务器a=setup:active 客户端a=setup:passive 服务器chrome 浏览器和mediasoup 在d.

2020-10-27 00:41:26 1967 1

原创 centos7 编译licode 报error: ‘alloc_size’ 错误

一、错误信息: centos7 编译licode时,libav 总是报alloc_size的错误,all warnings being treated as errors所有的警告都被当成了错误,这样就会无缘无故报很多错误。修改CMakeLists开启警告信息,不用把警告当错误。libdeps/build/include/libavutil/mem.h:174:79: error: ‘alloc_size’ attribute ignored on a function returning...

2020-10-13 19:14:49 1188

原创 obs-studio 二次封装(五)实操封装一个demo

一、demo介绍 经常有朋友问有没有demo,正好这次十一简单封装一个。主要功能有:模块加载、枚举视频摄像头列表、设置分辨率、创建视频源、创建场景、设置摄像头预览。目前还没推流功能,以后再逐渐完善。效果图:二、创建视频源bool LiveModule::create_camera_sources(){ OBSSource m_VideoSource = obs_source_create("dshow_input", "VideoCaptureDevice", NUL...

2020-10-04 17:22:14 2224 4

原创 mediasoup 源码分析(十八)关于多端口问题 参考srs4.0处理逻辑

1、多端口介绍 mediasoup中的多端口,指服务端对每个客户端都会开辟新的端口来监听,这样就会导致服务端同时暴露成百上千个端口,实际生产环境肯定是不行的。2、srs4.0 单端口连接管理介绍 srs中通过SrsRtcConnection来代表一个连接。注意这个SrsRtcConnection 并不代表一个发布者订阅者。具体见:// The RTC server instance, listen UDP port, handle UDP packet, m...

2020-10-02 17:52:27 1658

原创 mediasoup 源码分析(十七)tccClient模块分析(2)及RTCP反馈报文介绍

2、RTCP反馈信息文档:rfc4585https://tools.ietf.org/html/rfc4585#section-6.3rfc4585的补充信息rfc5124https://datatracker.ietf.org/doc/rfc5124/?include_text=1主要有两大类反馈,一类是传输层的反馈RTPFB,PT=205;一类是负载层的反馈PSFB PT=206。2.1 其中传输层的反馈 如:NACK 信息、TMMBR、TMMBN等 见rfc5104..

2020-10-02 12:07:40 800 2

notepad++ 添加插件功能 PluginManager

notepad++新版没有插件工具,需要更新安装目录的plugins

2018-03-13

sourceinsight4.0破解版

sourceinsight_ 4.0.86 安装文件 破解方法与 破解文件 希望对大家有用,替换 同名sourceinsight4.exe文件 ,导入 si4.pediy.lic

2017-09-21

win7补丁包

软件运行时报api-ms-win-crt-runtime-l1-1-0.dll缺失

2017-03-14

QtPackage.vsix

vs2015 下安装qt替代 addin

2016-10-24

Qt 自定义事件

QT 自定义事件 跨线程通信

2016-03-23

FFMPEG muxer mp4

FFMPEG muxer mp4(mp3 ,h.264)

2014-12-17

自定义工具条图标

VC知识库上下载的,修改了一个VS2010下编译的错误 ,CToolBar 自定义工具条图标

2014-12-10

FFMPEG配置需要的几个头文件

FFMPEG配置需要的MinGW中的几个头文件

2014-12-10

CListBox改变指定行颜色

VS2010 CListBox改变指定行的颜色

2014-08-25

CListCtrl 改变选中行的颜色

CListCtrl 实现重绘 改变选中行的颜色,

2014-08-25

简单的文件传输

多线程、select模型实现文件的传输,但是还有很多弊端没有做好。有时间下次再更新。

2014-08-24

双缓冲画坐标系

vc++实现双缓冲绘制坐标系,遮挡时防止闪烁、重绘。

2014-08-24

非递归创建和遍历二叉树

非递归先序创建二叉树,非递归先序遍历二叉树和递归中序遍历。

2013-08-31

CMyListBox类

VC++ listbox控件重绘,实现特定行显示不同颜色。

2013-03-19

linux程序设计中文 第四版.z.01

和linux程序设计第四版 中文版放在一起解压缩

2012-08-01

linux程序设计第四版 中文版

linux程序设计第四版 中文版 由于下载限制 共分两次上传。Linux程序设计 中文第4版.z01在另一次上传资源中,

2012-08-01

空空如也

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

TA关注的人

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