一、概述
Abp
本身是一个包含许多 nuget
包的模块化框架。它还提供了一个完整的基础架构来开发你自己的具有实体、服务、数据库集成、AP、UI 组件等等功能的应用程序模块。
每个模块都应该定义一个模块类。模块类指实现了 IAbpModule
接口的非抽象非泛型类。定义模块类的最简单方法是创建一个派生自 AbpModule
的类,AbpModule 是一个实现了 AbpModule 接口的抽象非泛型类。
通常我们会在 Startup
类通过 void ConfigureServices(IServiceCollection services)
配置应用的服务。常见的形如 AddXXX
的方法,实际上调用的都是 IServiceCollection
或直接说是 ServiceCollection
的 AddSingleton
、AddTransient
和 AddScoped
等方法。调用ApplicationBuilder
的 RequestDelegate Build()
方法会调用 IServiceCollection
的扩展方法 BuildServiceProvider
会创建并返回一个 ServiceProvider
对象。
还会在 Startup
类通过 void Configure(IApplicationBuilder app, IHostingEnvironment env)
配置请求管道,在该方法内进行的主要操作是添加中间件。常见的形如 UseMiddleware
或 UseXXX
的方法,实际上调用的都是 IApplicationBuilder
或直接说是 ApplicationBuilder
的 IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware)
方法,Use
方法并不是马上将中间件配置入请求管道,而是将“实例化中间件的方式”保存到 ApplicationBuilder
内部一个列表的操作。调用ApplicationBuilder
的 RequestDelegate Build()
方法会实例化中间件并把各个中间件串联起来。
早在2015年8月初,FFmpeg
就已经开始逐步支持 macOS 和 iOS 平台的 VideoToolBox
,2017年7月低,FFmpeg 在 example 中新增了一个 hw_decode.c 用于演示对文件的硬解码。以前使用过其软编码(基于 x264
)和软解码,也单独使用 VideoToolBox 进行过硬编码和硬解码。但是距离上次使用 FFmpeg 后其 API 发生了一些改变,VideoToolBox 也支持 HEVC
了,所以重新研究一次。