작은 스마트폰에 컴퓨터의 화면을 띄우는 것을 목적으로 삽질을 했습니다. 사실 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 파일을 수정해야 하는데 수정된 파일을 올려놓겠습니다.

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은 병맛이라고 하니까요. 우선 라즈베리파이 내장 사운드카드를 죽이도록 하겠습니다.


http://www.instructables.com/id/Disable-the-Built-in-Sound-Card-of-Raspberry-Pi/step3/Test-that-sound-card-is-NOT-detected-by-ALSA-Nativ/

위의 내용에 의하면 

/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  &
ffplay -i rtsp://192.168.0.21:8082/


위의 내용을 터미널에 넣으면 실행이 완료됩니다. yadif 필터를 먹였으므로 RCA특유의 인터레이스 화면도 필터링됩니다.

,

으음...ghap님께서 동방을 갑자기 들고 오시는 바람에 근 10년만에 생각나서 동방 게임을 잠깐 굴려봤습니다. 간만에 보니 한글 패치도 엄청 굴러나왔더군요.http://blog.naver.com/PostList.nhn?blogId=chlehd0509 한글패치를 약 10년전에 시도했다가 망해서 때려친 기억이 있는데 새롭네요.


일단 본편인 슈팅은 왠만 하면 그냥 Wine1.6 버전으로도 잘 굴러갑니다. 그도 그럴 것이 딱히 복잡한 쉐이더를 쓴 것도 아니고 그냥 D3D 기본API를 이용한 정도라 그렇게 어렵지도 않습니다. D3D to OpenGL의 문제가 그렇게 많이 드러나지 않습니다. AA를 넣어도 될 정도입니다.(AA를 적용해야 할 정도인지는 둘째 칩시다.


보통 이쪽 계열(탄막슈팅) 입문작으로 추천되는 동방영야초. 그나마 쉬운 편이라 초보자(?)에게 추천된다.

물론 10년간 이 게임을 안 한 죄로 죽기 직전..(그래도 Hard다.)

 

본편은 Wine 실행에 어려움이 전혀 없으니 이야기는 이 정도로 하고 본편과 함께 열심히 했던 외전 격투게임인 비상천을 굴려 보기로 했으나...


오늘 리눅스에서 굴려볼 게임은 이거. 그런데 본인은 전작까지만 해보고 이걸 해 본 적이 없다.


비상천칙이 언제 나왔더군요. 일단 해보지 뭐 하면서 한글 패치를 적용했는데...

Wine 1.9.5에서 에러 납니다. 그것도 게임 중에 까만 화면에 진행 불가.


터미널에 뜬 문구는 다음과 같았습니다.

"FXLC is not support"

??? 이게 뭐지? 하면서 검색을 했더니 2016년 3월에 이에 관한 패치가 적용되었습니다. (https://www.winehq.org/pipermail/wine-devel/2016-March/112061.html)


그래서 최신 버전인 1.9.13에서 구동 시도 PlayOnLinux를 쓰면 이런 것은 어렵지도 않지요.

PlayOnLinux에서 Wine 버전관리 기능을 사용하고 Configure에서 버전을 선택하면 얼마든지 버전을 바꿀 수 있다.


흐음..일단 게임을 굴려봤습니다. 그런데...

텍스쳐가 깨지고 화면이 흐려집니다!

아니 다른 건 상관없는데 날씨 관련 효과가 나올 때 마다 화면이 흐리멍텅 해집니다. 날씨가 돌아오면 정상적으로 돌아오기도 하는데 문제의 FXLC가 동작 할 때마다 이 모양이 되는 듯 합니다. FXLC가 그냥 안 되게 막아버려야 하나?


아무래도 1.9버전은 개발 버전이라 문제가 있을 것이라고 판단. 1.8버전으로 회귀하고 아에 의심가는 D3D9_XX.dll로 나오는 라이브러리를 네이티브로 넣었습니다. 


PlayOnLinux에서 제공하는 것은 이거 밖에 없더군요.

d3dx9_29

d3dx9_35

d3dx9_36

d3dx9_40

d3dx9_42

d3dx9_43


PlayOnLinux의 삽질을 줄여주는 고마운 기능. 그런데 winetricks보다도 못 할 때가 많다.


그냥 다 설치했습니다.


그러고 실행하니...


으음...계속 쳐 맞는다. 역시 격투게임은 별로인가 나?


깨끗합니다. 역시 개발 버전에 의한 버그 문제였습니다. 다만 네트워크 플레이가 안 되는 것 같은데 알 게 뭔가요. 어차피 네트워크 하면 이기는게 거의 불가능하니(...)


일단 동방비상천칙도 잘 되네요. 10년전만 하더라도 실행조차 불가능 했던 것으로 기억하는데 Wine의 발전은 정말 눈부십니다.

,

저는 주력 OS를 우분투로 사용하고 있지만 당연히 Windows도 사용하고 있습니다. 몇몇 작업의 경우는 꼭 Windows가 필요하기도 하고 가끔 IE도 필요한 경우가 있어서 VirtualBox를 써서 가상으로 Windows를 이용하지요.


리눅스에서는 대부분 가상 머신 프로그램으로 VirtualBox를 사용하실 겁니다. VMware는 약간 배포판을 가리는 면이 있어서 간혹 에러가 나기도 하고 VirtualBox에 비해 메모리를 많이 먹는 편입니다. 대신 속도는 VMware가 이러나 저러나 훨씬 낫지요.


저는 VirtualBox를 쓸 때 설치 후에 어느정도 정리를 하고 스냅샷으로 일단 얼려둡니다. 이래야 나중에 가상머신이 병X이 되어도 그때의 스냅샷으로 돌아올 수 있으니까요. Windows내의 시스템 복원 기능이 있지만 가상머신에서는 쓰레기일 뿐입니다.


VirtualBox의 스냅샷 기능 이렇게 순차적으로 할 수도 있고 분기도 가능하다.

그런데 Windows란 녀석은 캐시 메모리를 많이 사용하는 편입니다. 2000시절에 추가된 기능이었던 Prefetch(Superfetch) 기능이 발전해서 사용자가 많이 사용하는 프로그램을 미리 메모리에 올려둔다던가 프로세스 우선순위를 자동으로 설정해 주는 등의 기능이 있습니다. 그래서 프로그램을 많이 설치하면 설치 할 수록 디스크의 공간을 예상 외로 많이 먹어버리고 메모리 사용량도 은근히 올라갑니다. 제가 스냅샷을 걸어두는 이유 중 하나가 바로 이것인데요. Windows의 Prefetch는 쓰면 쓸 수록 디스크에 각종 캐시 들을 쌓아둡니다. 프로그램의 각종 데이터나 라이브러리 등을 올려두는 것인데요. 문제는 이 기능이 일반적인 디스크에서 돌아갔다면 문제가 없었을 겁니다. 그런데 가상 머신은 가상 디스크 이미지를 만들고 이 안에 파일을 넣어두는 방식을 취합니다. 보통 디스크 이미지는 동적 할당 방식을 사용해서 200GB짜리 이미지를 만들어도 200GB를 사용하지 않습니다. 디스크의 내용이 변동 되었으면 변동 된 만큼을 그냥 추가합니다. 나중에는 썼다 지웠다를 반복하면서 200GB를 넘기기도 합니다. 이러면 정작 호스트인 우분투의 디스크 용량이 나중에는 당연히 부족해 집니다.


그래서 VirtualBox에서는 VBOXManage -compact 명령을 준비해 두었지만 완벽하지는 않습니다. 그냥 뱃속 편하게 고정 할당을 하는게 이 문제에서 벗어 날 수 있는 방법이지만 스냅샷을 걸 때마다 고정 할당량 X 스냅샷 갯수 만큼 먹어버리는 문제가 또 있습니다. (어쩌라고...)


솔직히 Prefetch는 굉장히 좋은 기능입니다. 이 기능 덕에 지금의 Windows10이 Windows7보다도 저 사양의 PC에서 더 쌩쌩하게 돌아갈 수 있는 것 입니다. 하지만 지금은 그냥 혹 덩어리 입니다. 문제아일 뿐입니다. 이것을 해결하는 가장 쉬운 방법으로 게스트 OS가 Win7이상이라면 SSD 옵션을 걸어두면 됩니다. (자동으로 Prefetch를 안 씁니다.)이러면 한방에 해결이 됩니다. 혹은 

http://www.technipages.com/windows-enable-disable-superfetch


여기에 나온 것처럼 Superfetch와 Prefetch를 꺼버리면 됩니다. 그러면 VirtualBox의 문제가 약간은 해결될 것입니다.



,