HResult 0x80072EE7 的错误异常是什么意思?哪里可以看?
具体来说,在调用 MediaFoundationReader.Read 时,使用 NAudio 库时会发生错误。下面是我的代码。
private void PlaceLinksIntoBuffer()
{
Uri baseUri = new Uri(InputPath);
while (!IsStopped)
{
mediaSegmentUris.TryPeek(out IMediaSegment mediaSegment);
if (mediaSegment == null) continue;
int mediaSegmentApproximateDuration = Convert.ToInt32(Math.Ceiling(mediaSegment.Duration));
if (IsBufferNearlyFull(mediaSegmentApproximateDuration))
{
Thread.Sleep(500);
}
else
{
mediaSegmentUris.TryDequeue(out mediaSegment);
Uri resourceUri = new Uri(baseUri, mediaSegment.Uri);
MediaFoundationReader mediaFoundationReader;
try
{
mediaFoundationReader =
new MediaFoundationReader(resourceUri.AbsoluteUri);
readUris.Enqueue(mediaSegment.Uri);
}
catch (Exception e)
{
brokenUris.Enqueue(mediaSegment.Uri);
continue;
}
byte[] buffer = new byte [mediaFoundationReader.WaveFormat.AverageBytesPerSecond *
mediaSegmentApproximateDuration * 2];
int readBytes = mediaFoundationReader.Read(buffer, 0,
mediaFoundationReader.WaveFormat.AverageBytesPerSecond * mediaSegmentApproximateDuration * 2);
if (bufferedWaveProvider == null)
{
bufferedWaveProvider = new BufferedWaveProvider(mediaFoundationReader.WaveFormat)
{
BufferDuration = TimeSpan.FromSeconds(mediaSegmentApproximateDuration * 5)
};
}
bufferedWaveProvider.AddSamples(buffer, 0, readBytes);
mediaFoundationReader.Dispose();
}
}
}
当然,在文档中。但是,在这种情况下,解码错误代码的过程有点不重要,因为这不是来自 COM 的“真实”HRESULT(这就是为什么 C# 中的 Exception.Message 也不会为它显示有意义的消息的原因如 _com_error:: C++ 中的 ErrorMessage )。
您必须从HRESULT 结构开始。它可以分为3个部分:
位 0-4:信息标志。在这种情况下,S=1,这意味着一个错误,不检查其他标志。
位 5-15:错误类型。我们有 7 = FACILITY_WIN32,即 这是一个 HRESULT 压缩的 Win32 错误代码。
位 16-31:错误代码。 我们有十进制的 0x2EE7 = 12007。
我们在WinInet API 错误列表中找到代码的解码:
所以该错误与域名解析有关。当尝试访问由 URL 提供的流时,NAudio 在内部使用 WinInet 下载数据。WinInet 无法解析服务器名称并返回此错误。