2015년 8월 15일 토요일

라즈베리파이 와 youtube 라이브 스트리밍을 통한 CCTV 만들기

방학 프로젝트인데 8월 내내 놀러다니다 보니 개학이 1주일 앞으로 다가 왔습니다.

아들은 이미 무엇을 만들지 결정하고 제게 프로토타이핑 까지 준지 오래 되었는데요 ㅠㅠ
제가 게으른 탓에 아직 준비할게 많이 남았습니다.

[프로토 타입]
아들이 원한 건 닌자고 사무라이를 움직이고 집안 CCTV 를 확인할 수 있고, 에어컨/TV/실내등을 말로 켜고 끄는 동작을 하는 것입니다. 다행히 관련 기술은 정리가 다 되었는데, 저 서보모터로 이동하는건 무리가 있어서 '이동성'은 포기 할까 합니다. ㅠㅠ


아래는 원 재료가 되어 준 닌자고 사무라이 입니다.

일단 관련 기술 중에 CCTV 를 정리 해 볼까 합니다.

우선 youtube 에 로그인을 하여 라이브 방송 이벤트를 하나 만듭니다.


실시간 스트리밍에는 2가지가 있는데요,
'지금 스트리밍하기' 는 간편하지만 기본으로 무조건 공개가 됩니다. CCTV 는 Privacy 가 중요 하기 때문에 '이벤트' 방식으로 만들어 줍니다.

[새로운 이벤트 추가]
일정만들기를 누르면 아래와 같이 기본 카메라 설정을 할 수 있습니다.
저는 라즈베리 파이에서 보내는 맞춤 스트리밍을 사용하기 떄문에 '맞춤처리' 에서 '새 스트림'을 만들어 주었습니다.

[카메라 추가를 위한 처리 설정]

새 스트림의 이름을 정하고 라즈베리에서 1280x720 으로 전송할 때 무리 없이 동작 하기 때문에 
720p 전송률을 정해 줍니다.

[720p 전송률 설정]
모든 설정을 마치면 아래처럼 정보를 얻을 수 있습니다.
아래 내용중에 '스트림 이름' 을 복사해 두고 라즈베리 파이에서 사용하게 됩니다.
[스트림 이름 생성]

변경 내용을 저장하고 '라이브 관제실' 로 와서 확인을 하면 아래와 같이 '인코더에서 데이터가 수신되지 않습니다' 라는 에러를 볼 수 있습니다. 아직 라즈베리에서 데이터를 보내주지 않고 있기 때문이죠.

[데이터 수신전 에러 화면]

그럼 라즈베리 파이에서 전송을 시작해 보겠습니다.
위에서 복사 해 두었던 '스트림 이름'을 아래 굵은 글씨에 붙여 넣어 주고 실행 합니다.
$ raspivid -o - -t 0 -w 1280 -h 720 -fps 25 -b 4000000 -g 50 | ./ffmpeg -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f h264 -i - -vcodec copy -acodec aac -ab 128k -g 50 -strict experimental -f flv rtmp://a.rtmp.youtube.com/live2/xxxx-xxxx.xxx-xxxx-xxxx-xxxx
워 내용은 여기 를 참고 했습니다.

실행 결과는 이렇습니다.

[라즈베리 파이에서 영상 전송]

이렇게 전송을 시작하면 '라이브 관제실'에서 정상 동작을 확인 할 수 있습니다.
[정상 동작하는 스트리밍 이벤트]
여기까지 하면 youtube 에서 할 것은 거의 마무리 되었습니다.
미리보기 > 스트리밍 시작하기 버튼을 차례로 눌러 주면 아래 처럼 스트리밍이 시작되고 youtube app 을 통해 CCTV 를 볼 수 있습니다.

[실시간 방송 시작]
[라즈베리파이에서 전송하는 실시간 CCTV 캡쳐]

실제 영상과 스트리밍의 시간차가 20~30 초 정도 나지만 화면 끊김 없이 720p 영상이 말끔하게 확인 됩니다.

다음에는 '자비스' 의 도움을 받아 현재 온도를 얻어 오고 경우에 따라 , IR Transmitter 를 통한 에어컨/TV 컨트롤을 적을 계획입니다. 집에 있는 LG 에어컨과 삼성 TV 는 손쉽게 꼈다 켰다 잘 되는데, 아쉽게도 IR Transmitter 의 전달 거리가 1미터가 채 안되어서 '이동성을 포기한' 사무라이가 에어컨과 TV 를 오갈 수 없는 문제가 있어서 아직 고민 중에 있습니다.

이 고민이 좀 풀리면 정리 해 보도록 하겠습니다. ㅎㅎㅎ
아무래도 방학은 훌쩍 넘길것 같네요...

댓글 2개:

ᄀ찰깨빵 :

안녕하세요 라즈베리파이 공부를 하고있는 학생입니다 혹시 터미널을 이용하지않고
라즈베리파이 내에있는 python2 나 python3로 동작할 수 있는 방법이 있나요?

brian Park :

질문을 잘 이해 못했는데요.. python 도 터미널에서 실행해야 할텐데.. 마찬가지로 쉘 스크립트도 ui 로 실행할 수도 있을테구요