iOS4:如何使用视频文件作为 OpenGL 纹理?

发布于 2024-10-31 17:09:30 字数 234 浏览 1 评论 0原文

我正在尝试将视频文件的内容(暂时不包含音频)显示到 OpenGL 中的 UV 映射 3D 对象上。我已经在 OpenGL 中做了相当多的工作,但不知道从哪里开始处理视频文件,而且大多数示例似乎都是从相机获取视频帧,这不是我想要的。

目前我觉得如果我可以将视频的各个帧作为 CGImageRef 来设置,所以我想知道如何做到这一点?也许还有更好的方法来做到这一点?我应该从哪里开始?在 iOS 上播放视频最直接的文件格式是什么? .mov?

I'm trying to display the contents of a video file (let's just say without the audio for now) onto a UV mapped 3D object in OpenGL. I've done a fair bit in OpenGL but have no idea where to begin in video file handling, and most of the examples out there seems to be for getting video frames from cameras, which is not what I'm after.

At the moment I feel if I can get individual frames of the video as CGImageRef I'd be set, so I'm wondering how to do this? Perhaps there are even be better ways to do this? Where should I start and what's the most straight forward file format for video playback on iOS? .mov?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

埖埖迣鎅 2024-11-07 17:09:30

抱歉;我在 iPhone 上打字,所以我会简单介绍一下。

使用视频的 URL 创建 AVURLAsset - 如果您愿意,可以是本地文件 URL。 QuickTime 可以做的任何事情都可以,因此 H.264 中的 MOV 或 M4V 可能是最好的来源。

查询资源中 AVMediaTypeVideo 类型的轨道。除非您的源视频具有类似的多个摄像机角度,否则您应该只获得一个,因此只需采用 objectAtIndex:0 就可以为您提供所需的 AVAssetTrack。

使用它来创建 AVAssetReaderTrackOutput。也许您想指定 kCVPixelFormatType_32BGRA。

使用 asset 创建一个 AVAssetReader ;将资产读取器跟踪输出附加为输出。并调用startReading。

此后,您可以在轨道输出上调用 copyNextSampleBuffer 来获取新的 CMSampleBuffer,使您处于与从相机获取输入相同的位置。因此,您可以锁定它以获取像素内容,并通过 Apple 的 BGRA 扩展将它们推送到 OpenGL。

Apologies; typing on an iPhone so I'll be a little brief.

Create an AVURLAsset with the URL of your video - which can be a local file URL if you like. Anything QuickTime can do is fine, so MOV or M4V in H.264 is probably the best source.

Query the asset for tracks of type AVMediaTypeVideo. You should get just one unless your source video has multiple camera angles of something like that, so just taking objectAtIndex:0 should give you the AVAssetTrack you want.

Use that to create an AVAssetReaderTrackOutput. Probably you want to specify kCVPixelFormatType_32BGRA.

Create an AVAssetReader using the asset; attach the asset reader track output as an output. And call startReading.

Henceforth you can call copyNextSampleBuffer on the track output to get new CMSampleBuffers, putting you in the same position as if you were taking input from the camera. So you can lock that to get at pixel contents and push those to OpenGL via Apple's BGRA extension.

动听の歌 2024-11-07 17:09:30

您可能必须使用播放器图层并将其内容展平到位图上下文中。请参阅 AVPlayerLayer 的文档。但性能可能会很差。

You're probably going to have to use a player layer and flatten its contents into a bitmap context. See the documentation for AVPlayerLayer. The performance might be very poor though.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文