Pytanie:
Autostart Videostream bez logowania
Diego
2014-03-12 18:19:42 UTC
view on stackexchange narkive permalink

Próbuję automatycznie uruchomić skrypt, który uruchamia strumień wideo przez vlc na raspberry pi z kamerą raspi. Oto kod, który rozpoczyna strumień:

  raspivid -o - -t 0 -hf -w 640 -h 360 -fps 25 | cvlc -vvv stream: /// dev / stdin --sout '#rtp {sdp = rtsp: //: 8554}': demux = h264  

Próbowałem dodać skrypt do init.d, który działa, gdy dioda LED na kamerze miga, ale po chwili start wydaje się zatrzymywać skrypt. Próbowałem też dodać skrypt do rc.local i autologin i nawet nie mrugnął. Próbowałem też edytować /etc/bash.bashrc z następującym kodem:

  if [$ (tty) == / dev / tty1]; wtedy./scriptfi

Ale to też nie zadziałało. Jakieś sugestie? Skrypt działa dobrze sam z siebie.

Powinienem również dodać, że strumień stale wyświetla dane wyjściowe i nie można go ukryć ani zignorować.

Cześć! Możesz spróbować dodać „sleep X” na początku „skryptu” (gdzie „X” to rozsądna liczba sekund) i zmienić wiersz swojego kodu na „./script &„. Jednak nie testowałem tego, to w zasadzie tylko ślepy strzał.
Zapomniałem dodać, oczywiście użyj `init.d`, użycie` .bashrc` wydaje się po prostu niewłaściwe! Pomysł polegał po prostu na dodaniu długiego snu w procesie.
Niestety to nie zadziałało. Aparat nie miga ani nic.
Spróbuj uruchomić z ~ / .xinitrc
Spróbuj umieścić go w /etc/rc.local z & after.
@hendry Gdzie znajduje się plik .xinitrc? Nie mogę go znaleźć w / etc /.
@Fred umieszczając go w rc-local też nie działał: /
Czy to z czekiem tty1 czy bez? Jeśli z, spróbuj bez.
Wypróbowałem obie opcje i żadna z nich nie działała.
Aparat miga, a następnie przestaje. To tak, jakby skrypt został wykonany, ale zatrzymał się po jednej sekundzie. Może jest coś, co mogę dodać, aby „konsola” nie zatrzymywała skryptu?
@hendry plik xinitrc jest pobierany z "X Init", więc tylko wtedy, gdy X jest zainicjowany. Wątpię, czy Diego uruchamia X, kiedy się nie loguje.
@Diego: Hendry wspomniał o `~ / .xinitrc`. Chociaż nie jest to najlepszy plik dla twojego rozwiązania, odpowiedź na twoje pytanie jest tam: `~` w bash zawsze wskazuje na katalog domowy obecnych użytkowników. Więc kiedy jesteś zalogowany jako `pi` to` / home / pi`, gdy jako `root` jego` / root / `. więc ten plik to /home/pi/.xinitrc
Jeden odpowiedź:
Diego
2014-03-21 18:30:13 UTC
view on stackexchange narkive permalink

Znalazłem teraz dwa rozwiązania.

  1. Tworzenie skryptu, który uruchamia inny skrypt (to jest ten, którego w tej chwili używam)

Zrobiłem skrypt (check.sh), który przeszukuje listę procesów pod kątem "vlc" i jeśli otrzyma jakieś trafienie, zamknie skrypt. Jeśli nie ma uruchomionych procesów o nazwie „vlc”, wykonuje skrypt (video.sh), który uruchamia strumień. W crontab dodałem pierwszy skrypt (check.sh) do uruchomienia przy starcie:

  crontab -e @reboot /home/pi/check.sh  

Tak wygląda check.sh:

  #! / bin / bash pidof = 'pidof vlc' if [[-z $ pidof]] thenexit else / home / pi / video .sh fiexit  

A tak wygląda video.sh:

  raspivid -o - -t 0 -hf -w 640 -h 360 - fps 25 | cvlc -vvvstream: /// dev / stdin --sout '#rtp {sdp = rtsp: //: 8554}': demux = h264 OBS! To nie zadziała z ** sudo crontab -e **, ponieważ działa tylko vlc zwykły użytkownik (pi działa dobrze)  

2. Dodanie tylko linii wykonania do rc.local

Nie próbowałem tego, ale kolega dostał to do pracy z vlc na raspberry. W ten sposób wystarczy dodać jeden ciąg do rc.local z pauzą przed napisem, na przykład:

  (sleep 5; su - pi -c "raspivid -o - -t 0 -n -w 640 -h 480 -fps 15 | cvlc -vvv stream: /// dev / stdin --sout '#rtp {sdp = rtsp: //: 8554 /}': demux = h264 ") &  

Może być więcej sposobów, aby to zrobić, ale to właśnie odkryłem do tej pory.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...