저는 Raspberry Pi를 가지고 있고 여기에서 웹캠 비디오를 스트리밍하고 싶습니다. 내 Windows Mobile 휴대폰(또는 브라우저가 있는 다른 장치)과 호환되게 만들고 싶기 때문에 mjpeg 스트리밍이 불가능합니다. 사실 리눅스에서 스트리밍할 수 있는 형식을 찾을 수 없습니다. 내 Windows 컴퓨터에서는 WebcamXP를 사용하여 웹캠 비디오를 스트리밍했는데 훌륭하게 작동합니다. 소프트웨어는 jpeg를 폴더에 덤프하고 브라우저에는 해당 jpeg를 40ms마다 한 번씩 가져오는 간단한 js 스크립트가 있습니다. 이것은 "예쁜" 솔루션은 아니지만 내 Raspberry Pi에서 동일한 목표를 달성하고 싶습니다.
문제는 jpeg를 1fps 이상으로 폴더에 덤프할 수 있는 소프트웨어를 찾을 수 없다는 것입니다. 나는 mplayer와 vlc가 이것을 할 수 있다는 것을 알고 있지만 그들이 출력하는 이미지는 녹색이고 제대로 보이게 만드는 방법을 찾을 수 없습니다(며칠 동안 시도했습니다). 흥미롭게도 Motion 및 fswebcam은 아무런 구성 없이도 좋은 비디오를 출력하지만 JPEG 덤프를 충분히 빠르게 지원하지 않습니다. 초당 한 번만 스냅샷을 만들 수 있습니다.
mplayer/vlc에서 비디오를 수정하는 방법을 찾을 수 없다고 가정하면 이 문제를 해결하는 두 가지 방법이 있습니다. 1. 이미지를 올바르게 덤프하는 프로그램/유틸리티를 찾습니다. 2. 스트림을 모션에서 jpeg로 변환합니다.
서버를 설정하고 js 스크립트를 작성하는 것은 문제가 되지 않았습니다. 웹캠에서 폴더로 jpeg의 꾸준한 스트림을 가져와야 했습니다.
답변1
마침내 mplayer로 작업하게 되었습니다. mplayer의 색상과 채도 값이 잘못된 것으로 나타났습니다. 이유는 모르겠지만 다른 사람들도 이에 대해 불평하는 것을 보았습니다. 이것은 내가 사용한 명령입니다.
mplayer -really-quiet -tv driver=v4l2:height=320:width=240:quality=1:hue=35:saturation=-80:brightness=99:contrast=-88:fps=8:device=/dev/video0 tv:// -vo jpeg -saturation -50 -contrast -3 &
jpeg를 8fps로 폴더에 덤프하는데 이는 내 요구에 충분합니다.
이 스크립트 외에도 폴더에서 8초가 지난 이미지를 삭제하는 스크립트도 실행합니다. 이는 파이의 귀중한 리소스이므로 CPU 사용량을 낮게 유지하는 데 8초를 사용했습니다.
cd /home/pi/webcam_frames
while true; do
find . -not -newermt '-8 seconds' -delete
sleep 8;
done
최신 이미지에 대한 심볼릭 링크를 초당 10회 생성하는 스크립트도 있습니다.
cd /home/pi/public
sleep 2
rm -rf latest.jpg
while true; do
ln -s -f /home/pi/webcam_frames/`ls -rt /home/pi/webcam_frames | tail -n1` latest.jpg
sleep 0.1
done
이 기호 링크는 공용 디렉토리에 있으며 nodejs를 통해 브라우저에서 얻을 수 있습니다.
var express = require('express'),
app = express(),
port = 8888;
app.use(express.static('/home/pi/public'));
app.listen(port);
초당 몇 번씩 nodejs에서 심볼릭 링크 이미지를 가져오는 간단한 html+js 페이지가 있으므로 javascript를 처리할 수 있는 모든 장치에서 실행되는 5-8fps 비디오가 있습니다.
그것은 추악한 해결책이고 결과도 추악하지만 정확히 나에게 필요한 것입니다.