自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

温故而知新

Nothing is more terrible than ignorance in action

  • 博客(185)
  • 资源 (2)
  • 收藏
  • 关注

原创 GStreamer 基础教程三: 动态管道

目标我们可以在应用程序开始时定义整体管道,也可以在有足够信息时“动态”构建管道。这篇教程的目标是搞清楚如下问题:如何在链接元件时获得更精细的控制?如何收到感兴趣事件的通知,并及时反应?元件可能处于的哪些不同的状态?介绍这篇教程中的管道在设置为 “Playing” 状态之前并未完全构建好。这没问题。如果我们不采取进一步的行动,数据将到达管道的尽头,管道将会产生一个错误消息并停止。...

2024-01-22 21:20:34 1021

原创 GStreamer 基础教程二: 核心概念

-- 老范编译自 GStreamer 官方教程目标上一篇教程展示了如何自动构建管道。这篇教程将通过实例化每个元素并将它们链接在一起来手动构建管道。在此过程中,我们将学习:什么是 GStreamer 元素以及如何创建一个元件?如何将元件相互连接?如何自定义元件的行为?如何监视总线的错误情况并从 GStreamer 消息中提取信息。程序流程@startumlsta...

2024-01-21 10:41:49 299

原创 GStreamer 对于 WebRTC 的支持

1. GStreamer 简介GStreamer 是与 FFmeg 齐名的多媒体框架,它最引人注目的就是它的 pipeline 和 plugin 机制,提供了高度可定制化的扩展性。有关 Gstreamer 的基础知识请参见GStreamer 官方教程GStreamer 开发手册GStreamer 插件开发指南GStreamer 中文开发手册_ZONGXP的博客-CSDN博客这里不...

2023-09-12 23:07:59 134

原创 WebRTC 安全之一

WebRTC 的安全需要满足三个基本需求Authentication 用户访问需要认证Authorization 用户访问需要授权Audit 用户的访问应该可被追踪和审查其中前两项也可以归结为 CIAConfidentiality 机密性:信息需要保密, 访问权限也需要控制Integrity 完整性:信息需要保持完整,在存储和传输过程不被未授权,未预期或无意地篡改或销毁,或者可以...

2023-09-02 19:43:02 665

原创 WebRTC 之音视频同步

在网络视频会议中, 我们常会遇到音视频不同步的问题, 我们有一个专有名词 lip-sync 唇同步来描述这类问题,当我们看到人的嘴唇动作与听到的声音对不上的时候,不同步的问题就出现了而在线会议中, 听见清晰的声音是优先级最高的, 人耳对于声音的延迟是很敏感的根据 T-REC-G.114-200305 中的描述大于~280ms 有些用户就会不满意大于~380ms 多数用户就会不满意大于~...

2023-08-03 23:33:11 1285

原创 Software 2.0

原文来自 https://karpathy.medium.com/software-2-0-a64152b37c35, 作者是 Andrej Karpathy有时候我看到有人把神经网络仅仅看作是“机器学习工具箱中的另一个工具”。它们有一些优点和缺点,可以在这里或那里发挥作用,有时候你可以用它们赢得 Kaggle 比赛。然而,这种解释完全忽视了树木,只看到了森林。神经网络不仅仅是另一种分类器,它们...

2023-07-26 15:31:01 146

原创 DTLS 握手为什么常失败

在做弱网测试的时候, 发现了一个奇怪的问题, 我们分别在上行和下行通道上施加从 5% , 10% 到 20% 的丢包,当仅在上行通道施加丢包时, 一切运行良好, 我们的 FEC/RTX 功能使得音视频通话依然流畅,可是在下行通道施加丢包时, 重新连接服务器常常不成功, 时常出现连接失败的情况, 但是机率也不是 100%,经过 wireshark 抓包发现一个 DTLS handshark 经...

2023-07-08 10:34:42 233

翻译 象写 SQL 那样用 Pandas 分析数据

过去若干年, 数据分析的第一步是将数据解析并存储到数据库表中, 然后用 SQL 来分析.现在我用的更多的是用 python 将数据读入内存, 保存到 Pandas DataFrame 中, 用 Pandas 来分析.其实 Pandas 所用的基本方法和 SQL 是差不多的, Pandas 有篇对比 Pandas 和 SQL 的文章。

2023-06-08 09:08:26 68

原创 OCR 竟然还要收费?

我曾经是 evernote(印象笔记)的重度用户,现在用的少了,主要原因是我建了自己的网站,有了自己的 wordpress, 自己用 moinmoin 搭的 wiki, 没有什么需求非要有一个印象笔记,尤其还要收不少钱,连 OCR 还得收钱,也有次数限制,这对一个程序员来说这钱花得不值当然,我常有需求要把图片上的文本转成文字的需求,例如在网上浏览的 ppt,pdf,png时,发现有不错的内容我会...

2023-06-03 08:58:50 177

原创 如何模拟弱网条件 - 限流, 丢包, 延迟和抖动

Abstract弱网条件的模拟AuthorsWalter FanCategorylearning noteStatusv1.0Updated2023-02-16LicenseCC-BY-NC-ND 4.0概述在网络会议,实时通信,网络直播中,由于网络不稳定造成的卡顿,花屏,模糊屡见不鲜,这样不稳定的网络我们称为弱网。需要采取诸如拥塞控...

2023-02-16 23:40:33 1748

原创 分析网络抓包用 python 更高效

Abstract分析网络抓包用 python 更高效AuthorsWalter FanCategorylearning noteStatusv1.0Updated2023-01-10LicenseCC-BY-NC-ND 4.0网络抓包分析用的最多的两大工具是 tcpdump 和 wireshark.一般我们通过 tcpdump 或者 w...

2023-02-04 10:46:39 2481

原创 读书笔记 - 活文档

中国有句俗语,好记性不如烂笔头,现代世界纸笔已经无需烂笔头了,但是一样的道理,人的大脑会遗忘很多东西,需要用文档来记录和分享有价值或重要的知识。Gojko Adzic 的 “实例化需求:团队如何交付正确的软件” 一书中描述了执行 BDD(行为驱动开发) 的团队编写的需求说明和测试用例非常有用。由于测试自动化,只要测试全部通过,这个文档就会始终保持最新。这种文档就是活文档。在图书馆看到一本书 ...

2022-12-11 10:35:50 169

原创 WebRTC 拥塞控制技术之 GCC 的实现一

AbstractWebRTC 拥塞控制技术之 GCC 的实现一AuthorsWalter FanCategorylearning noteStatusWIPUpdated2022-2-10构建 libwebrtc首先,我们来下载和构建 webrtc library, 你需要一个 VPN 来下载所需的软件和源码安装 Chromium 软件库工...

2022-11-02 23:20:53 405

原创 一百多行 Python 代码手写蕃茄钟

对现实不满,充满无力感,可是作为一个码农,大时代里的一个小人物,并不能改变什么,只能在程序代码里的世界里找点乐趣吧, 东坡先生如是说:莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。料峭春风吹酒醒,微冷,山头斜照却相迎。回首向来萧瑟处,归去,也无风雨也无晴。TomatoTimer 是我常用了一个网站,用来践行蕃茄工作法可是我想修改默认的时间,加入一点提醒...

2022-10-20 08:17:12 279

原创 WebRTC 之 RED

AbstractWebRTC RED 笔记AuthorsWalter FanCategorylearning noteStatusv1.0Updated2020-08-28LicenseCC-BY-NC-ND 4.0什么是 REDRED 即 REDundant coding 冗余编码,它是一种 RTP 荷载格式的规范,用来编码冗余的音频...

2022-09-01 14:13:07 464

原创 WebRTC 之 RTX

AbstractWebRTC RTX 笔记AuthorsWalter FanCategorylearning noteStatusv1.0Updated2020-08-28LicenseCC-BY-NC-ND 4.0什么是 RTXRTX 就是重传 Retransmission, 将丢失的包重新由发送方传给接收方。Webrtc 默认开启...

2022-08-28 02:50:21 1615

原创 C++ 程序 Crash 的分析

如果容易,它的复现步骤是什么如果不容易,它在什么条件下的出现机率比较大,有没有可能缩小排查的范围找出 crash 出现的时间范围,时机,和频率根据 backgrace 和 git log, 回顾 crash 相关代码的修改记录假设条件,测试,排除,不断重复,缩小范围有必要时画一张思维导图,记下每条排查路径查询 google, stackflow, 听取同事的意见最后一条,看看破案和推理小说及剧情,学学侦破技术有一些惯犯和惯用作案手段值得研究多线程处理不当多个线程操作一块内存区域,没有安全地加锁和串行

2022-07-12 10:57:50 943

原创 WebRTC simulcast

简介Simulcast 可以翻译成联播,不是新闻联播,而是多个媒体流的传播,如图所示注: SFU 即 Selective Forward Unit, 媒体转发服务器刚开始,发送方 sender 发送一路 1080p 的视频流给服务器 SFU, SFU 再转发给多个接收方 receiver1, receiver2 和 receiver3。一会儿,receiver 2 和 recei...

2022-06-26 11:28:51 1790

原创 化繁为简的状态模式

最近看了同事写的一块代码,逻辑非常复杂,我们讨论了实现的方式,我建议他改用状态模式, 这样可以省去很多复杂的判断分支这是用状态模式的做法不用状态模式的代码大致如此if(cpuRatio < xxx && memRatio < xxx) { state=Normal} else if(cpuRatio > xxx && m...

2022-06-25 09:51:48 84

原创 WebRTC 中的多路复用

AbstractWebRTC 中多路复用AuthorsWalter FanCategorylearning noteStatusv1.0Updated2022-4-30LicenseCC-BY-NC-ND 4.0回顾一下这张经典的图我改了一下 audio 和 video 的 codec, 现在 Opus 和 H.264 用的比...

2022-04-30 21:27:18 991

原创 用 Ninja and GN 来加速 C++构建

NinjaNinja 原意是忍者的意思,它是一个专注于速度的小型构建工具。它是一个构建系统。 它将文件的相互依赖关系(通常是源代码和输出可执行文件)作为输入,并快速编排构建它们。运行Ninja,默认情况下,它会在当前目录中查找名为 build.ninja 的文件并构建所有过时的目标。 您可以指定要构建的目标(文件)作为命令行参数。还有一个特殊的语法 target^ 用于将目标指定为某个规则的...

2022-03-19 20:56:48 1807 1

原创 H264 视频流的解析

AbstractH.264 视频流的解析AuthorsWalter FanCategorylearning notesStatusWIPUpdated2021-12-10视频流简介以最流行的H.264编码为例,对于视频流的解析要了解视频帧在RTP包中作为荷载是如何承载和存放的。先回顾一些基础的背景知识,再写一个小程序来分析RTP 视频流。视频...

2021-12-15 23:31:14 2291

原创 WebRTC 之 Insertable Stream:端到端加密很简单

Abstract: WebRTC Insertable Stream 的介绍及其端到端加密案例Authors: Walter FanStatus: WIPClass: Learning MinutsUpdated: 2021-10-16目录Insertable Stream 概述Stream API用例接口与模型可读流 Readab...

2021-10-16 20:11:01 1533 2

原创 如何高效地阅读 RFC

由于工作需要,我需要阅读大量的 RFC, 看得我头痛,如何高效地阅读 RFC 是摆在我面前的一个大问题如何高效地阅读 RFC 呢?我的想法如下自顶向下把文章背景,动机,目的和主要内容搞清楚, 纲举目张what, background, motivation, key points自底向上带着问题读 RFC, 把一个个点研究明白,再把它们串起来,将一片片碎片拼成完整的图片How an...

2021-08-17 23:39:39 208

原创 WebRTC 服务器要干些什么

概述WebRTC 的服务器大体分为信令服务器和媒体服务器WebRTC 信令服务器是主要功能是为 WebRTC 通讯搭建一个了解彼此能力的通道, 交换信息, 同步改动.而媒体服务器就是用来交换媒体,包括对媒体数据的加解密,编解码,带宽和速率控制等功能不同的 RTP Toplogies 对服务器有不同的要求WebRTC 或者说多媒体通信一般有如下的几种拓扑结构:Point to Poin...

2021-08-01 08:05:53 253

原创 WebRTC 之度量与统计: 到底出了什么问题

由于新冠疫情,我们待在家中,在网上工作,开会,看电影的时间越来越多了。网络嘛,大家都知道,时常不稳定,网上开会时声音听不清楚,图像模糊,视频有马赛克(不是人为打的)的情况时有发生,这时候,问题出在哪里呢?也许是网络的问题,也许不是,即使网络出现问题,只要不是不可忍受的,我们依然需要进行调整,保证基本的功能:语音通话要保持通畅,这是要首先保证的共享的桌面或文件内容要能够识别视频要能看到,哪...

2021-07-14 22:55:06 806

原创 高性能服务器开发检查清单

操作系统Linux: CentOS 是首选, Ubuntu 或 Redhat 其他系统亦可编程语言C或C++ 是首选,适合于计算量大和对性能要求比较高Java 对于复杂的业务逻辑比较有优势,只要你对由于 GC 导致的延迟不敏感.GO 语言颇有后来居上的势头,只需要发布二进制包,无需解释或执行器,而且跨平台兼容性,性能也不错,内置了并发和网络库也很不错线程模型:网络线程: No...

2021-06-08 07:18:13 132 2

原创 微服务治理的思考

在分布式系统, 特别是采用微服务架构中存在诸多服务, 它们之间存在着复杂的调用和依赖关系, 我们需要一个框架对如下方面来进行统一管理服务注册服务提供方将服务注册到集中的服务注册中心服务发现管理和更新服务的状态和信息, 以供服务消费方检索并使用这些服务服务诊断记录每个服务的调用日志,并自动生成调用链, 基于调用链进行自动的故障分析支持服务升降级和扩展在服务负载上升自动扩容, 在负载...

2021-05-30 10:04:16 284

原创 通过 WebRTC 共享屏幕很容易

简介网络会议中常用的屏幕共享功能使用WebRTC 提供的 getDisplayMedia API 就能轻松实现,接口如下var promise = navigator.mediaDevices.getDisplayMedia(constraints);MediaDevices 接口的 getDisplayMedia 方法提示用户选择并授予将显示屏幕或其部分(如浏览器窗口和标签页)的内容捕获...

2021-04-25 21:44:53 2606 5

原创 如何创建 WebRTC 会话二

WebRTC 是一套基于 Web 的实时通信解决方案,通过浏览器内置的 API 来支持音视频通道的搭建。简而言之,先在信令通道协商出彼此的媒体和通信参数, 再通过媒体通道来传输音视频媒体数据。这一套媒体会话的搭建流程定义为 “JavaScript Session Establishment Protocol” JavaScript 会话创建协议WebRTC 的信令,媒体以及数据通道首先看一下...

2021-03-21 20:31:10 281

原创 WebRTC 之 SDP

SDP 即 Session Description Protocol 会话描述协议, 它描述了所传输的媒体信息。之所以需要在多媒体通信之前交换 SDP, 就在于接收方需要知道传输的是什么媒体类型,什么编码格式,以便正确的回放,发送方需要知道接收方能接受什么媒体格式,网络连接地址是多少,从而知道如何编码,向哪里传输。SDP 内容简介SDP 所描述的会话信息主要有1. Session ...

2021-03-10 22:38:35 638

原创 WebRTC 相关标准和协议一览

WebRTC 是一套基于 Web 的实时通信解决方案。其官网上的解释如下:借助WebRTC,您可以在基于开放标准的应用程序中添加实时通信功能。 它支持在端点之间发送视频,语音和一般的数据信息,从而使开发人员能够构建功能强大的语音和视频通信解决方案。该技术可在所有现代浏览器以及所有主要平台的本机客户端上使用。 WebRTC背后的技术被实现为一个开放的Web标准,并在所有主要浏览器中均以常规Ja...

2021-03-04 22:16:55 709 1

原创 WebRTC 之 PeerConnection: 细说对等连接建立流程一

WebRTC 是一套基于 Web 的实时通信解决方案,通过浏览器内置的 API 来支持音视频通道的搭建。简而言之,先在信令通道协商出彼此的媒体和通信参数, 再通过媒体通道来传输音视频媒体数据。JavaScrpt 中用到的三个主要的对象有:MediaStream 获取和渲染音频和视频流RTCPeerConnection 支持音频和视频媒体数据通信RTCDataChannel 支持应用级的...

2021-03-03 22:49:56 2268 2

原创 C++程序度量驱动调优实例:看狄更斯的双城记,寻找性能瓶颈

作为一个专业的程序员,你写了一段程序,完成了一个功能,似乎达到了用户的要求,其实你心里也没底。做一个简单的测试, 跑了一个主要流程,基本的功能应该是满足需求的,但是性能呢?我们需要对程序的性能进行度量,确保性能是满足用户需求的。如果性能不理想,必需要找到瓶颈在哪里。最近在读狄更斯的小说《双城记》英文原版,既是学习英语,也是领略大师的行文。同时,我想知道大师喜欢用什么词,所以写了一个小程序来统...

2021-03-03 22:41:59 152 1

原创 WebRTC 之 MediaRecorder: 用你的浏览器录音和录像

既然现在的笔记本电脑,平板,手机都有摄像头和麦克风,那么录音和录像就是一件非常容易的事情了,但是如果不用别人写好的录音录像程序,让你自己来实现一个录音和录像应用,其实也没那么简单。但是有了 WebRTC 和支持它的浏览器, 事情就变得简单多了现代浏览器不仅支持 audio 和 video 两个新的元素,还支持了MediaStream 和 MediaRecorder 这样的媒体 API第一步:...

2021-02-27 16:38:24 1574

原创 WebRTC 之 MediaStream: 用你的摄像头拍照

概述先看一下效果,你可以在这里亲自动手试试 https://www.fanyamin.com/webrtc/examples/media_stream.htmlWebRTC 中对媒体流 Media Stream 做了内置的支持,可以从电脑的摄像头,麦克风中捕获音频或视频流,并在 HTML5 所支持的 <video> 或 <audio> 或 <canvas...

2021-01-19 21:41:20 1322

原创 接收方带宽估计的RTCP消息 REMB

1) WhatReceiver Estimated Max Bitrate (REMB) 提出了提出了一种RTCP消息,供在实验中使用, 它为基于RTP的媒体流部署了拥塞控制算法。它还描述了一个绝对值时间戳选项,用于带宽估计。该反馈消息用于通知一个在同一RTP会话上有多个媒体流的发送方, 通知它在该RTP会话的接收方路径上的总的估计可用比特率。在用于反馈消息的公共数据包头中(如[RFC458...

2021-01-05 15:55:06 1694

原创 C++程序员眼中丑陋的 JS

作为一个老程序员,长期工作在后端服务器的开发, 由于项目原因,最近会做一些前端 JavaScript 的开发,于是系统地学习了久违的 JavaScript, 第一感觉就是 Javascript 很丑陋。 当然,这是从一位老 C++ 程序员的角度来看 JavaScript , 所以觉的丑,而前端程序员可能看起来很美。就象一开始看着总想吐,吐着吐着就习惯了,这里总结一下 JS 的槽点1. 混乱的...

2020-12-14 11:14:21 273

原创 为什么需要发送和接收缓存

基于网络的应用程序都需要将接收到的数据先放入缓冲区,等一个数据包完整接收到了再传递给应用层。 大家都知道TCP是面向字节流的,发送方 send 了 n 字节,但接收方并不知道一次 read 操作收到了多少字节,可能是1,可能是n, 也可能是n-x 或 n+x (x 未知)。发送数据也是一样,一个数据包可能只发送了一部分,剩余的放在缓冲区中在 socket 端口可写时通过 on_write 回调函...

2020-10-23 19:21:41 1828

原创 现代C++改变了什么

C 是一门古老的语言, C++在为C 引入了面向对象和泛型,也引入了许多的复杂性,例如多重继承,模板的特化,等等。同时 C++ 本身除了 STL 标准库,缺少高质量的并发和网络软件包,每个C++程序员或多或少都造过大大小小的轮子。例如我就写过很多 string 处理的函数, 比如 Trim, LowerCase, UpperCase, 等等,还有基于引用计数的智能指针,包装 pthread 函数...

2020-10-14 14:01:07 178 1

常用编码查询软件工具

自己用VC6写的一个简单好用的编码转换工具,支持crc32,md5,以及base64, html , url encode/decode

2008-04-28

时区转换工具

自己用java 写的一个非常简单好用的时区转换工具,可以将日期时间从任意一个时区转成另外一个时区的日期时间

2008-04-28

空空如也

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

TA关注的人

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