如何使用gstreamer在docker容器內運行服務以從IDS uEye攝像機獲取提要?

2020-02-13 docker docker-compose gstreamer init.d systemctl

我有一個使用gstreamer插件捕獲攝像頭輸入的docker容器。使用Bastler相機可以正常運行,但是現在我需要使用IDS uEye相機。為了能夠使用此相機,我需要運行ueyeusbdrc服務。 IDS文檔說,要啟動它,我可以運行sudo systemctl start ueyeusbdrcsudo /etc/init.d/ueyeusbdrc start 。問題是,當docker容器運行時,該服務未運行,並且出現初始化相機錯誤失敗 ,這與我運行gst-launch-1.0 -v idsueyesrc ! videoconvert ! autovideosink遇到的錯誤相同gst-launch-1.0 -v idsueyesrc ! videoconvert ! autovideosink和ueyeusbdrc服務未在我PC的容器外部運行。所以這告訴我問題是ueyeusbdrc服務未在容器內運行。

如何在Docker容器中運行ueyeusbdrc?我試圖在啟動應用程序的.sh腳本中運行/etc/init.d/ueyeusbdrc startENTRYPOINT ["<.sh file>"]使用ENTRYPOINT ["<.sh file>"]進行調用),但失敗。另外,如果我嘗試使用sudo,它會告訴我該命令不存在。如果我運行systemctl,它還會告訴我該命令不存在。順便說一句,我以privileged: true運行docker(至少那是在docker-compose.yml文件中設置的)。

我正在使用Ubuntu 18.04。

更新: 我將/ run / ueyed和/ var / run / ueyed映射到容器,並將錯誤從“ 無法初始化相機”更改為“ 無法初始化視頻捕獲”的錯誤 。可能是我可以在主機中運行守護程序,並且有一種方法可以將其掛接到容器。有什麼建議嗎?

Answers

終於成功了。我必須在docker命令中添加一些選項(在本例中,是在docker-compose yml文件中)。我的解決方案基於此處的設置: https : //github.com/chalmers-revere/opendlv-device-camera-ueye

將這些參數添加到--ipc=host --pid=host -v /var/run:/var/run命令可以解決此問題:-- --ipc=host --pid=host -v /var/run:/var/run 。使用這些選項,無需在容器內運行服務。

另一個關鍵部分是在Docker容器中安裝IDS軟件。可以通過下載,解壓縮並運行安裝程序來輕鬆完成此操作(上述git repo具有過時的版本,但是最新版本可以在IDS網頁上找到)。

另外,請確保IDS uEye攝像機的系統服務正在主機中運行( sudo systemctl start ueyeusbdrc )。

Related