상황은 이렇습니다. /dev/video0
가상 머신 내에서 액세스하려는 VMware 서버에 비디오 장치가 있습니다 . 그러나 어떤 이유로든 장치를 가상 머신에 직접 연결할 수 없으므로 호스트 머신에 연결해야 합니다.
유닉스 철학에서는 모든 것이 실제로 파일일 뿐이므로 /dev
NFS, Samba, sshfs 또는 기타 프로토콜을 사용하여 두 호스트 간에 장치를 공유하여 한 서버의 Linux가 장비에 액세스할 수 있도록 할 수 있습니다.
답변1
아니요.
NFS 또는 기타 네트워크 파일 시스템을 통해 장치 파일을 내보낼 수 있습니다. 그러나 장치 파일의 의미는 해당 파일을 여는 컴퓨터에 따라 다릅니다. NFS를 통해 서버 시스템에서 클라이언트 시스템으로 내보내는 경우 /dev/video0
클라이언트 시스템은 "문자 장치 81:0"만 보고 이를 자체 비디오 캡처 장치로 해석합니다. 클라이언트 시스템에는 서버와 동일한 장치 번호를 할당할 필요도 없습니다. 예를 들어 OpenBSD 클라이언트는 다음을 볼 수 있습니다.의사 터미널 드라이버, 이것이 바로 OpenBSD에서 char 81:0을 의미하기 때문입니다.
당신이 요구하는 것은 좋을 것이지만 어려울 것입니다. 클라이언트의 모든 요청은 서버로 전달되어야 하며 그 반대의 경우도 마찬가지입니다. 개별 운전자는 특정 지원을 받아야 합니다. 예를 들어 일부 드라이버는 프로세스와 커널 간의 공유 메모리에 의존하며 이를 네트워크 전체에서 투명하게 지원하는 것은 많은 경우 어렵고 비용이 많이 듭니다. 비디오 캡처 드라이버가 실제로 공유 메모리를 사용하는지 여부는 알 수 없지만, 대량의 데이터를 비동기적으로 전송할 수 있다는 점을 고려하면 그럴 것으로 예상됩니다.
Linux에는 몇 가지 특정 지원이 있습니다.네트워크 블록 장치. 이들은 네트워크 파일 시스템에 의존하지 않습니다. 장치 파일은 클라이언트에만 존재하며 서버의 데몬은 실제 블록 장치를 에뮬레이션합니다. 실제 물리적 장치와 작업을 중계할 수 있지만 일반적으로 가져오기 및 가져오기를 읽습니다. 이미지 파일 작성).
비디오 캡처와 관련된 솔루션을 찾아야 합니다. 물리적 장치가 연결된 컴퓨터에서 데이터 집약적인 부분을 최대한 많이 실행해 보십시오. 또는 VM 내에서 물리적 장치에 대한 직접 액세스를 지원하는 VM 솔루션을 찾으세요(호스트/게스트 솔루션이 이를 지원하는지 여부는 모르겠습니다. 하이퍼바이저 기반 솔루션이 이를 지원할 가능성이 더 높습니다).
답변2
Gilles의 답변 외에도 파일을 ioctl하려는 의도가 아닌 한 이는 단지 스트림일 뿐입니다. 그러니까 손님한테서 도망치면
# mkfifo /dev/fakevideo0
# ssh host cat /dev/video0 > /dev/fakevideo0
/dev/fakevideo0은 버퍼 역할을 하므로 여기서 읽으면 카메라에서 스트림을 얻을 수 있습니다.
답변3
이것은 OP의 질문에 대한 답변은 아니지만 netevent라는 도구가 있습니다.https://github.com/Blub/netevent/dev/input/event*
이를 통해 시스템 간에 위치한 ioctl 장치를 공유할 수 있습니다 . 나는 그것을 직접 시도했고 그것은 나에게 효과적이었습니다.