Alby's blog

世上没有巧合,只有巧合的假象。

0%

一、概述

FFmpeg 提供了一种以管道的方式对音视频进行滤镜操作的框架。其也内置了非常多的滤镜,如果这些滤镜还不能满足需求的话也可以自行开发。

本文主要梳理 FFmpeg 滤镜相关的一些基本概念和 API,为之后对具体内置滤镜的分析做准备。

阅读全文 »

一、概述


(图片来源:李超)

mediasoup 的服务端由两部分构成:
1、使用 C++ 编写的作为子进程的媒体层 (ICE, DTLS, RTP 等)。可执行文件在 LinuxmacOS 上为 mediasoup-worker,在 Windows 上为 mediasoup-worker.exe
2、使用 Javascript(Typescript) 编写的、基于 Node.js 的用于与 mediasoup-worker 进行通信的组件。因为官方或几乎所有第三方的 mediasoup 服务端都是使用的是 Node.js 来实现,所以官方提供一个中间层让开发者不直接和 mediassoup-workder 交互。

本文主要讨论如何使用 ASP.NET Core 替换 Javascript(Node.js) 的实现。


(备注:由于是在参考图基础上 PS 的,不太准确,有心情了再改吧。)

阅读全文 »

一、概述

无意翻到之前看《深入理解计算机系统》一书时对 2.2.4 节的关于“无符号数和有符号数互转公式的证明” 的手写笔记。比较简单,但也整理一下。

对大多数 C 语言的实现而言,处理同样字长的有符号数和无符号数之间相互转换的一般规则是:数值可能会改变,但是位模式不变。

阅读全文 »

一、概述

工作单元是”对象-关系”行为的一种模式。维护受业务事务影响的对象列表,并协调变化的写入和并发问题的解决。——《企业应用架构模式》

1、工作单元的作用

工作单元只是将所有修改状态保存下来,在适当的时候在同一数据库连接和事务处理上下文中一次性将对象的变更提交到数据中。额外的优点是既减少了数据库调用次数,又避免数据库长事务。

注意:同一个工作单元一般不要跨线程使用。

2、工作单元和仓储(Repository)模式

工作单元常与仓储(Repository)模式一起使用。因为多个 Repository 可能做出多处更改,如果在 Repository 中调用 DbContext.SaveChangesDbContext.SaveChangesAsync(如果使用 Entity Framework 的话),则产生了多个相互隔离开的事务。

备注:实际上 Entity Framewok 也实现了仓储模式(DbSet)和工作单元模式(DbContext)。

3、工作单元和依赖注入(拦截器)

直接使用工作单元也是可以的。配合依赖注入和拦截器能将工作单元的创建和完成提交的工作自动化,也就是说避免了手工创建工作单元和手工调用 Complete/Commit 。这种自动化使得应对复杂业务逻辑时不用过于关注业务无关的事务安全问题。

阅读全文 »

一、概述

AbpDI 容器是基于 Microsoft 的依赖注入扩展库(Microsoft.Extensions.DependencyInjection nuget包)开发的。因此,它的文档在 Abp 中也是有效的。
Abp 中可以使用 Autofac 替换内置 DI 容器的,以支持属性注入和动态代理(拦截器)。

备注:Abp 提供的服务自动注册功能用内置的 DI 容器也能实现。

阅读全文 »

一、概述

去年写过一篇《ASP.NET Core 授权的扩展:自定义 Authorize Attribute 和 IApplicationModelProvide》,由于在 ASP.NET Core 3 中,Microsoft.AspNetCore.Mvc.Internal 命名空间下的 AuthorizationApplicationModelProvider 类由 public 被改为了 internal,使得无法方便地将其从容器中 DI 容器中移除,所以不得不回到 IAuthorizationPolicyProvider 上来。

ASP.NET Core 提供了基于角色( Role )、声明( Chaim ) 和策略 ( Policy ) 等的授权方式。在实际应用中,可能采用部门( Department , 本文采用用户组 Group )、职位 ( 可继续沿用 Role )、权限( Permission )的方式进行授权。本文通过自定义 IAuthorizationPolicyProvider 进行扩展。

阅读全文 »

一、概述

Abp 本身是一个包含许多 nuget 包的模块化框架。它还提供了一个完整的基础架构来开发你自己的具有实体、服务、数据库集成、AP、UI 组件等等功能的应用程序模块。
每个模块都应该定义一个模块类。模块类指实现了 IAbpModule 接口的非抽象非泛型类。定义模块类的最简单方法是创建一个派生自 AbpModule 的类,AbpModule 是一个实现了 AbpModule 接口的抽象非泛型类。

阅读全文 »