Chcę nagrać wideo części mojego domu za pomocą kamery internetowej, podczas gdy jestem nieobecny przez kilka dni, aby upewnić się, że wszyscy burgery są sfotografowani, a zdjęcie przesłane na mój serwer, zanim jeszcze zdadzą sobie z tego sprawę.
Mam skonfigurowaną kamerę internetową do strumieniowego przesyłania materiału za pomocą mjpg_streamer. To działa i streaming OK.
Możliwe jest wzięcie przechwytywania ze strumienia, kiedy tylko chcesz o nazwie „FileName.jpg”:
wget http://127.0.0.1:8080/?action=snapshot -O FileName.jpg
Mam serwer Amazon Amazon z usługami Amazon Web Services i dostępem FTP za pomocą protokołu sFTP. Jestem połączony za pomocą wtyczki Firefox FireFTP, więc to działa. Chodzi o to, aby komputer działał z połączeniem na żywo.
Chciałbym napisać scenariusz robienia zdjęcia ze strumienia, co 1 minutę, a następnie przesłać zdjęcie na mój serwer za pośrednictwem połączenia FTP na żywo, a także usunąć oryginalny plik z mojego komputera, aby następny mógł zapisać O lub dodaj numer na końcu każdego pliku, a następnie prześlij go przez FTP. np. nazwa_pliku1.jpeg, nazwa pliku2.jpeg.
Pracowałem w Google od wielu godzin i chociaż jest mnóstwo wpisów na temat pisania skryptów przesyłania FTP, nie mogę znaleźć nic o stałym strumieniu przesyłania ... tzn. „Oglądaj ten folder, przesyłaj zawartość co minutę, a następnie minutę później prześlij dowolną nową treść ".
Chyba potrzebuję skryptu bash, który:
- przechowuj licznik, aby każdy nowo utworzony plik otrzymał inną nazwę
- Wyślij tę nazwę pliku do „wget http://127.0.0.1:8080/?action=snapshot -O nazwa_pliku XX .jpg” co 30 sekund lub 1 minutę
- Prześlij nazwę pliku XX .jpg na serwer FTP
Ale nie mam pojęcia, jak to zrobić! Czy ktoś może mnie pokierować? A może ktoś wie, jak zrobić FileZilla lub coś takiego (którego nie można obejrzeć w folderze AFAIK: https://forum.filezilla-project.org/viewtopic.php?t=41609 ?
źródło
Odpowiedzi:
Moją pierwszą wskazówką byłoby nazwać pliki na podstawie daty i godziny ich pobrania. W ten sposób nie będziesz musiał nigdzie przechowywać licznika, co byłoby trudne w skrypcie, który nie działa nieprzerwanie, ponieważ jego zmienne byłyby resetowane przy każdym wywołaniu. Możesz przechowywać zmienne w plikach, ale łatwiej jest, jeśli upewnisz się, że nazwy nie kolidują. Coś w stylu,
wget http://127.0.0.1:8080/?action=snapshot -O "Snapshot-$(date).jpg"
jeśli używasz Bash. (Przepraszam, jeśli składnia nie działa, nie jestem ekspertem od Bash i piszę to w telefonie).Jak już wspomniałeś, dostępnych jest kilka samouczków dotyczących skryptowania przesyłania FTP. Co najmniej jeden z nich powinien zawierać przykład, który przesyła pliki według wzorca, na przykład „Snapshot - *. Jpg”, w którym symbol wieloznaczny byłby zgodny ze znacznikiem czasu. Możesz też wskazać programowi FTP (np. Lftp lub ncftp, które mają pliki binarne przeznaczone do skryptów) przesłanie wszystkiego do określonego folderu. Następnie wyczyść folder, jeśli program się powiedzie. W ten sposób możesz uruchamiać skrypt tak często, jak chcesz, używając crona lub systemowego timera, i być na tyle elastycznym, aby zawsze próbował przesyłać pliki, których nie udało się później.
Istnieje również oprogramowanie zaprojektowane do samodzielnego wykonywania tego zadania i nie tylko. Jeden z takich programów, z którego sam korzystałem, jest po prostu nazywany „ruchem” i jest dostępny dla większości dystrybucji. Ma wbudowane tryby wyzwalania ruchu (nagrywanie i / lub robienie zdjęć) lub tryby ciągłe. Może być trochę obciążający procesor w systemach takich jak Raspberry-Pi, ale na pewno działa.
Jeśli chcesz nieco to przyspieszyć, być może uruchomisz wiele zdalnych / lokalnych kamer i przeniesiesz wykrywanie ruchu na mocniejszą maszynę centralną, spójrz na Zoneminder. Konfiguracja trwa dłużej i z mojego doświadczenia wynika, że ręcznie ustawiasz właściwe rozdzielczości na kanałach kamery, ale do pewnego stopnia można to zrobić.
źródło
Chciałbym użyć AWS S3 zamiast serwera FTP w EC2 i narzędzia AWS CLI do przesyłania plików. Jest to znacznie lżejsze rozwiązanie nie wymagające administracji systemem. S3 zapewnia znacznie bardziej trwałe przechowywanie niż woluminy dla EC2.
Pobieranie narzędzia: https://aws.amazon.com/cli/
Odpowiednie dokumenty: http://docs.aws.amazon.com/cli/latest/reference/s3/
Możesz utworzyć użytkownika, który będzie mógł przesyłać tylko do segmentu S3 za pomocą IAM (więc przestępcy nie mogą usunąć plików!)
Zrobiłbym to zadanie, tworząc skrypt bash (lub perl, node.js, ruby, powershell ?, ...), który wywołuje wget i wyświetla nazwę pliku z datetime. Zadzwoń
aws s3 cp ...
w pętli for, aby przesłać wszystkie pliki w folderze. W pętli, po każdym udanymaws s3 cp
wywołaniu każdego pliku, przenieś go do folderu archiwum, aby również zapisać lokalnie. Jeśli nie chcesz, aby lokalne archiwumaws s3 mv
automatycznie wyczyściło rzeczy, które zostały już przesłane.źródło
Panowie - wielkie dzięki wszystkim, którzy pomogli. Częściowo wszystkie twoje sugestie pomogły mi osiągnąć końcowy wynik. Dlatego udzieliłem wam wszystkich podziękowań za odpowiedzi, ale zamieściłem poniżej własną odpowiedź w nadziei, że będzie ona przydatna dla innych. Zdaję sobie sprawę, że generalnie nie jest to zrobione, ale w tym przypadku istnieje wiele obszarów, w których można znaleźć rozwiązanie, więc związałem to wszystko w jeden poniżej.
Zainstaluj usługi potrzebne do korzystania z AWS S3
Zarejestruj się w usłudze AWS S3 za pomocą własnego konta Amazon: https://aws.amazon.com/s3/
Zdefiniuj nowy klucz dostępu do swojego konta użytkownika poprzez „Klucze dostępu -> Utwórz nowy klucz dostępu” i pobierz plik CSV, gdy zostanie wyświetlony. Jeśli tego nie zrobisz, nie będziesz mógł korzystać z funkcji S3 wiersza polecenia: https://console.aws.amazon.com/iam/home?#security_credential
Otwórz plik ROOTKEY.CSV i skopiuj, a następnie wklej zawartą wartość AccessKeyID i wartość SecretKey, gdy pojawi się monit podczas uruchamiania programu „aws config”, który uruchamiasz z wiersza polecenia przed użyciem AWS w systemie Linux.
Sprawdź, czy możesz połączyć i przesłać plik z plikiem sample.txt:
> aws s3 mv ~/SourceFolder/sample.txt s3://NameOfYourAWSS3Bucket
/ AFolderYouHaveCreatedPobierz i zainstaluj mjpg_streamer zgodnie z instrukcjami kompilacji tutaj: https://github.com/jacksonliam/mjpg-streamer#building--installation Po zakończeniu przejdź do jego folderu
Uruchom streamer mjpg:
Sprawdź, czy działa, odwiedzając następujący link w przeglądarce:
Weź pojedynczy plik ze znacznikiem daty i godziny (i zapisz go w lokalnym katalogu, z którego jest wykonywany), używając:
Spowoduje to utworzenie pliku w podfolderze „www” folderu mjpeg_streamer o nazwie „output-16-09-01-22-35-30.jpg”, jeśli zostanie wykonany o godzinie 22:35 1 września 2016 r.
Utwórz nowy skrypt bash (na przykład MyScript.sh) i nadaj mu uprawnienia do wykonywania oraz skopiuj zawartość na dole. Po uruchomieniu utworzy JPEG ze znacznikiem czasu co 5 sekund, aż aktualna data stanie się określoną datą końcową. W takim przypadku zaczyna się w dniu A i kończy w dniu B. Zastąp własne daty.
Skopiuj to do skryptu, podstawiając odpowiednie ścieżki:
Sugestie dotyczące ulepszeń mile widziane.
Możesz również sprawdzić postęp przechowywania w AWS S3 za pomocą
Zostawiłem go na dwie godziny strzelania co 10 sekund i wygenerowało 74 Mb przesłanych plików. Więc ustalam, że będzie to 6,5 Gb na tydzień - mniej niż poziom cen dla usługi, w której zaczynają się koszty, które moim zdaniem wynoszą 8 Gb.
Dzięki jeszcze raz.
źródło