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

时间:2015-11-22 12:55:23

标签: c# unity3d mp4

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

我想知道.NET的相当于什么(Unity使用.NET 2.0)?

我知道可以在统一的Objective-C ++文件中调用函数,但我需要一种方法在任何平台上执行此操作,而不仅仅是iOS。

1 个答案:

答案 0 :(得分:1)

AFAIK没有内置方法可以访问Unity中的移动上的视频帧数据。在移动设备上使用Unity播放视频真是太可悲了。他们提供的所有内容都是this,基本上只适用于剪辑场景等全屏视频。

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

注意:资产商店有更多可用资源,但这些是我们使用的两种资源。

最佳选择?

简易电影纹理

我们为我们的VR应用程序(Gear VR& Cardboard)使用Easy Movie Texture。我们在S6上解码了多达4k的视频。

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

不是那么好的选择,但是我们有点使用它,所以我想我还是会提到它......

移动电影纹理

移动电影纹理仅适用于ogg编码视频。 我认为它不会让您访问原始框架数据,我会邀请您直接联系开发人员或查看文档。

但这可能是“黑客入侵”。您可以使用渲染纹理,一个单独的摄像头,可以在其上播放视频时查看平面/四边形。然后抓取纹理的位图数据。这不是理想的,但应该做到这一点。

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

干杯,

学家