All Posts

FFmpeg像素格式分析

针对视频操作(如实时美颜)的时候,就会遇到处理视频的每一帧图像,图像内容在内存中存放的形式也就是像素格式。 YUV格式介绍 YUV格式有两大类:planar 和 packed 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随 ...

macOS下依赖自动打包脚本

macOS下,应用加载依赖的dylib或Framework需要根据rpath等信息去加载,而链接后默认依赖的路径是机器上的路径(可以通过otool命令查看),不方便打包出去使用。 下面的脚本信息能把应用依赖的dylib等拷贝到相同的输出目录, ...

Homebrew安装老版本的包

macOS安装开发包和应用工具,常常使用Homebrew来管理,Homebrew是基于ruby开发的、macOS下的自动化包管理器。 在线安装 brew安装好后,可以通过brew search xxx来查看是否支持包xxx 通过 brew instal xxx 就能快速执行安装 比如,安装 ...

FFmpeg时间戳整理

使用FFmpeg库进行音视频处理时,经常需要处理视频时间、编解码的dts/pts时间戳,时间的准确处理对音视频处理至关重要。 time_base 时间基(time_base)是FFmpeg中作为时间单位的概念。不同的音视频封装格式,可以使用不同的time_ba ...

Mac上编译CEF62

CEF是基于chromium的开源项目,让集成chrome的浏览器内核非常方便,而且紧跟升级的节奏,在客户端产品上广泛使用。官网其实已经打了二进制包,可以直接拿来集成。 不过有时候我们还需要自己来打包,最常见的几个原因: 需要集成音视频能力(默 ...

Spring 之Bean对象管理

Spring是Java服务端主流的开发框架,其中的依赖注入和模块化,实现了一套灵活的组件化方案。 这个相当于Spring在框架层面帮我们做好了Bean对象的管理,而且还支持注解以及很多方法来支持非侵入式的组件化方案,使得代码耦合极低,就像没有 ...

Spring 之方法拦截

本文介绍一种基于Spring的通用的方法拦截方案,配合注解来轻量级的使用,方法拦截技术经常用于性能监控,统一日志等。 ProxyFactory 代理工厂提供了对象行为的扩展机制(addAdvice)可以在方法调用前后做一些事情。 // 接口和对象 interface UserReadService { String getUserId(String id); } class UserReadServiceImpl implements UserReadService { @Override ...

Java注解

java注解常常用于自动化,简化代码开发成本,减少重复劳动,比如Spring框架使用了很多注解(如@Resource, @Service,@Component等),让组件化可以非常简单的实施,而且代码清晰简洁。 常用注解 标准注解 @Deprecated 添加到不鼓励使 ...

C++11:列表初始化

列表初始化的语法{ arg1, arg2, ... }非常直观,合理使用能简化代码以及增强可读性。 列表初始化的常用语法 直接列表初始化 语法 语义 T object { arg1, arg2, ... }; 对象构造 T { arg1, arg2, ... }; 临时对象构造 new T { arg1, arg2, ... } new构造对象 Class { T member { arg1, arg2, ... }; }; 成员直接初始化 Class::Class() : member{arg1, arg2, ...} {... 构造函数 ...

Java多线程

本文整理了下Java中常用的多线程相关的类型和使用方式。 线程类 Thread类型 public class Thread implements Runnable { public static native void sleep(long millis) throws InterruptedException; public Thread(Runnable target); public Thread(Runnable target, String name); public final void join() throws InterruptedException; } 例:继承Thread,覆盖Thread的run方法 class MyThread extends Thread { @Override public void run() { System.out.println("hello1"); } } MyThread mythd = new MyThread(); mythd.start(); Runnable ...

Java常用工具类

本文整理Java中常用的工具类,如StringUtils, Arrays, CollectionUtils等 StringUtils StringUtils是Apache Commons Lang3中的提供的操作String工具类。 maven引入 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.5</version> </dependency> 常用方法 StringUtils支持对nu ...

Java8 之Stream

本文整理下Java8引入的Stream流,能大大简化集合类的操作,同时引入了常用的filter, map, reduce等高阶函数的操作类型。 Stream有点类似C++库boost.Range的概念,是基于容器的迭代范围的一个视图,并能够给予视图做各 ...

Java序列化

Java对象的序列化主要有两种用途: 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 在网络上传送对象的字节序列。 序列化接口与API 在Java中,只要一个类实现了java.io.Serializable接口(没有方法),那么它就可以 ...

GN使用笔记

之前介绍过GYP,它是Google早期用来维护chromium项目的meta-build system,GN则是用来替代GYP的工具,目前chromium及相关的开源项目都迁移到基于GN来管理。并且GN是基于C++编写,效率上比基于pytho ...

Java8 之Lambda

本文整理下Java8引入的最重要的函数式编程的特征 — lambda表达式,能让代码更加简单易懂。 Java中lambda表达式的关键特征: 是一个带参数的代码块,一般用于代码块的延后执行 可以转化为函数接口 能访问作用域内的不可变变量(final va ...