我读过很多文章,描述人们如何使用 AVAssetReader 或 AVPlayerItemVideoOutput 从视频文件中获取视频帧作为原始像素数据,然后他们使用这些数据上传到 OpenGL 纹理。但是,这似乎创建了使用 CPU(而不是显卡)解码视频帧的不必要步骤,以及创建不必要的像素数据副本。
有没有办法让 AVFoundation 拥有视频播放过程的所有方面,但不知何故还提供对其创建的 OpenGL 纹理 ID 的访问,可以根据需要将其绘制到 OpenGL 上下文中?有没有人遇到过这样的事情?
换句话说,类似这样的伪代码:
初始化:
- 打开电影文件,提供 opengl 上下文;
- 获取opengl纹理ID;
每个opengl循环:
- 绘制纹理ID;