音视频系列 什么是MediaRecorder MediaRecorder是安卓提供的一个用于音视频采集的类 在前几篇文章中,我们已经介绍了如何进行音频和视频的采集,即通过AudioRecord采集音频,通过Camera来采集视频 那么我们还为什么要介绍MediaRecorder了 前几篇文章介绍的音视频采集,采集的都是原始数据,对于音频来说是pcm数据,对于视频来说是YUV数据,camera中获取的是NV21,camera2获取的是YUV_420_888 对于原始数据还需要进行编码和封装,才能使…
音视频系列 什么是MediaCodec MediaCodec是安卓官方提供的一套用于音视频编码和解码的API,该API是在安卓4.1(API 16)引入的,因此只能用于4.1以上的手机 MediaCodec工作原理 先上一幅图 MediaCodec工作原理.png 从图中可以看出MediaCodec的架构采用了2个缓冲区队列,即input缓冲区队列和output缓冲区队列 缓冲区队列 它是一个队列,队列中的每个元素都是一个换种区 Client,Codec Client指的是API的使用者 Cod…
音视频系列 什么是wav wav是一种无损的音频文件格式,wav文件有两部分,第一部分是文件头,记录一些重要的参数信息,如音频的采样率,通道数,数据位宽,第二部分是数据部分,数据部分可以是PCM,也可以是其它的编码格式的数据 为什么要将音频存储wav格式 存储为该格式,音乐播放器可以通过读取wav头,识别出它是音频文件,从而进行播放. 因为后缀名是可以任意修改的,不能简单的通过后缀名来判断该文件是否是音频文件 wav与pcm的区别 pcm是一种未经压缩的编码方式 wav是一种无损的音频文件格式…
× 目录 [1]定义 [2]应用场景 [3]合并[4]实现[5]维护 前面的话 前面已经介绍过,描述性图片最终要合并为雪碧图.本文是photoshop巧用系列第五篇——雪碧图 定义 css雪碧图(sprite)是一种网页图片应用处理方式,它允许将一个页面涉及到的所有零星图片都包含到一张大图中.使用雪碧图的处理方式可以实现两个优点: [1]减少http请求次数 [2]减少图片大小,提升网页加载速度 (多张图片加载速度小于拼合成的图片的加载速度) 凡事都不完美,实现优点的同时也带来了缺点,即提高了网…
目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 第四篇:发布/订阅 Publish/Subscribe RabbitMQ学习总结 第五篇:路由Routing RabbitMQ学习总结 第六篇:Topic类型的exchange RabbitMQ学习总结 第七篇:RCP(远程过程调用协议) 上一篇中我们构建了一个简单的日志系统,我们可以把日志消息广…
如何定义实时音视频互动, 延迟 400ms 内才能无异步感 实时音视频互动如果存在1秒左右的延时会给交流者带来异步感,必须将视频播放延迟限制在400ms以内,才能给用户较好的交互体验. 当延迟控制在400ms以内时,两个人音视频互动是实时的,不会有异步感存在,即实时音视频互动. 实时音视频互动产生延迟的原因 音视频互动的延迟是如何产生的? 我们先假设这样一个场景:位于北京的A客户端与位于广州的B客户端进行实时音视频互动. 该场景会有以下几个产生延迟的原因: 光的传输耗时 30ms: 网络处理耗时…
在 WebRTC 项目中,又拍云团队做到了覆盖系统全局,保证项目进程流畅.这牵涉到主要三大块技术点: 网络端.服务端的开发和传输算法 WebRTC 协议中牵扯到服务端的应用协议和信令服务 客户端iOS.安卓 H.264 编解码技术 △ WebRTC 技术点 实时音视频互动必须遵守三大点 必须基于 UDP 协议,否则不要谈实时 因为 TCP 协议的重传机制(传输保障)会导致累积延迟问题,用 UDP 协议没有传输保障机制,但需要自行完善丢包容错逻辑. 又拍云音视频互动方案是基于UDP 协议,使用 T…
Intelli IDEA学习系列之快捷键篇 IDEA简介: IDEA 全称IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.Ant.JUnit.CVS整合.代码审查. 创新的GUI设计等方面的功能可以说是超常的.IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主. 在学习过程中会慢慢补充..... [1.查找] 1…
Python学习系列(五)(文件操作及其字典) Python学习系列(四)(列表及其函数) 一.文件操作 1,读文件      在以'r'读模式打开文件以后可以调用read函数一次性将文件内容全部读出,也可以指定每次read读多少字节,例如: #coding:utf-8 fn='test1.py' fp=open(fn,'r') #以读的方式打开文件,文件必须首先存在和,.文件在同一目录下py print 'reading pos:',fp.tell() r=fp.read(20) #读取文件内…
[Silverlight]Bing Maps学习系列(五):绘制多边形(Polygon)图形 Bing Maps Silverlight Control支持用户自定义绘制多边形(Polygon)图形,包括三角形.四边形(矩形.菱形).以及其他更多多边形的图形绘制. 多边形说简单点就是一个由多条边组成的有一定规则的图形,比如三角形就是由三条边组成,我们要在地图上绘制三角形需要知道三个顶点的坐标值(精度和纬度),如下代码块: private void btnPolygon_Click(object…
本文是redis学习系列的第五篇,点击下面链接可回看系列文章 <redis简介以及linux上的安装> <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用(主从.事务与锁.持久化)> <redis高级应用(集群搭建.集群分区原理.集群操作> 本文我们继续学习redis与spring的整合,整合之后就可以用redisStringTemplate的setNX()和delete()方法实现分布式锁了. Redis与spring的整合 相关…
上两篇我们学习了文本字符输出以及Unicode编写程序,知道如何用常见Win32输出文本字符串,这一篇我们来学习Windows编程中另一个非常重要的部分GDI图形绘图.Windows的GDI函数包含数百个API可供我们使用,本篇把最常用的GDI绘图做一个讲解.GDI可以绘制点.直线曲线.填充封闭区域.位图以及文本,其中文本部分已经在上一篇中将了,请参考[Windows编程]系列第三篇:文本字符输出. 跟前面的GDI对象一样,本篇的这些绘图函数也必须要设备上下文句柄(HDC)作为函数参数,从前文我…
第五篇(书中 3.5节 内容) 今天得把昨天的问题解决了才行. 去了Q群,碰到一位大大,他给我解惑了.Thanks♪(・ω・)ノ 这是我之前按照书上写的方式写的,并没有效果. 然后大大给我解答了: 后来我就改了一下: 可以看到,有效果了.关键点就在两点: 1.书中所说的childrenCreated方法根本没用.(来自2019-7-15的我:对不起,我的锅,请忘记这条吧) 2.在绑定this.skinName 皮肤之前,要先监听 控件加载完成后 事件. 什么意思呢?我来一一说明: 第一点: 是的…
本文主要介绍webrtc应用状况,文章最早发表在我们的微信公众号上,详见这里,欢迎关注微信公众号blackerteam,更多详见www.blackerteam.com WebRTC是个好东东,就好比是一个免费的蛋糕,下面让我们来看看大家都在怎么吃? ps:文中部分的信息由内部小伙伴提供,非来自官方渠道,官方渠道的信息都太官方,原因你懂的! 国外的情况我们在前面也介绍过,google刚推出WebRTC的时候巨头们要么冷眼旁观,要么抵触情绪很大,但几年下来看到发展势头这么猛,态度也都有所转变了,比如…
本文主要介绍一种QoS的解决方案,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help QoS出现的背景: 而当网络发生拥塞的时候,所有的数据流都有可能被丢弃:为满足用户对不同应用不同服务质量的要求,就需要网络能根据用户的要求分配和调度资源,对不同的数据流提供不同的服务质量: 1.对实时性强且重要的数据报文优先处理: 2.对于实时性不强的普通数据报文,提供较低的处理优先级,网络拥塞时甚至丢弃. 为了满足上述需求,QoS出现了,定义如下: QoS…
本文主要介绍如何测试网络性能,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help 网络性能直接决定了视频通话效果,比如qq,很多时候我们我们觉得通话效果不错,但有些时候体验很差,这时候我们怎么判断是网络不好还是产品本身质量问题呢?最好的办法就是有工具能直接测试当前网络质量,这也正是本文的主题,原文最早来自环信音视频专家符宁,由kelly进行整理和编辑. 一.性能指标: 测试网络性能之前我们得先知道衡量网络性能好坏得几个指标: 1.带宽(吞吐量…
目录 1. 使用场景 2. 基于消息头的路由 2.1 使用JSON提交订单的消息 2.2 使用XML提交订单的消息 2.3 使用Choice组件判断订单格式 3. 基于消息内容的路由 4. 其他控制流向的组件 本篇主要介绍在Mule ESB中控制消息的流向.控制消息的流向有很多不同的场景,数据的路由,数据的拆分和组合,数据的排序,数据的分发等.数据路由是ESB平台上最基本,也是最重要的功能之一,完整的ESB平台都会有相对应的功能.ESB基本的功能可分成消息路由,消息传输和消息转换等,后续几篇Mu…
× 目录 [1]contains [2]empty [3]parent[4]has[5]not[6]header[7]lang[8]root 前面的话 本文介绍过滤选择器中的内容选择器.内容选择器的过滤规则主要体现在它所包含的子元素或文本内容上 :contains(text) :contains(text)选择器选择含有文本内容为'text'的元素,返回集合元素 //返回所有文本内容包含'test'的元素 $(':contains("test")') //返回所有文本内容包含'test…
引言: ASP.NET WebAPI的核心框架是一个消息处理管道,这个管道是一组HttpMessageHandler的有序组合.这是一个双工管道,请求消息从一端流入并依次经过所有HttpMessageHandler的处理.在另外一端,目标HttpController被激活,Action方法被执行,响应消息随之被生成.响应消息逆向流入此管道,同样会经过逐个HttpMessageHandler的处理.这是一个独立于寄宿环境的抽象管道,如何实现对请求的监听和接收,以及将接收的请求传入消息管道进行处理并…
一.FFmpeg 学习 1. 官方API文档 FFmpeg Documentation:http://www.ffmpeg.org/doxygen/trunk/index.html 2. 优秀开源项目 a). FFmpeg_Tutorial : https://github.com/yinwenjie/FFmpeg_Tutorial b). FFplay.c 源码:http://ffmpeg.org/doxygen/trunk/ffplay_8c_source.html c). FFmpegMe…
× 目录 [1]图示 [2]概念 [3]说明[4]总结 前面的话 对于执行环境(execution context)和作用域(scope)并不容易区分,甚至很多人认为它们就是一回事,只是高程和犀牛书关于作用域的两种不同翻译而已.但实际上,它们并不相同,却相互纠缠在一起.本文先用一张图开宗明义,然后进行术语的简单解释,最后根据图示内容进行详细说明 图示 查看大图 概念 [作用域] 作用域是一套规则,用于确定在何处以及如何查找标识符.关于LHS查询和RHS查询详见作用域系列第一篇内部原理. 作用域分…
引言:Canvas绘图API快速入门 在接触HTML5的初学者包括我都在很多地方见到非常炫的一些页面,甚至好多学习HTML5的开发者都是冲着Web端的页游去的,那么HTML5那么绚丽的页面效果以及游戏动画效果的原理是怎样的?本篇文章将带您在20分钟内快速了解和上手HTML5游戏开发的神器:Canvas绘制API. 一.Canvas是什么? Canvas就是一个画布,可以进行画任何的线.图形.填充等一系列的操作,而且操作的画图就是js,所以让js编程到了嗑药的地步.另外Canvas不仅仅提供简单的…
本文主要介绍rtmp&hls视频直播原理,文章最早发表在我们的微信公众号上,详见这里,欢迎关注微信公众号blackerteam,更多详见www.blackerteam.com 现在视频直播很火,应用场景很多,比如在线教育.美女秀场.在线医疗.电商活动.游戏直播.体育直播,中国好声音. 市面上与之相关的app也很多,比如搜狐视频.乐视体育.虎牙直播.9158,作为it人员我们可能更关心其背后的实现原理, 所以下面我们通过6张图来进行介绍: 图一:直播流程,以在线教育为例 说明:GotyeLive是…
本文主要总结国内提供RTC SDK的产品,转载必须说明出处,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help 自从开通邮件和微信公众号以来,很多人问多人视频会议.在线直播.多方监控这种东西要怎么做,有没有好的第三方sdk推荐? 因为前面已经对开源方案做过介绍,所以这次主要整理出目前市面上相对比较成熟的sdk产品,同时简单介绍各自的特点,至于优缺点我就不点评了,一方面是以免广告嫌疑,另一方面是给自己减去一些不必要的麻烦,因为咱团队跟国内各大s…
这篇文章最早是杜老师写的,看完感触很深,加上之前跟咨询公司的朋友也讨论过这方面的问题,所以结合自己的经验,做了些删改(得到了杜老师的授权). 先通过下面几个简单的问题来了解技术服务: 问题1:技术服务是什么? 提供解决方案,并告诉你坑在哪里,怎么你少走弯路. 问题2:这跟社区里面的发帖和讨论是不是一样? 有点相似,但网友的回答五花八门,不一定正确,或者有上句没下句,他可能并不了解你的需求,或误解了你的需求. 问题3:blacker,问你们问题需要收费吗? 在公众号,博客,邮件或论坛里都是免费的,…
前言 最近想去前同事推荐的一个Oracle相关的岗位竞争一下,由于之前没有使用Oracle的相关经验,所以决定学习一下,就算最终岗位应聘不成,至少也有了一些Oracle经验了,说不定哪天就用上了.再说写一些博客笔记远比自己一个人蒙头学习要强的多,一来可以帮助其他后来人,二来也可以适当的回顾一下当初的经历.可惜的是以前多年的工作,从来就是很少记下来,满以为自己记性好,有实体经验会记牢一辈子,直到现在,年纪一过30,发现好多东西却是记得似是而非,蒙蒙拢拢了.经此一番,此次Oracle学习一定痛改前非…
前面的话 对于执行环境(execution context)和作用域(scope)并不容易区分,甚至很多人认为它们就是一回事,只是高程和犀牛书关于作用域的两种不同翻译而已.但实际上,它们并不相同,却相互纠缠在一起.本文先用一张图开宗明义,然后进行术语的简单解释,最后根据图示内容进行详细说明 图示 查看大图 概念 [作用域] 作用域是一套规则,用于确定在何处以及如何查找标识符.关于LHS查询和RHS查询详见作用域系列第一篇内部原理. 作用域分为词法作用域和动态作用域.javascript使用词法作…
面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇 面向对象进阶篇 其他相关 一.isinstance(obj, cls) 检查是否obj是否是类 cls 的对象 1 2 3 4 5 6 class Foo(object):     pass   obj = Foo()   isinstance(obj, Foo) 二.issubclass(sub, super) 检查sub类是否是 super 类的派生类 1 2 3 4 5 6 7 class Foo(object):     pa…
前言 本文来自Prometheus官网手册1.2.3.4和 Prometheus简介1.2.3.4 记录规则 一.配置规则 Prometheus支持两种类型的规则,这些规则可以定期配置,然后定期评估:记录规则和警报规则. 要在Prometheus中包含规则,请创建包含必要规则语句的文件,并让Prometheus通过Prometheus配置中的rule_files字段加载文件, 规则文件使用YAML. 通过将SIGHUP发送到Prometheus进程,可以在运行时重新加载规则文件. 仅当所有规则文…
前言 还记得上一篇文章中所说的配置吗?本篇文章算是上一篇的延续吧.在 .NET Core 中读取配置文件大多数会为配置选项绑定一个POCO(Plain Old CLR Object)对象,并通过依赖注入使用它.而这种使用方式称之为选项模式.而选项模式使是用类来提供对相关设置组的强类型访问,同时选项还提供验证配置数据的机制,是不是很强大,让我们一点点揭开它的神秘面纱. ASP.NET Core 6.0 Web API简要说明 首先开发工具上需要VS2022了,这里非常推荐大家下载使用,在编码上真的…