Hello, 各位 iT 邦幫忙 的粉絲們大家好~~~
在本系列文因為工作上的產品應用需求,進而探索到很多層面的點滴事。
透過每篇 EP 的分享把這些點滴整理,看起來或許像是個獨立的小品抒發文、也或許是一系列技術研究文!?
總之,就當作的隨手雜記文吧!
本篇是 莫名其妙就跟世界等級的 OpenSource 專案攪和了!? 系列文的 EP24。
確定了一件事情,不要抱持著鴕鳥心態,該面對的事就好好面對吧!
不過,雖然記憶體問題沒能解決。
但也因為經過 EP22、EP23 的調整,這個 GstreamerPlayer 的專案也已煥然一新,能跟上 .NET 與 Avalonia UI 的新腳步。
首先,回頭看一下 EP21 切換成 Gstreamer 的 MSVC 版本時所引發的 Exception:
 ---> System.TypeInitializationException: The type initializer for 'GLib.GType' threw an exception.
 ---> System.DllNotFoundException: GObject: libgobject-2.0-0.dll, libgobject-2.0.so.0, libgobject-2.0.0.dylib, gobject-2.dll
 ...
再透過 Windows 搜尋一下 "libgobject-2.0-0.dll"。
咦?這個 dll 怎會在 mingw 版本的安裝路徑底下?

按照 Windows 系統環境變數 Path 的設定,現在會呼叫的應該要是 msvc 版本的 DLLs 才對啊!

所以,這套 gstreamer-netcore 要執行 GStreamer 時想要去執行 MinGW 的 DLLs ,但 Windows 目前 GStreamer 就已經是切換過去 MSVC 的版本,回應的都是 MSVC 版本的 DLLs ,所以拋出 DllNotFoundException 也就不意外了。
在 EP15 就已經有事先提過的,也就是原本 gstreamer-netcore 的作者 vladkol 在 README 就有提醒的事情:
It doesn't work with MSVC build...
而這問題源自於,在先前 EP14 就有先提到,在 Gstreamer 官網的 Download 頁面有特別標註的 Note 的其中一點:

(取自 gstreamer 官網 Download)
欸...對!
所以,繞了一圈就是得回來面對這個問題。
GStreamer 的 MSVC 版本,其 DLLs 的檔案名稱都已經換了,所以在 binding 的定義上就要使用正確的 DLLs 檔名。