- 博客(284)
- 资源 (17)
- 论坛 (3)
- 收藏
- 关注
原创 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
10
原创 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
26
原创 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
96
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
63
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
58
原创 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
87
原创 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
125
1
原创 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
87
原创 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
77
原创 mac 下 sourcetree 设置忽略文件夹
仓库---》仓库设置点击高级--》编辑在弹出的对话框中输入自己想忽略的文件夹,图中,out ,build就是我想忽略的文件夹。
2020-11-19 19:36:15
89
原创 obs-studio 二次封装(七)拉流播放视频大小问题
目录问题描述修改方法问题描述 上篇文章封装了一个推流模块,但拉流播放时视频大小不对。这块倒不是bug,而是obs视频源缩放机制导致的。如下图,添加完视频源后,直播流的实际大小和红色框内的视频大小有关。如果自己不拉大,推出来的流就是默认大小。修改方法如果能力允许,最好把上面红色边框拖动视频、拉大缩小的功能添加到demo中,这样就可以实时调节直播流大小。但这个逻辑蛮复杂的,不太好改。如果感觉不好改,也可以直接把缩放比例、视频位置写死。比如默认把红色框拉大三倍。具体操作就是..
2020-11-18 00:29:02
220
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
135
3
原创 mediasoup源码分析(二十)服务端架构设计
目录简介信令服务(房间服务)调度服务媒体服务简介流媒体服务器大的方向上可以分为上述三个模块。目前行业内都是分布式服务,独立部署。mediasoup信令与媒体之间虽然可以管道通信。但在行业内,服务之间通过管道通信用的少。一般是rpc、mq,或者传统的tcp。这块licode架构比较不错,licode是信令和媒体服务通过MQ消息队列解耦。下面介绍一下这三个服务主要功能,当然文中所说也是一家之言。信令服务(房间服务) 信令服务也称为房间服务。有的企业把信令和房间分开,信..
2020-11-07 21:03:08
227
1
原创 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
1081
2
原创 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
73
原创 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
314
1
原创 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
289
原创 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
176
原创 nlohmann json
JSON for Modern C++https://github.com/nlohmann/json解析复杂结构,不好意忘了贴具体的json数据了,大家看解析过程应该可以猜到。#include <nlohmann/json.hpp>// for convenienceusing json = nlohmann::json;std::string media_config_string = std::string(*json_param); json media_c
2020-09-29 20:19:54
111
原创 boost blocking udp
boost官方 udp 阻塞serverhttps://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio/example/echo/blocking_udp_echo_server.cpp//// blocking_udp_echo_server.cpp// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~//// Copyright (c) 2003-2008 Christopher M. Kohlhoff (chris at k
2020-09-23 14:50:59
36
原创 boost async_udp_echo_server
boost官方例子//// async_udp_echo_server.cpp// ~~~~~~~~~~~~~~~~~~~~~~~~~//// Copyright (c) 2003-2008 Christopher M. Kohlhoff (chris at kohlhoff dot com)//// Distributed under the Boost Software License, Version 1.0. (See accompanying// file LICENSE_1.
2020-09-21 17:51:19
38
原创 mediasoup 源码分析(十六)为何不需要单独部署stun server
一、stun 介绍STUN(Simple Traversal of UDP over NATs,NAT 的UDP简单穿越)是一种网络协议,用来得到自己的公网IP、PORT信息。协议文档rfc5389:https://datatracker.ietf.org/doc/rfc5389/?include_text=1一般流程客户端会发送stun包,即binding request到stun服务器,stun服务器返回 binding response携带该客户端的外网IP信息。而流媒体服务器是部署在
2020-09-16 23:43:34
260
原创 ffmpeg rtp 推 mp4文件
ffmpeg 以rtp协议推送本地mp4 文件到远端服务器。shell脚本如下:#!/bin/bash./ffmpeg \ -re \ -v info \ -stream_loop -1 \ -i live_video.mp4 \ -map 0:a:0 \ -acodec copy -ab 128k -ac 2 -ar 48000 \ -map 0:v:0 \ -pix_fmt yuv420p -c:v copy -b:v 1000k -deadline realtime -c
2020-09-04 19:54:55
203
原创 mediasoup源码分析(十五)tccClient作用及RTP包整个收发流程
一、tccClient作用上篇文章最后介绍了 tccServer(RTC::TransportCongestionControlServer*tccServer),是用来处理Transport-cc的。当Producer收到对端发送的数据后,进行数据处理然后发送transport-cc反馈报文。tccClient是数据发给consumer时进行PacedSender平滑处理和码率修正。这块是webrtc的代码,具体见:mediasoup\worker\deps\libwebrtc\libwe..
2020-09-02 23:22:54
323
3
原创 licode 源码分析(四) pipeline
一、pipelinelicode中的pipeline 内部是一个保存PipelineContext的vector,有IN(输入)、OUT(输出)、BOTH(输入输出)三种类型 std::vector<PipelineContext*> inCtxs_; std::vector<PipelineContext*> outCtxs_; Both 类型对应ContextImpltemplate <class H>PipelineBase& P.
2020-09-02 15:30:00
124
原创 mediasoup源码分析(十四)拥塞控制 Transport-CC
一、Transport-CC 介绍webrtc有两种拥塞控制反馈方式,一种是REMB,另一种是Transport-CC。Transport-CC(Transport-wide Congestion Control)。REMB 用在接收端基于丢包率的码率反馈,Transport-CC是发送端基于延时的码率反馈。如果想开启该算法,发送端需要在RTP扩展头中添加transport-wide sequence number 字段,接收端RTCP 发送TransportFeedback报文。1、rtp..
2020-08-29 18:30:08
443
原创 licode源码分析(二) 创建房间 room 和roomController
一、创建room逻辑房间是通过erizoController下面的room.js来管理和创建的,具体代码:licode/erizo_controller/erizoController/models/Room.jsroom.js中有两个类class rooms和class room,其中 rooms本地维护了一个map来管理room。1、首先创建rooms//amqper对应amqper.js//ecch 是EcCloudHandlerclass Rooms extends eve..
2020-08-26 15:28:33
165
原创 licode源码分析(一)WebRtcConnection 创建
1、WebRtcConnection 介绍 WebRtcConnection是进行webrtc协议交互的主要类,如:sdp解析与交互、Candidate信息交互、stream流管理、srtp包处理
2020-08-25 19:21:41
227
原创 obs-studio 二次封装 (四)obs 音视频采集到推流大体流程图
一、obs 大体流程 由于obs整个项目代码量很大,刚开始接触时不知道从何着手。所以,整理出一份简单的流程图,大家后面做二次封装时可以对照这个流程图。 大体流程是:加载模块--->创建场景--->遍历音视频列表--->创建音视频源---->设置音视频编码器--->创建rtmp源--->加入源到场景 ---->开始直播。当然,每个过程都有一些细节需要做。比如,如何遍历音视频列表、如何调整编码器参数等等。流程图会列出每个步骤的关键函数,大家...
2020-08-22 23:10:41
1156
6
原创 mediasoup 源码分析(十三) 丢包重传 webrtc nack 机制
一、丢包介绍 由于webrtc所用的rtp协议底层是基于udp传输,所以并不能保证数据的可靠性。在发生丢包时,为了保证音视频的质量需要进行 重传,而 nack机制就是用来处理重传逻辑的,需要注意一点由于udp本身是无序的,所以在进行丢包重传时要做一定的特殊处理。二、nack 报文介绍文档 :RFC4585其中PT=205,FMT=1 ,Packet identifier即为丢失的RTP数据包的序列号,BitMap of lost packets指从,Packet ident...
2020-08-21 23:45:48
294
原创 mediasoup源码分析(十二)多端口问题 一个transport一个端口
一、多端口问题 mediasoup 一个transport 会开启一个udp端口进行监听,这样服务端就需要同时对外暴露出多个端口,在实际线上应用时 非常不安全。二、多端口问题的解决方案
2020-08-20 20:16:59
531
原创 mediasoup 源码分析(十一) 调试node.js及添加日志输出到文件
一、调试node.js代码 调试界面二、 调试方法通过如下命令启动mediasoup server.js//记着把xx.xx修改为自己的iPnode --inspect-brk=xx.xx.xx.xx:9229 server.js app的启动方式不变,还是gulp live。打开Goggle浏览器,输入chrome://inspect,点击configure配置刚才服务器的ip:port,然后点击Done确定,再点击最下面的inspect。如图:二、...
2020-08-20 20:13:19
233
1
原创 mediasoup源码分析(十) ffmpeg推流到mediasoup 及调试
一、PlainTransport 介绍 mediasoup提供了PlainTransport可以接收裸RTP数据,所以可以通过ffmpeg.sh脚本推本地文件到mediasoup。二、ffmpeg.sh推流介绍脚本路径:mediasoup-demo/broadcasters/ffmpeg.sh注意:需要通过chrome网页请求提前创建好一个房间。1、安装脚本运行时的依赖库安装httpieyum install httpie安装urlibeasy_install...
2020-08-20 11:25:23
1246
2
原创 mediasoup 源码分析(九) libuv网络库学习及mediasoup数据接收分析
一、libuv 介绍 libuv是一个开源异步跨平台网络库,mediasoup中的网络模块,包括和node.js层通信的pipe管道,都是通过libuv实现的。 libuv github地址:https://github.com/libuv/libuv二、libuv 关键结构 晚上再写。。稍等三、网友 libuv demo https://gitee.com/sundq/uvz...
2020-08-18 14:30:58
579
1
原创 mediasoup 源码分析(八) 服务器级联 PipeTransport 分析
一、级联概念 服务器级联通常指两个服务或者多个服务之间互相通信。比如视频会议或者在线教育中的小班课, 由于参会人员或者上课的学生分布在全国各地,如果是外教英语课还要跨国。这两种情况下用户会连接到不同的媒体服务,比如学生A连接华南节点、学生B连接华东节点、老师连北京某个节点。他们会进入同一个房间进行上课,此时就需要媒体服务之间进行夸地区、跨服通信,而级联就是用来解决这个问题的。二、mediasoup的级联方案PipeTransport mediasoup通过PipeTr...
2020-08-16 22:59:31
855
8
原创 obs-studio 封装(三) obs_module 模块插件加载过程分析
一、obs_module 介绍 obs-studio 是基于模块开发的,每个功能抽象成一个独立的模块,然后封装成一个动态库。在obs-studio启动时会 遍历动态库路径,加载所有的动态库。自己封装推流直播sdk时也要加载好这些模块插件。 obs_module 定义如下:/* modules */struct obs_module { char *mod_name; const char *file; char *bin_path; char *...
2020-08-16 15:14:47
305
原创 mediasoup 源码分析(七)consumer创建过程
一、consumer 类型介绍mediasoup总共有四种消费者Consumer类型,SimpleConsuer、PipeConsuer、SvcConsuer、SimucastConsumer,SimpleConsumer 普通RTP数据的消费者,比如有音频流和视频流每个都是SimpleConsumer,没有按类型区分,音视频流都是一样的,最简单的consumerPipeConsumer 不同Worker之间Router之间的数据流转,则其为接收或者消费从另外...
2020-08-14 20:50:15
344
原创 mediasoup源码分析(六)数据分发 Transport 到 Router 、Consumer
一、Tansport 转发到ProducerTransport收到数据packet后,会解析出packet中所带的ssrc字段,然后基于ssrc找到该数据的Producer。Transport::ReceiveRtpPacket{ // Get the associated Producer. RTC::Producer* producer = this->rtpListener.GetProducer(packet);//基于包中的ssrc选出Producer}Produer也
2020-08-13 10:15:40
399
原创 mediasoup 源码分析 (五) Congestion Control 拥塞控制
mediasoup支持两种类型的bwe(Bandwidthestimation)带宽估计反馈机制:TRANSPORT_CC 和REMB。具体处理类为:TransportCongestionControlServer。一、创建拥塞控制类TransportCongestionControlServer void Transport::HandleRequest(Channel::Request* request){ case Channel::Request::MethodId:...
2020-08-10 15:29:01
374
原创 mediasoup 源码分析 (四)PlainTransport 分析
一、接收裸RTP流PlainTransport 可以接收裸RTP流,也可以接收AES加密的RTP流。源码中提供了一个通过ffmpeg发送裸RTP流到mediasoup的脚本,具体地址为:mediasoup-demo/broadcasters/ffmpeg.sh脚本就是通过HTTP Post发送创建PlainTranport请求,然后通过ffmpeg向指定地址+端口,发送RTP流res=$(${HTTPIE_COMMAND} \ POST ${SERVER_URL}/rooms/${ROOM
2020-08-10 14:59:16
571
sourceinsight4.0破解版
2017-09-21
致一的留言板
发表于 2020-01-02 最后回复 2020-01-02
GHOST重装系统后以前桌面上的文件如何再恢复啊,
发表于 2012-07-06 最后回复 2012-07-07
我的下载积分变成0了。。
发表于 2011-03-31 最后回复 2011-04-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝