我想在我的应用程序中显示视频纹理,视频文件由用户提供。
Texture2d
有一个FromFile
方法,但Video
没有。
有什么想法吗? (我只需要PC支持)
感谢。
答案 0 :(得分:4)
您可以尝试使用XNA 3.1中添加的视频API以及创建者网站上的winform content loading sample。该示例显示了如何允许用户选择内容文件,并让系统将其编译为.xnb,然后在运行时将其加载回内存。
答案 1 :(得分:2)
正如Aphid所说,你可以修改winform content loading sample。
要让它接受WMV,你需要像这样修改:
将VideoImporters添加到ContentBuilder.cs中的assemblies数组:
static string[] pipelineAssemblies =
{
"Microsoft.Xna.Framework.Content.Pipeline.FBXImporter" + xnaVersion,
"Microsoft.Xna.Framework.Content.Pipeline.XImporter" + xnaVersion,
"Microsoft.Xna.Framework.Content.Pipeline.TextureImporter" + xnaVersion,
"Microsoft.Xna.Framework.Content.Pipeline.EffectImporter" + xnaVersion,
"Microsoft.Xna.Framework.Content.Pipeline.VideoImporters" + xnaVersion
};
然后在MainForm.cs中更改
contentBuilder.Add(fileName, "Model", null , "ModelProcessor");
到
contentBuilder.Add(fileName, "Video", "WmvImporter" , "VideoProcessor");
然后,您必须使用Playing a Video on a Surface example
中描述的方法播放视频此方法仅在使用3.1版本的内容加载示例时才会出错;在XNA 4中,正如我所描述的那样throws a Pinvoke error。我已经发布到XNA论坛,希望找到解决这个问题的方法。
编辑:我从XNA Framework Dev收到以下关于pinvoke异常的回复:您可以放心地忽略此警告。 默认情况下,此MDA处于打开状态 VS2010表示潜在的性能 针对没有的pinvokes的问题 声明的显式调用约定。 以前默认关闭 VS2010这就是为什么你没有看到它 在3.1。我们发现了一点 在GS4游戏中为时已晚 离开,但基本上没有问题 功能。你应该 只有你这样才打 开发/调试您的自定义 处理器。这是可以理解的 烦人,你可以把它关掉 进入Debug-> Exceptions-> Managed 调试 Assistants-> PInvokeStackImbalance。我们 将使这个消失为下一个 释放。
答案 2 :(得分:1)
遗憾的是,这不起作用......他们的API要求通过内容管道处理视频。
我没有更新它,因为视频API是由XNA团队发布的,但你可以查看我写的这个开源项目,Scurvy.Media(http://scurvymedia.codeplex.com/)。它也是一个内容管道,但也许您可以通过.FromFile类型方法修改它。
如果您有任何疑问,请随时通过codeplex与我联系。 : - )答案 3 :(得分:1)
John U.您可以使用十六进制编辑器打开XNB文件,您将看到格式。相应视频文件的名称在那里,您可以使用您需要的相应文件名覆盖它。这就是我为我的项目所做的。正在研究一种自己编写二进制文件的方法。
答案 4 :(得分:0)
你也可以试试XNA DirectShow视频播放器:
http://xnadsplayer.codeplex.com/
我从未使用它,所以不确定它的效果如何,但它是你的另一种选择。
答案 5 :(得分:0)
嗯,我花了一段时间,但我解决了这个问题。
由于您需要安装GameStudio,因此无法选择内容管道
我最终对XNA内容构建器进行了逆向工程,以弄清楚如何制作
我自己的XNB文件。事实证明,对于WMV文件,XNB是一个简单的二进制描述符
现在我只为运行时找到的任何WMV创建一个XNB,将其推送到Content文件夹中
它工作正常。