비디오를 웹캠으로 스트리밍하기 위한 가상 UVC 장치 생성

비디오를 웹캠으로 스트리밍하기 위한 가상 UVC 장치 생성

비디오 파일을 사용하고 스트리밍하여 실제 UVC 장치처럼 보이도록 하는 방법을 찾고 있습니다.

좀 조사해서 알아냈어요UVC 가젯하지만 이것이 내 요구 사항을 충족하는지 결정할 수 없습니다. 결국 수신기에 추가 소프트웨어를 설치하지 않고도 USB를 통해 다른 장치에서 비디오를 스트리밍할 수 있기를 원하기 때문에 UVC를 사용해야 합니다. 그러나 현재는 동일한 장치에서 실행되고 UVC 장치를 시뮬레이션하는 도구만 작동합니다.

이를 수행할 수 있는 도구가 있습니까?

답변1

USB는 비대칭입니다. USB 마스터(PC)와 USB 슬레이브(장치)가 있습니다. 이것이 바로 USB 커넥터에 마스터 장치용 A형과 슬레이브 장치용 B형의 두 가지 유형이 있는 이유입니다. 모든 곳에서 Type A 커넥터를 사용하는 하드웨어 설계자들에 의해 이러한 구분이 점점 모호해지고 있지만 USB OTG는 두 가지 요구 사항을 동시에 충족할 수 있습니다. .

Linux USB 가젯 장치는 USB 슬레이브 컨트롤러의 USB 장치를 나타내는 커널 모듈입니다. 장치를 나타내는 임베디드 Linux 시스템에 연결하려면 (슬레이브) 호스트 컨트롤러(HC)가 필요합니다. 이는 USB 컨트롤러 드라이버입니다. PC에는 하드웨어가 없습니다.

하지만 이를 수행하는 또 다른 커널 모듈이 있습니다.시뮬레이션USB 슬레이브 컨트롤러: 이 dummy_hcd모듈은 연결하려는 가젯에 대한 가상(슬레이브) 호스트 컨트롤러와 장치가 표시될 추가 USB 버스를 제공하는 가상(마스터) 호스트 컨트롤러를 제공합니다. 그것.

예:

# modprobe dummy_hcd
# lsusb
...
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
# modprobe g_serial
# lsusb
...
Bus 005 Device 002: ID 0525:a4a7 Netchip Technology, Inc. Linux-USB Serial Gadget (CDC ACM mode)
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

두 개의 새로운 장치 노드가 생성됩니다. 하나는 가젯 /dev/ttyGS0에서 , 다른 하나는 장치를 나타내는 자동 로딩 모듈에서 가져옵니다. 한 쪽에는 쓰고 다른 쪽에서는 읽어서 통신 여부를 테스트할 수 있습니다.g_serial/dev/ttyACM0cdc_serial

g_webcam소형 도구 UVC 드라이버 도 있습니다 . 위와 같은 새 /dev/video*장치 가 생성되고 /dev/ttyGS0비디오를 스트리밍할 수 있습니다.입력하다이 장치는 이 가젯을 사용합니다. 사용자 공간 프로그램이 수행하는 작업 은 다음과 같습니다 uvc-gadget. 정적 이미지를 가져오거나 기존의 다른 "실제" UVC 장치를 공급하고 새로 생성된 장치로 스트리밍하여 /dev/video*USB 장치 데이터에 실제 UVC 장치를 제공하고 출력되는지 확인할 수 있습니다. 장치를 사용하여 USB 호스트에 올바른 설치.

그러나 버스에서는 작동하지 않는 것 같습니다 dummy_hcd(방금 시도했습니다). 위와 같이,두번째 /dev/video*장치는 호스트 측의 USB 커널 모듈에 의해 생성되어야 합니다.사용웹캠. 그러나 그런 일은 일어나지 않았고, 오히려 USB 시스템이 짧은 시간 안에 너무 복잡해져서 더 이상 키보드와 마우스를 사용할 수 없게 되었습니다.

따라서 g_webcam뭔가 문제가 있거나 비디오 하위 시스템이 동일한 식별자를 사용하여 두 개의 장치를 생성하려고 시도하다가 중단되었거나 다른 문제가 있을 수 있습니다. 나는 모른다.

따라서 실제(슬레이브) 호스트 컨트롤러가 있는 실제 임베디드 시스템에서만 작동할 수 있습니다.

그렇습니다. 이 작업을 수행할 수 있는 도구가 있지만 안타깝게도 에뮬레이트된 장치를 동일한 컴퓨터(일반 PC)에 표시하려는 경우 에뮬레이션이 문제가 됩니다. 임베디드 시스템에서는 여전히 작동할 수 있습니다(에뮬레이트된 장치를 어디서 어떻게 사용하고 싶은지 밝히지 않았습니다).

관련 정보