C# Windows Phone 8 - 播放媒体时发生灾难性故障 E_Unexpected
C# Windows Phone 8 - Catastrophic Failure E_Unexpected when playing media
这让我发疯!当尝试在 windows phone 8 应用程序中播放声音或任何媒体元素时,我得到 "Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))"
这就是它所说的全部内容。如果我查看它显示的堆栈跟踪:在 Windows.UI.Xaml.Controls.MediaElement.Play()
示例代码为:
XAML:
MediaElement x:Name="sndClick" Source="Assets/Sounds/Click.wav" Volume="10" AutoPlay="False"
代码:
sndClick.play();
我正在尝试将 Windows 8 应用程序移植到 Windows Phone 8。Windows 8 应用程序与完全相同的代码完美配合。这一定是 Windows Phone 的一些问题。其他一切正常,只是在 phone 尝试播放媒体时崩溃。
并非所有播放声音的元素都会使程序崩溃,除非您单击它们几次。有些元素总是在第一次点击时崩溃。没有声音播放,即使程序没有崩溃,但它从不播放任何声音。
一次(而且只有一次)它播放了其中一个动画文件 (.wmv) 的前几帧,然后崩溃了。
这是一个奇怪的问题。所有代码都是从正在运行的 Windows 8 程序复制而来的,除媒体外一切正常。如果我注释掉 sound.play()'s 并禁用媒体播放器,程序就可以正常工作。
起初我认为可能是资源没有复制,所以我将 "Copy to Output Directory" 设置为 "Always Copy"。没有效果。
我试过模拟器,也试过物理硬件,一切都一样。
不是资源问题,模拟器和硬件系统资源绰绰有余,整个app只有22mb的大小。
这不是编解码器问题,动画是.wmv 文件,声音都是.wav。两者都应在任何 windows 设备上得到原生支持。
我四处搜索,看到其他人也有类似的问题,但我还没有看到任何解决方案。有谁知道是什么导致了这个问题以及如何解决它?非常感谢。
我对此很紧张。
谢谢,
-RW
好的,我解决了。
Windows Phone 8.1 在程序中有多个 MediaElement 时简直讨厌它......即使一次只播放一个也会抛出错误并且不会播放任何声音。
这很烦人。更烦人的是,XNA 似乎不能在 8.1 中工作(至少我不能让它工作)
解决方案是使用 SharpDX。
特别感谢post:Multiple audio stream in Universal App(Runtime API), XNA SoundEffect replacement
我删除了除一个 MediaElement 之外的所有 MediaElement,并从包安装程序中添加了已安装的 SharpDX 和 SharpDX Xaudio2。那么:
using SharpDX;
using SharpDX.XAudio2;
using SharpDX.IO;
using SharpDX.Multimedia;
private void PlaySound(string strPath)
{
XAudio2 xAudio = new XAudio2();
var masteringVoice = new MasteringVoice(xAudio);
var nativeFileStream = new NativeFileStream(strPath, NativeFileMode.Open, NativeFileAccess.Read, NativeFileShare.Read);
SoundStream stream = new SoundStream(nativeFileStream);
var waveFormat = stream.Format;
AudioBuffer buffer = new AudioBuffer
{
Stream = stream.ToDataStream(),
AudioBytes = (int)stream.Length,
Flags = BufferFlags.EndOfStream
};
var sourceVoice = new SourceVoice(xAudio, waveFormat, true);
sourceVoice.SubmitSourceBuffer(buffer, stream.DecodedPacketsInfo);
sourceVoice.Start();
}
然后就是:
PlaySound("Assets/Sounds/Click.wav");
效果很好!我现在需要制作动画的剩余 MediaElement 可以正常工作。我的头发甚至开始长回来(虽然它正在长回灰色)。
如果其他人遇到此问题,这就是解决方法。我希望它对某人有所帮助。
这让我发疯!当尝试在 windows phone 8 应用程序中播放声音或任何媒体元素时,我得到 "Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))"
这就是它所说的全部内容。如果我查看它显示的堆栈跟踪:在 Windows.UI.Xaml.Controls.MediaElement.Play()
示例代码为:
XAML:
MediaElement x:Name="sndClick" Source="Assets/Sounds/Click.wav" Volume="10" AutoPlay="False"
代码: sndClick.play();
我正在尝试将 Windows 8 应用程序移植到 Windows Phone 8。Windows 8 应用程序与完全相同的代码完美配合。这一定是 Windows Phone 的一些问题。其他一切正常,只是在 phone 尝试播放媒体时崩溃。
并非所有播放声音的元素都会使程序崩溃,除非您单击它们几次。有些元素总是在第一次点击时崩溃。没有声音播放,即使程序没有崩溃,但它从不播放任何声音。
一次(而且只有一次)它播放了其中一个动画文件 (.wmv) 的前几帧,然后崩溃了。
这是一个奇怪的问题。所有代码都是从正在运行的 Windows 8 程序复制而来的,除媒体外一切正常。如果我注释掉 sound.play()'s 并禁用媒体播放器,程序就可以正常工作。
起初我认为可能是资源没有复制,所以我将 "Copy to Output Directory" 设置为 "Always Copy"。没有效果。
我试过模拟器,也试过物理硬件,一切都一样。
不是资源问题,模拟器和硬件系统资源绰绰有余,整个app只有22mb的大小。
这不是编解码器问题,动画是.wmv 文件,声音都是.wav。两者都应在任何 windows 设备上得到原生支持。
我四处搜索,看到其他人也有类似的问题,但我还没有看到任何解决方案。有谁知道是什么导致了这个问题以及如何解决它?非常感谢。
我对此很紧张。
谢谢,
-RW
好的,我解决了。
Windows Phone 8.1 在程序中有多个 MediaElement 时简直讨厌它......即使一次只播放一个也会抛出错误并且不会播放任何声音。
这很烦人。更烦人的是,XNA 似乎不能在 8.1 中工作(至少我不能让它工作)
解决方案是使用 SharpDX。
特别感谢post:Multiple audio stream in Universal App(Runtime API), XNA SoundEffect replacement
我删除了除一个 MediaElement 之外的所有 MediaElement,并从包安装程序中添加了已安装的 SharpDX 和 SharpDX Xaudio2。那么:
using SharpDX;
using SharpDX.XAudio2;
using SharpDX.IO;
using SharpDX.Multimedia;
private void PlaySound(string strPath)
{
XAudio2 xAudio = new XAudio2();
var masteringVoice = new MasteringVoice(xAudio);
var nativeFileStream = new NativeFileStream(strPath, NativeFileMode.Open, NativeFileAccess.Read, NativeFileShare.Read);
SoundStream stream = new SoundStream(nativeFileStream);
var waveFormat = stream.Format;
AudioBuffer buffer = new AudioBuffer
{
Stream = stream.ToDataStream(),
AudioBytes = (int)stream.Length,
Flags = BufferFlags.EndOfStream
};
var sourceVoice = new SourceVoice(xAudio, waveFormat, true);
sourceVoice.SubmitSourceBuffer(buffer, stream.DecodedPacketsInfo);
sourceVoice.Start();
}
然后就是:
PlaySound("Assets/Sounds/Click.wav");
效果很好!我现在需要制作动画的剩余 MediaElement 可以正常工作。我的头发甚至开始长回来(虽然它正在长回灰色)。
如果其他人遇到此问题,这就是解决方法。我希望它对某人有所帮助。