一、概述
表达式树( Expression Tree
)以树形数据结构表示代码,其中每一个节点都是一种表达式。
本文通过 API 创建表达式树,以满足某些不方便根据 Lambda 表达式创建表达式树的情况。
通常我们会在 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
了,所以重新研究一次。