2012-02-28 104 views
1

我正在嘗試開發基於ViVi項目示例的「虛擬」視頻驅動程序。這是虛擬的,因爲它不與任何相機交互。它從用戶程序(C++)獲取視頻流,並且還用作顯示視頻流的其他用戶程序(Flash)的視頻驅動程序。Linux /內核模塊:兩個用戶程序可以使用驅動程序嗎?

所以,如果我有一個/ dev/video0。一個程序需要寫入幀,另一個程序需要讀取一個。那可能嗎?

我需要這個,因爲Flash無法識別此相機,所以我使用虛擬驅動程序作爲我的抓取器(使用真實驅動程序)和Flash的橋樑。

回答

2

使用了vloopback驅動程序,它完全符合你想要做的。但是,它不是標準內核的一部分。前段時間,我編寫了一個庫(dv4linux),它攔截libc讀/寫到/ dev/video來實現類似的功能。當前版本對於更新的firefox的malloc處理存在嚴重的問題,但是berlios.de可能很快就會失效。

+0

有趣,因爲有一個叉更新到內核3.0:https://github.com/umlaeute/v4l2loopback。我需要通過這個例子來看看。謝謝。 – Manel 2012-02-28 17:09:09

+0

我構建並加載了v4l2loopback作爲內核模塊,並且我無法從閃存中看到作爲相機(視頻設備)的v4l2loopback驅動器。我只是看到它與「lsmode」。否則,Flash確實會識別VIVI驅動程序......。 – Manel 2012-02-28 20:41:06

+0

它的工作原理!儘管1280x1024幀的顯示速度很慢。 640x480沒關係。 – Manel 2012-02-29 18:32:22

3

是的。

更一般地說,設備驅動程序可以允許儘可能多的同時打開它想要的。請參閱Linux Device Drivers瞭解更多信息。您可以使用filp->private_data來存儲與特定打開實例相關的數據。

爲了更加靈活,設備驅動程序甚至不限於/dev中的單個設備節點。

1

可以驅動兩個程序使用:

它通常可以,但它是取決於驅動程序當涉及到數據採集,你往往有一個過程,得到所有的數據,和其他進程只能有。對驅動程序功能有限的訪問,所以最終,API可以在多個進程中打開驅動程序,但最終全部取決於驅動程序。河被用作橋樑驅動程序:

不是。這是一個視頻捕獲仿真驅動程序,但此驅動程序中沒有「視頻輸出」或「視頻接收器」功能。您將不得不瞭解爲什麼閃光燈不適用於您的真實驅動程序,但可以使用虛擬驅動程序。 strace是你的朋友。

+0

據我所知,VIVI是通過使用Video4Linux2 API構建的,該API是Linux上大多數攝像頭驅動程序的基礎。所以我認爲如果我實現了爲Video4Linux2實體提供內容,我將能夠從Flash中顯示其圖像。 – Manel 2012-02-28 17:07:44

+0

@Manel:Vivi生成通過V4L2捕獲API提供的數據。驅動程序中沒有允許饋送數據的內容 – shodanex 2012-02-29 15:05:57

相關問題