使用C#和.NET 2.0从mp4中逐帧获取数据

本文关键字:获取 数据 mp4 NET 使用 | 更新日期: 2023-09-27 18:23:47

我目前正在使用Unity 3D进行开发,但我的背景是苹果开发。在iOS/OSX开发中,我可以使用AVFoundation加载mp4,并在它以BGRA格式播放时从中逐帧获取数据。

我想知道这对.NET来说是什么等价物(Unity使用.NET 2.0)?

我知道可以从unity调用Objective-C++文件中的函数,但我需要一种在任何平台上实现这一点的方法,而不仅仅是iOS。

使用C#和.NET 2.0从mp4中逐帧获取数据

AFAIK在Unity中没有内置的方法访问移动设备上的视频帧数据。在移动设备上播放Unity中的视频是令人悲伤的。他们提供的只是开箱即用的功能,基本上只适用于全屏视频,比如剪辑场景。

如果你想做更复杂的事情,比如将视频管道传输到纹理,你有两个选择:

  • 移动电影纹理
  • 简易电影纹理

注意:资产商店上还有更多可用的,但这是我们使用的两个

最佳选择

简易电影纹理

我们在VR应用程序中使用Easy Movie Texture(Gear VR和Cardboard)。在那里,我们在S6上解码高达4k的视频。

对于立体视频,我们使用插件附带的组件VideoCopyTexture,它将视频中的纹理数据复制到材质中(以避免重复解码和渲染)。它引用了返回Unity Texture2D的MediaPlayerCtrl.GetVideoTexture(),因此您应该可以访问所需的所有数据

不是很好的选择,但我们有点使用它,所以我想我无论如何都会提到它

移动电影纹理

Mobile Movie Texture仅适用于ogg编码的视频我不认为它能让你访问原始帧数据,我会邀请你直接联系开发人员或查看文档

但这可能是"黑客入侵"。你可以使用一个渲染纹理,一个单独的相机,在上面播放视频的情况下观察平面/四边形。然后获取该纹理的位图数据。这并不理想,但应该奏效。

长话短说,我使用类似的渲染到纹理机制将视频数据管道传输到Unity中的Scaleform,没有看到任何性能损失。移动电影纹理并不是最快的开始,在我们的情况下,甚至在一些设备上的软件中解码。但它在任何地方都有效。所以我们只在小视频中使用它。

干杯,

J。