집 안 곳곳에 있는 Amcrest IP2M-841 카메라(RTSP 지원)에 막대한 투자를 했으며(9개 보유) Google 어시스턴트 명령에 따라 내 Lenovo 스마트 디스플레이 또는 Chromecast 비디오 장치로 비디오를 스트리밍하고 싶었습니다. 카메라와 함께 다른 앱을 사용하면서 카메라를 교체하고 싶지 않았고 잘 작동하고 있습니다. 그래서 며칠 동안 이 작업을 시도한 후 마침내 어떻게 하면 이 작업을 수행할 수 있는지 알아냈습니다. 많은 시행착오를 겪었고 모든 것이 작동하도록 올바른 도구 조합을 찾았기 때문에 성공을 공유해야겠다고 생각했습니다. 항상 100% 작동하며 주방에 Lenovo Smart Display가 있어 Amcrest Nursery 카메라의 비디오를 지속적으로 스트리밍합니다. 10초의 지연이 있다는 점에 유의하십시오. 이는 제 필요에 충분하고 또한
이 지침은 모든 RTSP 호환 카메라에 적용됩니다. 카메라의 RTSP 경로를 찾아 아래의 ffmpeg 변환에서 교체해야 합니다.
이 모든 것에서 가장 좋은 점은 Google Home 장치에 대한 명령으로 모든 유형의 로컬 오디오/비디오를 스트리밍하는 방법과 Google 어시스턴트에서 내 PC에서 명령을 실행하는 방법(예: 내 컴퓨터 잠금, 내 컴퓨터 음소거 등), HTTP 라이브 스트림(HLS) 생성 방법도 배웠습니다.
재료:
(개발자에게 찬사를 보냅니다. 방금 도구를 사용했습니다)
------------
일반 지침: (설정하고 도구에 익숙해지는 데 약 60분 소요)
PC에 Push2Run( https://www.push2run.com/ , 해당 설치 지침을 따르십시오)을 설치하고 작동하는지 확인하십시오. 간단히 말해서 Push2Run은 Google Home/Assistant에서 말하는 명령을 수신한 다음 PC에서 원하는 모든 것을 실행합니다(예: 계산기 열기). 이 응용 프로그램은 IFFTT를 통해 명령을 수신하는 데 사용되며 IFFTT는 명령을 PushBullet으로 보내고 Push2Run에서 수신합니다. 제 경우에는 두 개의 작업을 생성했습니다. 하나는 " 보육 카메라 시작 "을 수신하고 박쥐 파일을 여는 것(5단계에서) 과 필요에 따라 HLS 캐스팅 부분만 다시 시작하는 " 보육 카메라 보기 "라는 두 번째 작업입니다. .
ffmpeg( https://www.ffmpeg.org/download.html )를 설치합니다. 나중에 카메라의 RTSP 피드를 HLS 로 스트리밍 및 재스트리밍하도록 구성할 것 입니다.
NGINX( http://nginx.org/en/docs/windows.html )를 설치합니다. (nginx.conf) 파일을 구성하고 4단계에서 HLS 스트림을 제공할 루트 디렉터리를 지정해야 합니다. 다음은 샘플 구성 파일입니다.
server {
listen 80;
server_name localhost;
location / {
root C:/<pathToRootWebDirectoryWhereFFMPEGCreatedtheHLSfiletoStreamInStep5>;
index index.html index.htm;
autoindex on;
# Disable cache
add_header Cache-Control no-cache;
# CORS setup
add_header ‘Access-Control-Allow-Origin’ ‘*’ always;
add_header ‘Access-Control-Expose-Headers’ ‘Content-Length’;
# allow CORS preflight requests
if ($request_method = ‘OPTIONS’) {
add_header ‘Access-Control-Allow-Origin’ ‘*’;
add_header ‘Access-Control-Max-Age’ 1728000;
add_header ‘Content-Type’ ‘text/plain charset=UTF-8’;
add_header ‘Content-Length’ 0;
return 204;
}
}
4) CATT - Cast All The Things를 설치합니다( https://github.com/skorothakis/catt , 해당 설치 지침을 따르십시오). 이 도구는 COMMAND LINE을 통해 로컬 네트워크의 홈 장치로 원하는 모든 것을 전송하는 데 사용됩니다! 비디오, 사운드 파일 및 이 튜토리얼의 경우 HLS 스트림과 함께 작동합니다.
5) 이제 Push2Run(1단계)에서 Action으로 설정한 bat 파일을 구성해 보겠습니다. 기본적으로 bat 파일은 다음 작업을 수행합니다.
ffmpeg를 사용하여 RTSP에서 HLS로의 변환을 시작합니다(Amcrest 카메라가 없는 경우 카메라에서 가져오는 방법을 Google에서 검색해야 함).
HLS 스트림을 호스팅할 NGINX 웹 서버 시작
HLS 스트림을 스마트 디스플레이 또는 Chromecast 동영상 기기로 전송
다음은 Push2Run의 "어린이집 카메라 시작" 작업과 관련된 "StartNurseryCamera" bat 파일 명령(필요에 따라 사용자 지정)입니다.
(참고: bat 파일에서 작동하지 않는 // 아래의 주석을 제거해야 합니다.)
REM ## THIS IS HERE TO DESTROY PREVIOUSLY RUNNING STREAMS ##
taskkill /F /IM ffmpeg.exe
taskkill /F /IM nginx.exe
del nursery*.*
REM # START THE TOOLS ##
start StartNGINX.bat // this will open another bat file and start nginx
start /min ffmpeg -rtsp_transport tcp -i “rtsp://username:password@<IP_Camera>:80/cam/realmonitor?channel=1&subtype=0” -acodec copy -vcodec copy -hls_wrap 80 -flags -global_header nursery.m3u8 // this will create 81 temp files on the directory it’s run from; the file called nursery.m3u8 is the file that you link to for an HLS stream in the last command here.
ping 1.1.1.1 -n 10 // this is here to create a delay before casting
catt -d “<NameOfYourCastingDevice>” cast http://IP_Address_Where_NGINX_is_Running/nursery.m3u8
내 StartNGINX.bat 파일은 다음과 같습니다.
cd c:<pathToNginx>
start nginx.exe
또한 Push2Run에서 "Watch Nursery Camera" 액션과 관련된 "WatchNurseryCamera" bat 파일을 만들었습니다. Chromecast Video 또는 Lenovo Smart Display가 예측할 수 없는 방식으로 HLS 스트림에 대한 연결이 끊어지는 것을 확인했습니다. 그런 다음 언제든지 트리거하여 이 한 줄을 포함하는 bat 파일을 실행할 수 있습니다.
catt -d “<NameOfYourCastingDevice>” cast http://IP_Address_Where_NGINX_is_Running/nursery.m3u8
제 경우에는 이 카메라를 스트리밍하기 위한 전용 스마트 디스플레이가 있습니다. 그래서 동일한 bat 파일을 5분마다 실행하여 HLS 스트림을 다시 캐스팅하는 예약 작업을 영원히 반복했습니다.
팁: "유아실 카메라 시작" 또는 "유아실 카메라 보기" 명령을 더 쉽게 내릴 수 있도록 Google 어시스턴트 루틴도 만들었습니다. 1단계에서 본 것처럼 기술적으로는 "내 컴퓨터에 보육 카메라를 시작하라고 지시하십시오."라고 말해야 하지만 실제로는 더 짧은 명령 구문으로 루틴을 생성하여 전체 구문을 단축할 수 있습니다. 나는 당신에게 맞는 것을 찾기 위해 당신에게 맡길 것입니다.
이것이 누군가를 돕기를 바랍니다! 예이!