일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 홈네트워크
- 애플
- Apple
- 공모주
- esp32
- raspberry pi
- ConnectedHomeIP
- Home Assistant
- 해외주식
- Bestin
- MQTT
- cluster
- RS-485
- 힐스테이트 광교산
- 월패드
- Python
- 오블완
- 매터
- 코스피
- 배당
- homebridge
- 국내주식
- 파이썬
- Espressif
- 미국주식
- 티스토리챌린지
- SK텔레콤
- matter
- 나스닥
- 현대통신
- Today
- Total
YOGYUI
라즈베리파이로 Apple HomeKit 카메라 만들기 (Homebridge) 본문
라즈베리파이에 장착된 카메라를 애플 홈킷의 카메라 액세서리로 등록해서 집안을 실시간으로 모니터링하는 간단한 방법을 알아보자
구현 방안을 요약하면 다음과 같다
- 라즈베리파이 + 카메라: 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
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로 접근하기 위해 공유기의 포트포워드 설정을 해준다
라즈베리파이 보드 내부 TCP 포트 8090을 외부에서도 8090으로 접근할 수 있도록 설정
DDNS까지 설정해주면 외부에서 쉽게 접근할 수 있다
다른 디바이스 (PC)에서 DDNS 주소 + 외부 포트로 이미지가 들어오는지 확인
4. Homebridge - ffmpeg 플러그인 설치 및 액세서리 등록
Homebridge 플러그인 중 'Homebridge Camera FFmpeg'를 설치해준다
https://github.com/Sunoo/homebridge-camera-ffmpeg#readme
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
(하나같이 단순한 작업들은 아니라 언제 할진 모르겠다 ㅎㅎ)
끝~!
[참고]
'홈네트워크(IoT) > 일반' 카테고리의 다른 글
라즈베리파이 - Home Assistant 컨테이너 설치하기 (0) | 2022.02.18 |
---|---|
라즈베리파이 - Home Assistant OS 설치하기 (0) | 2022.02.17 |
Apple 홈킷 - 외부 대기오염(Air-quality) 센서 추가하기 (0) | 2022.01.14 |
Homebridge - HTTP 액세서리 MQTT로 Migration (0) | 2021.01.18 |
Apple 홈킷 - Weather Station 추가하기 (0) | 2021.01.04 |