YOGYUI

라즈베리파이로 Apple HomeKit 카메라 만들기 (Homebridge) 본문

홈네트워크(IoT)/일반

라즈베리파이로 Apple HomeKit 카메라 만들기 (Homebridge)

요겨 2021. 8. 4. 17:54
반응형

 

라즈베리파이에 장착된 카메라를 애플 홈킷의 카메라 액세서리로 등록해서 집안을 실시간으로 모니터링하는 간단한 방법을 알아보자

 

구현 방안을 요약하면 다음과 같다

  • 라즈베리파이 + 카메라: ffmpeg의 ffserver로 카메라 영상을 스트리밍
  • Homebridge: ffmpeg 플러그인을 사용해 카메라 액세서리 등록
  • 아이폰/아이패드: Home 어플리케이션으로 카메라 영상 실시간 뷰

테스트에 사용한 하드웨어는 다음과 같다

Motherboard Raspberry Pi 4 Model B Rev 1.2
Kernel Linux 5.10.52-v7I+ (armv7I)
Operating System Raspbian GNU/Linux 10 (buster)
Camera Raspberry Pi Camera Module V2.1 (RPI 8MP Camera Board)


1. Raspberry Pi - open FFserver server

스트리밍을 하는 여러 방식 중에서 본 포스팅에서는 ffmpeg의 ffserver를 사용하도록 한다

ffmpeg 자체의 스트리밍 기법을 사용해도 되는데, 옛날 사람이라 그런지 ffserver가 익숙하다

(이유: 홈브릿지 ffmpeg 플러그인과 연동하기 쉽다)

 

ffserver는 ffmpeg 최신 빌드에는 포함되지 않기 때문에 Git revision 2ca65fc 를 클론해서 수동으로 빌드해줘야 한다 (자세한 방법은 링크 참고)

 

설치가 완료된 후에는 ffserver 구동 설정 config file을 만들어줘야 한다

기본 경로는 /etc/ffserver.conf이니 여기서도 동일 경로에 파일을 만들어주자 (nano 에디터 사용)

sudo nano /etc/ffserver.conf

다음과 같이 예시로 작성해보자 (ffserver 자세한 설정법은 다른 글에서 다루도록 한다)

HTTPPort 8090
HTTPBindAddress 0.0.0.0
MaxHTTPConnections 2000
maxClients 1000
MaxBandwidth 10000

<Feed feed.ffm>
  File /tmp/feed.ffm
  FileMaxSize 200M
</Feed>

<Stream test>
  Feed feed.ffm
  Format mpjpeg
  VideoFrameRate 30
  VideoSize 640x480
  VideoBufferSize 80000
  VideoBitRate 10000
  NoAudio
</Stream>

<Stream stat.html>
  Format status
</Stream>

<Redirect index.html>
  URL http://www.ffmpeg.org/
</Redirect>

0.0.0.0 ip 주소에 8090 포트로 서버를 바인딩해주고, 로컬의 /tmp/feed.ffm 임시파일을 생성한 뒤 연결된 Feed 객체로 들어오는 이미지를 'test' stream 객체가 실시간 스트리밍해주는 것이 핵심이다

 

파일 작성이 끝나면 저장한 뒤 터미널로 ffserver를 실행해주면 된다

ffserver -f /etc/ffserver.conf

ffserver 시작

 

2. Raspberry Pi - 카메라 영상 송출

카메라 모듈이 활성화되어 있는지 확인하자

(raspi-config로 해도 되고, OS의 GUI tool - Raspberry Pi Configuration을 사용해도 된다)

카메라 모듈 활성화

접근 가능한 디바이스(카메라) 목록을 확인해보자

Windows에서는 dshow로 list up 가능하지만, Linux에서는 video4linux2(v4l2)를 사용해야 한다

v4l2-ctl --list-devices

MMAL(Multi-Media Abstraction Layer)에 /dev/video0로 카메라가 할당되어 있는 것을 볼 수 있다

 

이제 FFmpeg로 서버에 카메라 영상을 스트리밍해보자

ffmpeg -i /dev/video0 -r 30 -s 640x480 http://localhost:8090/feed.ffm

앞서 ffserver config file에서 설정한 Feed 객체 feed.ffm으로 /dev/video0의 영상을 mpjpeg 포맷으로 인코딩해서 보낸다

정상적으로 진행된다면 ffmpeg로 다음과 같이 프레임 단위 영상 송출 로그를 확인할 수 있다

ffserver config에 설정한 feed 경로 /tmp/feed.ffm 파일이 생성된 것도 확인할 수 있다

영상이 제대로 나오는지 확인하기 위해 웹 브라우저(chromium)를 통해 stream 객체의 경로로 접속해보자

(http://localhost:8090/test)

포커스가 영... -_-

문제없이 설정되었다면 브라우저로 카메라 이미지가 실시간으로 스트리밍되는 것을 확인할 수 있다

 

3. 네트워크 공유기 설정

Homebridge 등 외부 어플리케이션에서 ffserver로 접근하기 위해 공유기의 포트포워드 설정을 해준다

ipTime 공유기 포트포워드 설정

라즈베리파이 보드 내부 TCP 포트 8090을 외부에서도 8090으로 접근할 수 있도록 설정

 

DDNS까지 설정해주면 외부에서 쉽게 접근할 수 있다

ipTime 공유기 DDNS 설정

 

다른 디바이스 (PC)에서 DDNS 주소 + 외부 포트로 이미지가 들어오는지 확인

외부 디바이스에서 스트리밍 확인

 

4. Homebridge - ffmpeg 플러그인 설치 및 액세서리 등록

Homebridge 플러그인 중 'Homebridge Camera FFmpeg'를 설치해준다

https://github.com/Sunoo/homebridge-camera-ffmpeg#readme

 

GitHub - Sunoo/homebridge-camera-ffmpeg: Homebridge Plugin Providing FFmpeg-based Camera Support

Homebridge Plugin Providing FFmpeg-based Camera Support - GitHub - Sunoo/homebridge-camera-ffmpeg: Homebridge Plugin Providing FFmpeg-based Camera Support

github.com

 

Homebridge Config의 platform에 다음과 같이 카메라 액세서리를 추가해준다

"platforms": [
        {
            "name": "Config",
            "port": 8581,
            "platform": "config"
        },
        {
            "name": "Camera FFmpeg",
            "platform": "Camera-ffmpeg",
            "cameras": [
                {
                    "name": "test",
                    "videoConfig": {
                        "source": "-i http://ddns주소.iptime.org:8090/test",
                        "maxStreams": 2,
                        "maxWidth": 640,
                        "maxHeight": 480,
                        "maxFPS": 30
                    }
                }
            ]
        }
    ]

액세서리 추가 후 homebridge를 재시작해주고 로그에서 카메라 디바이스가 제대로 등록되는지 확인

 

5. Apple Home 어플리케이션 확인

'test' 이름을 가진 카메라 디바이스가 추가된 것을 볼 수 있다

 

 

1초 정도 딜레이가 있다...ㅠ_ㅠ

검색해보니 ffmpeg 파라미터 설정이 필요한데, 다소 복잡해서 다음 기회에 파라미터 튜닝을 해보도록 한다

애초에 해상도가 640x480이라 유용하게 쓰기에는 애매하다

카메라 모듈 스펙

일단 홈브릿지를 사용한 홈킷 카메라 디바이스 등록은 성공!!

시간이 나면 다음 태스크들을 진행해볼까 생각중~

  • 스트리밍 딜레이 최소화
  • 이미지 해상도 향상 (1080p)
  • 스피커, 마이크 모듈 장착 후 음성 송수신 (진짜 CCTV처럼)
  • AI 엔진 추가 (Yolo같은 object detection) 및 객체 검출 시 스냅샷 저장 (진짜 CCTV처럼)
  • Auto Focus

(하나같이 단순한 작업들은 아니라 언제 할진 모르겠다 ㅎㅎ)

 

끝~!

 

[참고]

https://trac.ffmpeg.org/wiki/Capture/Webcam

http://www.jvcref.com/files/PI/documentation/html/

반응형