[英]Using canon sdk with .net on MacOS
我正在開發一個托管 signalR 集線器的 asp.net (.Net 5) 應用程序,以允許客戶端使用官方佳能 sdk 與佳能相機進行通信(例如拍照、捕獲視頻和直播)。 它在 Windows 上完美運行。 但是,在 MacOS 上調用 c++ 庫會導致死鎖,除非調用主線程。 我能找到的只是 mac sdk 不是線程安全的,所以它應該在任何其他線程中使用。
例如,此代碼有效:
class Program
{
static void Main(string[] args)
{
SdkWrapper.EdsInitializeSDK();
}
}
static class SdkWrapper
{
[DllImport("EDSDK")]
public static extern int EdsInitializeSDK();
}
但是無論是在另一個線程上運行還是在異步等待上下文中,該函數都不會因為死鎖而返回。
class Program
{
static async Task Main(string[] args)
{
await Task.Run(SdkWrapper.EdsInitializeSDK);
var thread = new Thread(() => SdkWrapper.EdsInitializeSDK());
thread.Start();
}
}
static class SdkWrapper
{
[DllImport("EDSDK")]
public static extern int EdsInitializeSDK();
}
因此,一種解決方法可能是在主線程中運行所有 sdk 函數調用(可能這是一個壞主意)。 有沒有辦法讓它與asp.net一起工作?
或者有人知道在 MacOS 上使用帶有 .net 的 canon sdk 的更好方法嗎?
Canon SDK 在 Windows 上也不是線程安全的,到目前為止您一定很幸運還沒有遇到問題。 Windows 和 macOS 的區別在於 SDK 能夠在任何 (STA-) 線程上工作,但在 macOS 上它強制運行在主線程上。 總的來說,佳能 SDK 確實不適合在 Web 應用程序中使用。
我的建議是讓相機代碼在不同的進程中運行,並讓網絡應用程序通過 IPC(例如套接字、TCP 等)與它通信。
或者,如果您的相機與相機控制 API (CCAPI) 配合使用,我建議您這樣做,因為您不需要使用 SDK 的困難,而只需向相機發送 HTTP 請求即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.