自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

tong5956的专栏

厚德载物,博学敦行

  • 博客(148)
  • 资源 (6)
  • 收藏
  • 关注

原创 webrtc源码分析系列-flexfec的数据恢复流程

本文主要围绕fec的种类、fec的应用和flexfec的创建及fec数据包恢复过程展开,能够帮助读者更好的理解flexfec处理过程

2021-07-03 17:38:58 946 2

原创 WebRTC 录制端CPU的优化

在观察线上录制进程状态时,发现录制进程的CPU占用的非常高,立足长远考虑,还是必须降下,采取一些优化措施,最后降低了20%的CPU,效果还是比较明显的。

2021-07-02 17:44:22 1008

原创 localtime的死锁问题及规避方式

目录1、分析进程死锁原因2、解决进程死锁问题开发webrtc服务端录制时,录制中出现偶现死锁问题。1、分析线程死锁原因通过pstack 进程id 查看进程堆栈,发现如下堆栈信息:#0 __lll_lock_wait_private () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:95#1 0x00007f7690c0894a in _L_lock_10416 () from /lib64/libc.s...

2021-01-20 16:13:08 1053

原创 WebRTC音频接收处理全过程(二)

webrtc拿到订阅远端数据的answer后,设置远端sdp,启动音频渲染线程,循环向neteq的数据包接受队列中拿音频包解码输出webrtc_d.dll!webrtc::AudioDeviceWindowsCore::DoRenderThread() 行2975 C++ 启动渲染进程,取数据包解码后进行渲染webrtc_d.dll!webrtc::AudioDeviceWindowsCore::WSAPIRenderThread(void * context) 行2778 C++w...

2021-01-15 15:06:26 681 1

原创 WebRTC音频接收处理全过程(一)

目录 1.1 接收音频数据包 1.2插入音频数据包到待解码数据包队列1.3 解码音频数据包 1.1 接收音频数据包 cricket::BaseChannel::OnPacketReceived(bool rtcp, const rtc::CopyOnWriteBuffer & packet, __int64 packet_time_us) 行506 cricket::BaseChannel::OnRtpPacket(const webrtc...

2021-01-11 16:02:52 1986

原创 2020年的总结和2021的目标

目录工作篇学习篇生活篇赚钱篇

2021-01-06 22:18:02 2310 15

原创 mac os音频采集功能

mac下采集麦克风音频:#include <AudioUnit/AudioUnit.h>#include <CoreFoundation/CFString.h>#include <CoreAudio/CoreAudio.h>#include <unistd.h>#include <errno.h>#include <obs-module.h>#include <util/threading.h>#inc

2020-11-08 20:23:40 2064 2

原创 mac os 获取音频设备列表

最近在研究mac下音视频采集原理,首先需要的是枚举设备:#include <CoreFoundation/CFString.h>#include <CoreAudio/CoreAudio.h>#include <util/apple/cfstring-utils.h>#include "audio-device-enum.h"/* ugh, because mac has no means of capturing output, we have to

2020-11-08 12:10:19 3312

原创 gcc算法

Network Working Group H. LundinInternet-Draft S. HolmerIntended status: Informational H. Alvestrand, Ed.Expires: October 27, 2012 .

2020-09-23 10:16:57 662

原创 Licode入门学习:DtlsSocket源码分析

DtlsSocket::DtlsSocket(DtlsSocketContext* socketContext, enum SocketType type): mSocketContext(socketContext), mSocketType(type), mHandshakeCompleted(false) { ELOG_DEBUG("Creating Dtls Socket"); mSocketCont...

2020-09-02 15:17:53 345

原创 Licode入门学习:DtlsSocketContext源码分析

const char* DtlsSocketContext::DefaultSrtpProfile = "SRTP_AES128_CM_SHA1_80";X509 *DtlsSocketContext::mCert = nullptr;EVP_PKEY *DtlsSocketContext::privkey = nullptr;static const int KEY_LENGTH = 1024;static std::mutex* array_mutex;DEFINE_LO...

2020-09-02 15:16:28 213

原创 Licode入门学习:SrtpChannel源码分析

bool SrtpChannel::initialized = false;boost::mutex SrtpChannel::sessionMutex_;constexpr int kKeyStringLength = 32;uint8_t nibble_to_hex_char(uint8_t nibble) { char buf[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ...

2020-09-02 15:12:32 177

原创 Licode入门学习:NicerConnection源码分析

static bool nicer_initialized = false;static std::mutex nicer_initialization_mutex;static int nr_ice_crypto_openssl_random_bytes(UCHAR *buf, int len) { RAND_bytes(buf, len); return 0;}static int nr_ice_crypto_openssl_hmac_sha1(UCHAR *key, int...

2020-09-02 15:08:45 211

原创 Licode入门学习:LibNiceConnection源码分析

void cb_nice_recv(NiceAgent* agent, guint stream_id, guint component_id, guint len, gchar* buf, gpointer user_data) { if (user_data == NULL || len == 0) { return; } LibNiceConnection* nicecon = reinterpret_cast<LibNiceConnection*>(user.

2020-09-02 15:06:57 490

原创 Licode入门学习:DtlsTransport源码分析

对DtlsTransport源码分析:TimeoutChecker::TimeoutChecker(DtlsTransport* transport, dtls::DtlsSocketContext* ctx) : transport_(transport), socket_context_(ctx), check_seconds_(kInitialSecsPerTimeoutCheck), max_checks_(kMaxTimeoutChecks), schedul

2020-09-01 16:07:24 527

原创 Licode入门学习:libnice调用流程分析

libnice常用函数调用流程:#include <agent.h>guint stream_id;gchar buffer[] = "hello world!";gchar *ufrag = NULL, *pwd = NULL;gchar *remote_ufrag, *remote_pwd;GSList *lcands = NULL;// Create a nice agent, passing in the global default GMainContext.N

2020-08-31 15:57:46 1899 1

原创 windows dump分析步骤

windbg调试步骤:1、指定pdb路径:SRV*C:\symbols*http://msdl.microsoft.com/download/symbols;PDB目录2、加载dump文件3、切换上下文:.ecxr4、查看堆栈:kp5、分析:!analyze -vvs2015调试步骤:首先把dump文件放到软件安装目录下1、设定符号路径2、运行3、崩溃中断4、浏览源文件...

2020-08-28 15:27:13 531

原创 Licode入门学习:OneToManyProcessor源码分析

对OneToManyProcessor模块分析: DEFINE_LOGGER(OneToManyProcessor, "OneToManyProcessor"); // OneToManyProcessor的构造函数 OneToManyProcessor::OneToManyProcessor() : feedbackSink_{nullptr} { ELOG_DEBUG("OneToManyProcessor constructor"); } // OneToMan.

2020-08-28 14:54:06 352

原创 ffmpeg遇到Non-monotonous DTS in output stream的问题

在执行命令行:./ffmpeg -f concat -safe 0 -i filelist.txt out.mp4遇到如下问题,得到的文件音频某一段没有声音:[mp4 @ 00000249e9f01480] Non-monotonous DTS in output stream 0:1; previous: 36963852, current: 36597661; changing to 36963853. This may result in incorrect timestamps in t

2020-08-28 12:11:43 15801

原创 Licode入门学习:MediaStream源码分析(三)

MediaStream有点难懂的部分:// pipeline_读取传进来的packetvoid MediaStream::onTransportData(std::shared_ptr<DataPacket> incoming_packet, Transport *transport) { if ((audio_sink_ == nullptr && video_sink_ == nullptr && fb_sink_ == nullptr)) {

2020-08-27 17:58:13 269

原创 Licode入门学习:MediaStream源码分析(二)

继续对MediaStream进行分析:// 初始化log_stats,统计状态信息void MediaStream::initializeStats() { log_stats_->getNode().insertStat("streamId", StringStat{getId()}); log_stats_->getNode().insertStat("audioBitrate", CumulativeStat{0}); log_stats_->getNode().

2020-08-27 16:09:31 253

原创 Licode入门学习:MediaStream源码分析(一)

针对MediaStream进行分析:// MediaStream构造函数MediaStream::MediaStream(std::shared_ptr<Worker> worker, std::shared_ptr<WebRtcConnection> connection, const std::string& media_stream_id, const std::string& media_stream_label, bool is_pu

2020-08-27 15:47:01 464

原创 Licode入门学习:WebRtcConnection源码分析(三)

WebRtcConnection源码分析,分析每个函数的作用// 异步加入远端candidateboost::future<void> WebRtcConnection::addRemoteCandidate(std::string mid, int mLineIndex, std::string sdp) { return asyncTask([mid, mLineIndex, sdp] (std::shared_ptr<WebRtcConnection> connec

2020-08-26 18:03:28 340

原创 Licode入门学习:WebRtcConnection源码分析(二)

// 设置远端sdp信息boost::future<void> WebRtcConnection::setRemoteSdpInfo( std::shared_ptr<SdpInfo> sdp) { std::weak_ptr<WebRtcConnection> weak_this = shared_from_this(); auto task_promise = std::make_shared<boost::promise<void&g.

2020-08-26 17:12:57 224

原创 Licode入门学习:WebRtcConnection源码分析(一)

licode的核心WebRtcConnection模块,起到拉流的作用DEFINE_LOGGER(WebRtcConnection, "WebRtcConnection");// webRtcConnection的构造函数// 参数worker,io_worker,conection_id, ice_config, rtp_mappings, ext_mappings,listenerWebRtcConnection::WebRtcConnection(std::shared_ptr<

2020-08-26 15:52:49 489

原创 Licode入门学习:Licode服务与启动过程分析

licode需要手动启动的服务有四个,这四个服务之间通过mq相互调用和通信nuve.js,用于资源管理、数据库管理#!/usr/bin/env bashset -eSCRIPT=`pwd`/$0FILENAME=`basename $SCRIPT`PATHNAME=`dirname $SCRIPT`ROOT=$PATHNAME/..NVM_CHECK="$ROOT"/scripts/checkNvm.shCURRENT_DIR=`pwd`. $NVM_CHECKcd $P

2020-08-15 15:23:00 459

原创 webrtc打开和关闭麦克风

打开麦克风:关闭麦克风:

2020-05-29 17:36:57 2175

原创 webrtc打开和关闭摄像头

打开摄像头:关闭摄像头:

2020-05-29 17:23:45 2137 1

原创 ffmpeg读取文件时长(单位为秒)

GetFileDuration(){ fileUrl=$1 duration_line=`./ffmpeg -i $fileUrl 2>&1 | grep 'Duration'` duration_1=${duration_line%%,*} duration_2=${duration_1%%.*} duration_3=${duration_2#*:} echo $duration_3 durationList=(${duration_3//:/ }) duration_s.

2020-05-22 14:02:09 780

原创 音视频抗丢包技术

声网抗丢包处理的ppt,摘抄一部分:

2020-05-21 16:57:02 742

原创 webrtc 自动增益AGC源码分析(一)

webrtc的自动增益模块在agc_legacy_c工程下:analog_agc.c analog_agc.h digital_agc.cdigital_agc.h gain_control.h主要函数包括:WebRtcAgc_AddMicWebRtcAgc_AddFarendWebRtcAgc_GetAddFarendErrorWebRtcAgc_VirtualMicWebRtcAgc_UpdateAgcThresholdsWebRtcAgc_SaturationCtrl.

2020-05-20 19:48:30 1998

原创 webrtc代码结构阅读

Peerclient.cc 核心文件PeerClientFactory.cc核心文件视频采集代码在 modules->video_capture->video_capture_internal_impl中Video_capture_module是接口层(api)文件夹里,主要包含了webrtc的虚基类接口(audio)文件夹里,audio工程,包含音频传输接收发...

2020-03-24 11:08:52 462

原创 vs2017环境下webrtc的下载与编译配置

由于webrtc最新版本,加入了新的降噪模块,这里对最新版本进行下载与编译配置1、安装vs2017,在官网上下载2、下载depot_toolshttp://dev.chromium.org/developers/how-tos/install-depot-tools3、下载安装windows 10 sdk目前我使用的版本 sdk 版本号 最好为 1...

2019-12-16 15:43:16 409 1

原创 使用JS渲染C++视频流

JS通过C++打开摄像头,并采集得到的数据回传到JS,渲染到web端,实现方式如下:1、通过V8引擎将采集的数据以Buffer数组形式回传2、在cavas画布或webgl上渲染该数据例如:var c=document.getElementById("myCanvas");var ctx=c.getContext("2d");var imgData=ctx.createImage...

2019-10-23 15:45:50 996

原创 webrtc视频内容传输

1、main.js核心代码: const videoTracks = stream.getVideoTracks(); const audioTracks = stream.getAudioTracks(); if (videoTracks.length > 0) { console.log(`Using video device: ${videoTracks[0...

2019-10-10 19:23:29 999

原创 webrtc打开默认音频设备

1、main.js核心代码:navigator.mediaDevices.getUserMedia(constraints).then(handleSuccess).catch(handleError);/* * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. * * Use of t...

2019-10-09 18:02:28 872

原创 webrtc打开默认摄像头

1.main.js核心代码: const stream = await navigator.mediaDevices.getUserMedia(constraints);/* * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. * * Use of this source code i...

2019-10-09 17:57:29 865

原创 webrtc选择摄像头麦克风

最近在阅读webrtc的使用方法,这里将对其做一个总结1、main.js文件核心代码: if (window.stream) { window.stream.getTracks().forEach(track => { track.stop(); }); } const audioSource = audioInputSelect.va...

2019-10-09 17:50:57 1190

原创 Open WebRTC Toolkit Media Server的配置和使用

Open WebRTC Toolkit Media Server地址:https://github.com/open-webrtc-toolkit/owt-server.git## Open WebRTC Toolkit Media ServerThe media server for OWT provides an efficient video conference and stre...

2019-08-15 15:24:57 2988

原创 WebRTC音频降噪使用

webrtc的ns原理:把启动前50帧的数据拿来构建噪声模型,把启动前200帧的信号强度用来计算归一化的频谱差值计算。根据这两个模型使用概率目的函数来计算出每帧的信噪比并区分出噪声和声音,然后根据计算出的信噪比在频域使用维纳滤波器对噪声信号进行噪声消除,最后在根据降噪前后的能量比和信号噪声似然比对降噪后的数据进行修复和调整后输出。在研究webrtc的降噪模块,这里简述如何使用webrtc的降噪...

2019-03-08 19:41:40 3964 2

intel_media_sdk_2018_r2

最新intel media sdk 2018 R2,包含hevc,超高清编码。

2018-11-06

android-ndk-r10e-linux-x86_64

Android的ndk包,版本android-ndk-r10e-linux-x86_64,运行下64位操作系统下

2018-09-20

人工智能标准化白皮书

人工智能白皮书,介绍前沿内容和当前国内人工智能发展现状,和待解决的问题。

2018-01-30

深度学习经典资源下载

深度学习书籍下载,入门的经典书籍,可以下载学习的。

2018-01-30

libiconv的下载

libiconv用于做字符转码方面的事情,下载后对其直接使用即可

2018-01-30

ucrtbased下载

ucrtbased用于vs2015在运行下会出现少库的情况,把该库下载放在系统的sysWOW64目录下

2018-01-30

空空如也

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

TA关注的人

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