작은 스마트폰에 컴퓨터의 화면을 띄우는 것을 목적으로 삽질을 했습니다. 사실 VR용으로도 써 먹어보려고 한 것도 있습니다. VNC도 있고 많이 있지만 저는 여기서 한 걸음 더 나가 PC의 HDMI포트, 혹은 외부 모니터 단자를 사용하여 하드웨어 적으로 네트워크로 뿌리는 것을 목표로 했습니다. 다행히 VNC 수준의 절망적인 속도는 안 나오더군요.
그러기 전에 하드웨어 신호를 직접 네트워크로 뿌려야 하니 필수 하드웨어인 캡쳐보드가 무엇인지 알아야겠습니다. 캡쳐보드는 말 그대로 영상입력장치입니다. 비싼것은 100만원이 넘어가는데다 그나마 쓸만한 놈도 10만원 안팎합니다. PCI슬롯이 없는 노트북에서 사용하려면 Firewire나 USB를 써야 하는데 요새는 Firewire도 없지요. 그 USB방식 캡쳐보드 중 그중 제일 싸구려에 제일 만만하고 제일 여기저기 사용되는 물건이 Easycap(DC-60)입니다. 특징으로는 3만원도 안 되는 가격에 짝퉁이 좀 있어서 대략 4개 업체에서 같은 이름으로 팔고 있습니다.
STK
somagic
UTV007
eMpia
대략 알려진 것은 이렇습니다. 이중 제일 만만한 것이 STK칩셋을 사용한 제품이지만 문제는 어떤게 STK칩인지 모른다는 겁니다. 제일 리눅스에서 사용하기 고통스러운 제품은 somagic칩셋입니다. 다른 칩셋은 커널에 드라이버가 내장되어 금방 잡히지만 somagic은 Broadcom제품처럼 따로 펌웨어를 넣어줘야하는 문제가 있습니다.
저는 일단 국내에서 구하기 쉬운 쪽을 택하기 위해서 조금 신기해보이는 것은 다 파는 컴스마트에서 찾아봤습니다. 역시 있더군요. (하여간 여기는 제가 갖고 싶다고 생각들면 어느새 들여놓습니다. 신기한 회사입니다.)
헐 같은 이름의 물건이 3개다.
이중에서 가운데있는 물건이 eMpia칩셋입니다. 다른 것은 어떻냐고요? 다 Somagic입니다. 오른쪽의 것을 구입했다가 눈물 흘렸던 것은 비밀입니다.
Somagic만 피하면 일단 리눅스로 캡쳐하는 것은 어렵지 않습니다. 드라이버가 내장되어 있어서 별 문제가 없거든요. STK는 Lanstar란 업체에서 수입하는 것을 보이는데 구입해서 뜯어보지 않으면 모른다고 합니다. 그냥 참고하세요.
그럼 리눅스에서 캡쳐는 어떻게 할까요?
일단 제일 쉬운 방법은 http://easycap.blogspot.kr/p/easyview-n-cap.html 이곳에 있는 TVcap 스크립트를 사용하는 겁니다. 일단 실행만 하면 GUI로 옵션을 선택할 수 있어서 편리합니다. 특히 기능이 워낙 충실해서 쓸 곳이 많은 데 EasyCap 사용시 얼어붙어버리는 VLC의 버그를 회피 할 수 있어서 굉장히 유용한 스크립트 입니다. 그러나 단순 화면 재생도 VLC나 Mplayer가 설치되어 있어야 합니다. 그런데 이 중 하나라도 설치 안되어있는 시스템이 있던가요?
또 다른 것은 xawtv를 쓰는 것인데 아마도 제일 가벼운 영상캡쳐 프로그램이 아닐까 생각합니다. 역시 TV를 위해서 나온 것이지만 인터페이스만 익숙해지면 편리합니다. 모르겠으면 화면에 마우스 오른쪽 버튼을 눌러보세요. 하지만 이 프로그램은 재생과 녹화만 잘 됩니다.
그리고 마지막 녀석은...motion 입니다. 뭐냐고 하시는 분이 계실 것 같은데 motion은 라즈베리파이에서 카메라 스트리밍관련 내용을 보면 여기저기에서 쓰이는 것을 알 수 있습니다. 쉽게 말해 영상에서 움직임을 보기위해 만들어진 프로그램인데 웹으로 스트리밍하는 기능이 내장되어 있어서 이걸 써서 다른 플레이어와 연동되게 할 수 있습니다. 제가 이번에 이용할 것은 라즈베리파이와 연동을 해서 스마트폰에 뿌리기까지 하는 것이므로 이걸 쓸 겁니다.
1. 라즈베리파이에 Raspbian을 설치합니다. 라즈비안 설치는 https://www.raspberrypi.org/downloads/raspbian/ 여기서 다운로드 받아서 사용하시면 됩니다. 자세한 내용은 구글 검색하면 쏟아져 나오니 찾아보시면 됩니다. 이름만 보셔도 아시겠지만 데비안 기반입니다.
간단히 SDCARD에 라즈비안을 설치하는 방법은
SDCARD를 넣고 SDCARD의 주소를 확인한 다음 (Gparted를 쓰면 편합니다.)
sudo dd if="라즈비안이미지" of="SDCARD주소 ex) /dev/sdb" bs=4M
이렇게 하면 SDCARD에 라즈비안이 설치됩니다. 해당 SDCARD를 라즈베리파이에 넣으면 일단 라즈베리파이는 준비됩니다.
2. Raspbian 설치후 motion세팅
Raspbian도 데비안이니 명령어도 동일합니다. (SSH로 접속하면 더욱 편리합니다. 라즈비안은 기본적으로 SSH접속이 허용되어 있습니다. 로그온 이름은 pi 이고 password는 raspberry입니다. raspi-config에서 꼭 password를 바꾸세요)
sudo apt-get update
sudo apt-get install motion
끝입니다.
그리고 /etc/motion/motion.conf 파일을 수정해야 하는데 수정된 파일을 올려놓겠습니다.
여기서 장치 이름을 /dev/video1로 되어 있는 것을 /dev/video0로 바꿔주셔야 합니다.
3. Easycap 연결
Easycap을 라즈베리파이의 USB포트에 꽂습니다. 즉 라즈베리파이에 영상신호를 넣는 것입니다. 해당 영상은 어떤 것이든 상관 없지만 RCA(AV코드)이므로 여기에 맞게 쓰는 것이 좋습니다. 만약 HDMI를 사용한다면 HDMItoAV같은 장비를 써서 RCA로 넣어야 합니다. 만약 RCA가 너무 구리다고 생각하시면 S-Video를 쓰시면 조금 낫습니다. 화질 문제는 싸구려에게 많은 것을 바라면 안 됩니다. (RCA는 케이블 품질 특성을 많이 탑니다. 그래봐야 HDMI에 비해 현저히 구리지만)
EasyCap같은 캡처보드는 HDMI따위는 지원을 안하기에 이런 장비가 필요하다. 대만에서 만들어진 것으로 추정되는 HDMI to AV 제품 약 2만원 정도
자 이제 motion을 실행해 봅시다.
sudo motion(관리자 권한 필수 싫으면 /dev/video0를 666으로 세팅하면 됩니다.(sudo chmod 666 /dev/video0)
X없이 사용하시는 것이 좋습니다. 라즈베리파이의 IP주소를 알아내고 스마트폰용 웹브라우저에서 다음과 같이 넣어봅시다.
(안드로이드는 모바일 크롬 추천...아이폰은 사파리 추천)
http://라즈베리파이IP주소:8081
이러면 RCA로 입력된 영상이 뜹니다. 여기서 녹화를 하신다거나 추가 작업을 하신다면 라즈베리파이외의 같은 네트워크상에 있는 다른 PC에서 VLC를 쓰시면 편리합니다.
즉 포트만 열어주시면 아프X카 같은 사이트를 이용하지 않고 직접 웹에서 방송하는 것도 가능합니다. 대역폭 문제가 있지만 우리나라 통신망의 대역폭은 무지막지합니다. 별로 문제가 없습니다.
이렇게 VLC로 스트리밍 받거나 (화면은 Xbox One의 화면 HDMI밖에 안 나와서 하는 수 없이 컨버터를 구입했다.)
이렇게 크롬으로 직접 영상을 전송 받을 수도 있다. 만약 웹으로 받으려면 img src="라즈베리주소" 태그면 충분하다
문제는 사운드인데
cvlc -vvv alsa://plughw:0 --realrtsp-caching 20 --rtsp-caching 20 --sout '#transcode{acodec=s16l,samplerate=44100}:rtp{sdp=rtsp://:8082/,caching=10}'
이렇게 vlc-nox를 설치해서 소리를 전송하려고 하니 (rtsp://라즈베리IP주소:8082/ 를 audio 태그 혹은 VLC에서 재생 및 녹화)Easycap 자체가 워낙 구려서 추천하지 않는다고 합니다. 2300원짜리 USB 사운드 카드도 하나 구비해야 할 듯합니다.
사운드 부분 작업 중.
요놈을 추가로 더 구입했습니다. 7000원 더 들었네요.(2300원짜리는 단종되었다고 합니다...허)
USB 사운드카드 하나를 샀습니다. 어차피 EasyCap은 병맛이라고 하니까요. 우선 라즈베리파이 내장 사운드카드를 죽이도록 하겠습니다.
위의 내용에 의하면
/etc/modprobe.d/alsa-base.conf
여기에
blacklist snd_bcm2835 |
위의 내용이 들어가면 라즈베리파이 내장 사운드카드를 죽일 수 있게 됩니다.
그다음 aplay -l 명령을 썼을 때 BCM칩이 안 뜨면 죽은 겁니다. 물론 녹음 쪽이 더 중요하니까
arecord -l
위 명령을 써보시는 것이 더 좋습니다.
그 다음 RCA to Stereo 케이블을 사용해서 RCA사운드(빨간색-흰색)단자를 USB사운드카드의 마이크부분에 꽂습니다. 일단 작동은 되는 듯 합니다. 그런데 사운드가 미친듯이 깨집니다.
아마도 PC에서는 문제가 없었던 것을 봐서 라즈베리파이의 성능문제 혹은 설정 문제일 것입니다. http://www.raspyfi.com/raspberry-pi-usb-audio-fix/
여길 보니 설정 문제인듯 합니다.
우선 rpi-update를 설치한다.
sudo apt-get install rpi-update
그 다음
sudo rpi-update
를 실행 업데이트가 완료되면
sudo shutdown -r now
일단 이걸로 대충은 해결이 된다고 하는데 일단 해보고 나머지 포스트.
대충은 VLC에서 소리가 나오기는 하네요. 됩니다.
그러기 전에 라즈베리파이에 자동 실행이 되도록 약간 손을 좀 봐야 하는데요.
/etc/rc.local 파일을 손을 보겠습니다.
sudo nano /etc/rc.local
위 명령을 사용하면 rc.local 파일을 수정할 수 있게 되는데
exit 0 위에 다음과 같이 적습니다.
sudo motion & |
그런데 VLC는 root로는 실행이 되지 않습니다. 그러면 유저모드에서 실행을 하게 하면 됩니다.
sudo raspi-config에서 Boot Options으로 들어간 뒤에 Autologon을 설정합니다.
그리고
sudo nano ~/.profile
여기서 제일 아래에
cvlc -vvv alsa://plughw:0 --realrtsp-caching 10 --rtsp-caching 10 --sout '#transcode{acodec=s16l,samplerate=44100}:rtp{sdp=rtsp://:8082/,caching=10}' |
이걸 넣어주시면 자동으로 실행 됩니다.
이렇게 하면 8081포트로는 화면을 8082 포트로는 wav로 rtsp프로토콜 사운드를 전송하게 됩니다. 그럼 이걸 어떻게 모바일로 확인하는지 알려드리겠습니다.
영상은 이전과 같이 Chrome을 사용하고 사운드는 VLC를 사용하면 됩니다. 이는 PC도 마찬가지입니다. OS를 가리지 않는 두 프로그램을 사용하기 때문에 절대로 OS 호환 문제가 생기지 않습니다. 심지어 이거 iOS도 됩니다. 사파리+VLC를 쓰면 됩니다.
일단 안드로이드에서는 위와 같은 방법을 쓰고 우분투 PC에서는 ffplay를 쓰는것이 가장 나았습니다.
만약 라즈베리파이 IP가 192.168.0.21 이라면
ffplay -f mjpeg -probesize 32 -i http://192.168.0.21:8081 -vf yadif & |
위의 내용을 터미널에 넣으면 실행이 완료됩니다. yadif 필터를 먹였으므로 RCA특유의 인터레이스 화면도 필터링됩니다.
'기타 삽질' 카테고리의 다른 글
오래된 게임을 고화질 그래픽으로 WideScreen 패치 (0) | 2016.09.16 |
---|---|
아두이노 Pro Micro를 사용한 자작 스마트폰 조이패드 (23) | 2016.08.07 |
Anti-Adblock 인터넷 광고의 창과 방패의 게임 (4) | 2016.06.05 |
렌파이 안드로이드 TTS 가능할까? (Can Ren'Py support TTS on Android?) (0) | 2016.05.26 |
렌파이 6.99.10 Android SDK 24.4.1 호환 (1) | 2016.05.07 |