라즈베리 파이/picam의 스트림으로 하드웨어 카메라를 에뮬레이션하려고 하시나요?

라즈베리 파이/picam의 스트림으로 하드웨어 카메라를 에뮬레이션하려고 하시나요?

라즈베리 파이와 파이 캠 v2가 Wi-Fi에 연결되어 있습니다. Wi-Fi를 통해 카메라 피드를 노트북으로 스트리밍한 다음 해당 스트림이 노트북의 하드웨어 카메라인 것처럼 보이도록 만들려고 합니다. 하드웨어 카메라가 필요한 다른 소프트웨어에 적용하기 위해 이 작업을 수행하고 싶습니다(이 소프트웨어는 다시 작성할 수 없으며 문제를 해결해야 합니다).

저는 노트북에서 우분투 18.04를 실행하고 있습니다. 내 연구에 따르면 이는 ffmpeg와 vfl2loopback의 조합을 사용하면 매우 가능합니다. 저는 카메라를 웹서버로 스트리밍하기 위해 이 라이브러리를 설치하는 것부터 시작했습니다.https://github.com/silvanmelchior/RPi_Cam_Web_Interface이것은 작동하며 브라우저에서 카메라 스트림에 액세스할 수 있습니다.http://10.0.0.47/http편의를 위해 사용자 이름/비밀번호 없이 설정했습니다. nmap 출력을 기준으로 카메라 포트는 80이라고 생각합니다.

이제 우분투 노트북에서 스트림을 리디렉션하려고 합니다. 내 연구와 실험에 따르면 이 명령은 내가 본 명령 중 가장 가까운 명령입니다.

ffmpeg -re -ihttp://10.0.0.47/html-map 0:v -f v4l2 /dev/video0

(또는 /html 대신 포트 80과 동일합니다. 이것이 중요한지 확실하지 않습니다): ffmpeg -re -ihttp://10.0.0.47:80-map 0:v -f v4l2 dev/video0

처음에는 작동하는 것처럼 보이지만 이후에는 다음과 같은 오류가 발생합니다.

http://10.0.0.47:80: 입력 처리 중 잘못된 데이터가 발견되었습니다.

인터넷 검색에 따르면 이는 rpi_cam_web 인터페이스에서 나오는 잘못된 종류의 스트림 때문일 수 있지만 이것이 사실인지, 그렇다면 수정 방법은 확실하지 않습니다. 또한 웹 서버에 액세스하는 페이지의 html 코드를 조사한 결과 파일 이름의 타임스탬프와 함께 지속적으로 변경되는 일련의 jpg를 보내는 것을 볼 수 있습니다. 어쩌면 이것이 문제일 수도 있지만, 다시 말하지만 확실하지 않습니다.

어떤 아이디어가 있나요? 도움을 주시면 감사하겠습니다.

편집: 좀 더 발전된 것처럼 보이는 다른 방법을 시도했지만 여전히 문제가 발생합니다.

(파이에서): raspivid -o - -t 0 -n -w 320 -h 240 -fps 30| cvlc -vvv 스트림:///dev/stdin --sout '#rtp{sdp=rtsp://:8000/}' :demux=h264

-->VLC 미디어 플레이어에서 성공적으로 볼 수 있는 스트림이 시작됩니다.

(그런 다음 호스트 시스템에서): gst-launch-1.0 -v rtspsrc location=rtsp://10.0.0.47:8000/ ! v4l2sink 장치=/dev/video4

/dev/video0, /dev/video1 등과 같은 다양한 장치를 사용해 보았습니다. 처음에는 작동하는 것처럼 보이지만 오류가 발생하는 video4를 제외하고는 모두 '"/dev/videoX"는 출력 장치가 아닙니다'를 생성합니다. 와 나가다:

오류: /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1 요소에서: 내부 데이터 스트림 오류입니다. 추가 디버그 정보: gstbasesrc.c(3072): gst_base_src_loop(): /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1: 스트리밍이 중지됨, 이유가 연결되지 않음(-1) 0:00:00 이후 실행이 종료됨.082360368

거기에서 무엇이 잘못될 수 있는지 아시나요?

다시 한 번 감사드립니다!

편집 2:

다음과 같은 일련의 명령을 사용하여 작업할 수 있습니다.

(pi에서): raspivid -o - -t 0 -n -w 320 -h 240 -fps 30| cvlc -vvv 스트림:///dev/stdin --sout '#rtp{sdp=rtsp://:8000/}' :demux=h264

(호스트 컴퓨터에서): ffmpeg -f h264 -i tcp://10.0.0.47:8000/ -f v4l2 -pix_fmt yuv420p /dev/video0

이로 인해 오류가 발생하지는 않지만 카메라 피드를 가져오려는 소프트웨어에서 스트림을 아직 로드할 수 없었기 때문에 제대로 작동하는지 100% 확신할 수 없습니다. 다음 웹사이트 도구를 사용하여 테스트해 보았습니다.

https://test.webrtc.org/

이 도구를 사용하면 "더미 비디오 장치 0x0000"을 선택할 수 있습니다. 하지만 "비디오 장치가 감지되지 않았습니다"라고 말하고 테스트에서 카메라를 찾지 못한 다음 동일한 더미 비디오가 표시됩니다. 이후 페이지를 다시 로드할 때 장치가 옵션으로 표시되지 않습니다. 그래서 스트림을 전달하는 방법에 문제가 있는 것 같아요.

답변1

이 웹사이트는 RPi를 OBS로 스트리밍하는 방법을 보여줍니다. https://www.instructables.com/Webcam-Over-WiFi-for-OBS/

그런 다음 OBS 가상 카메라를 사용하여 하드웨어 카메라를 시뮬레이션할 수 있습니다.

(저는 개인적으로 OBS Virtual Camera를 사용하지만 RPi에서는 사용해본 적이 없습니다.)

또는 다음을 시도해 볼 수도 있습니다. https://www.tomshardware.com/uk/how-to/use-raspberry-pi-as-pc-webcam

관련 정보