FSPlayer 基于 Apple EDR 机制实现 HDR 视频直接渲染
背景与演进 在本次优化之前,无论用户的显示设备是否支持 HDR,FSPlayer 均采用降级策略:通过 Tone Mapping(色调映射) 技术将 HDR 内容压缩到 SDR 范围后再输出。这导致即使用户拥有顶级的 HDR 显示器,看到的也是高亮区域被压缩、色彩丰富度受损的画面。 为了突破这一瓶颈,FSPlayer 近期重构了渲染管线,实现了 HDR 直接输出:利用 Apple 的 E...
背景与演进 在本次优化之前,无论用户的显示设备是否支持 HDR,FSPlayer 均采用降级策略:通过 Tone Mapping(色调映射) 技术将 HDR 内容压缩到 SDR 范围后再输出。这导致即使用户拥有顶级的 HDR 显示器,看到的也是高亮区域被压缩、色彩丰富度受损的画面。 为了突破这一瓶颈,FSPlayer 近期重构了渲染管线,实现了 HDR 直接输出:利用 Apple 的 E...
升级了 jenkins 后,slaver 使用的 jdk 需要跟着升级,于是从 https://github.com/adoptium/temurin25-binaries/releases 下载了 jdk 25 发行版。一切都搞定了,但让我好奇的是:Eclipse、Adoptium、Temurin 这三个名字到底是什么关系? 一句话概括三者关系 Eclipse 不仅是一个 java ...
AVIO 的设计极其精妙,通过 URLProtocol → URLContext → AVIOContext 三层抽象,把“各种协议”统一成“标准 IO 流”。它实现了一套抽象的字节流操作层,使得上层逻辑(如 MP4 解析器)无需关心底层是本地文件、内存缓存还是网络协议(RTMP/HTTP)。 总揽 在 FFmpeg 中,从输入 URL 到最终得到 AVIOContext,核心流程可以抽...
背景 今天来聊聊 avformat_open_input 打开耗时,卡住线程的问题。 阿里云盘字幕大于 5M 就需要走下载接口,并且速度很慢,体现到 FSPlayer 交互上就是切换字幕的时候卡住了,有声音但是画面不刷新,之前测试的字幕有本地的也有网络上的,都没发现卡住的问题。 FSPlayer 的外挂字幕流切换是在渲染视频画面的 vout 线程里调用的,其中就包括了执行 avform...
三者关系一句话总结 URLProtocol 定义行为 → URLContext 持有实例 → AVIOContext 对外提供统一 IO 接口 16.3 分层职责(非常关键) 🧩 1. URLProtocol —— “协议定义层” 👉 类似接口 / 虚函数表 typedef struct URLProtocol { const char *name; int ...
AVIOContext 在 FFmpeg里有作用举足轻重的地位,负责按字节读取和写入,今天不看写入只看读取。 AVIOContext 的创建 下图调用堆栈展示了 AVIOContext 的创建过程: 当调用 avformat_open_input 时,内部会调用 init_input 进行初始化,代码如下: int avformat_open_input(AVFormatCont...
Options: [defaults in brackets after descriptions] Help options: --help print this message --quiet Suppress showing informative output --list-decoders ...
复习下 Metal 的 NDC (Normalized Device Coordinates),正好介绍下 FSPlayer 实现保持宽高比和纹理去黑边的实现方式。 FSMetalRenderer 核心定义 这个方法,大概 4年前写的,有些忘了,需要回顾下了,先看逻辑: - (void)updateVertexIfNeed { if (!self.vertexChanged) ...
我这里有一个接近 4K 的图片,FSPlayer 只能展示其中的一小块,原因是解码后尺寸是 512x512,经过了解才知道HEIC 图片(尤其是 iOS 拍摄的)为了提高解码效率,通常不会直接存储为一张超大图,而是切分成多个 512x512 的 Tiles(切片)。所以 FSPlayer 只是解码并渲染了其中的一个分块而已。 FFmpeg 对 HEIC 的支持情况 早在 FFmpeg 4...
记录下为 opencode 配置 NVIDIA API key的全过程: 申请账号 申请NVIDIA 账号: http://build.nvidia.com ,先注册,然后点击右上角头像图标,在菜单中选择API keys 进入管理页面,点击 create API key 之后提示需要绑定手机号,+86的国内手机号也可绑定,只不过需要2-3次的重试才能成功。 配置 将下面的内容配置到 ...