C# 当包含在另一个项目中时,Android视频解码和编码示例不起作用
下面我们将用Xamarin对Android上的视频进行转码。该项目成功地转码了视频(无音频)。但是,当我们将类复制到现有Xamarin项目并尝试使用它们时,OutputSurface.cs中的这段代码中会抛出自定义运行时异常(“帧等待超时”):C# 当包含在另一个项目中时,Android视频解码和编码示例不起作用,c#,android,video,xamarin,xamarin.android,C#,Android,Video,Xamarin,Xamarin.android,下面我们将用Xamarin对Android上的视频进行转码。该项目成功地转码了视频(无音频)。但是,当我们将类复制到现有Xamarin项目并尝试使用它们时,OutputSurface.cs中的这段代码中会抛出自定义运行时异常(“帧等待超时”): const int TIMEOUT_MS = 1000; System.Threading.Monitor.Enter(_frameSyncObject); while (!IsFrameAvailable) {
const int TIMEOUT_MS = 1000;
System.Threading.Monitor.Enter(_frameSyncObject);
while (!IsFrameAvailable)
{
try
{
// Wait for onFrameAvailable() to signal us. Use a timeout to avoid
// stalling the test if it doesn't arrive.
System.Threading.Monitor.Wait(_frameSyncObject, TIMEOUT_MS);
if (!IsFrameAvailable)
{
if (returnOnFailure)
{
return false;
}
// TODO: if "spurious wakeup", continue while loop
throw new RuntimeException("frame wait timed out");
}
}
catch (InterruptedException ie)
{
if (returnOnFailure)
{
return false;
}
// shouldn't happen
throw new RuntimeException(ie);
}
}
IsFrameAvailable = false;
System.Threading.Monitor.Exit(_frameSyncObject);
以下代码将IsFrameAvailable
设置为true,并将其设置为SurfaceTexture FrameAvailable事件:
private void FrameAvailable(object sender, SurfaceTexture.FrameAvailableEventArgs e)
{
System.Threading.Monitor.Enter(_frameSyncObject);
if (IsFrameAvailable)
{
throw new RuntimeException("mFrameAvailable already set, frame could be dropped");
}
IsFrameAvailable = true;
System.Threading.Monitor.PulseAll(_frameSyncObject);
System.Threading.Monitor.Exit(_frameSyncObject);
}
同样,当我们在同一设备上运行示例项目时,不会发生这种情况
同样,我们测试了一个。这包括非常类似的代码,但包括音频,这是一个Java项目。我们创建了一个绑定库,并在Xamarin项目中引用了它。它还抛出此自定义运行时异常
这似乎与线程或阻塞有关,但我们无法完全理解。为什么同一个代码线程可以在项目中正常运行,而另一个却不能
请让我知道,如果我可以包括任何其他信息来帮助