2017-12-18 7 views
0

Warum hallo da! Erstplakat, Langzeitleser.Systemdienst (Python-Schleife -> ffmpeg-Stream)

Diese Frage ist ein bisschen schwierig für mich, als ich noch ein Anfänger/Zwischen Benutzer von raspbian (Debian Stretch) bin und Python im Allgemeinen, aber hier geht:

Ich bin aktuell laufenden einen Strom mit ffmpeg durch icecast2 durch eine Python Schnipsel (Fig1). Ich habe einen systemd Service geschaffen, sagten zu laufen Python Skript beim Booten (Fig2) und ein benutzerdefiniertes Ziel verwenden (Fig3) sicherzustellen, dass es lädt einmal jeder zweiter Dienst geladen wird, vor allem für icecast2.

Ich habe mehrere Tests durchgeführt, und der Stream funktioniert einwandfrei, wenn er entweder aus dem Python-Code gestartet wird oder wenn ich den damit verbundenen Dienst neu starte.

Mein Problem ist, dass der Dienst bei einem (Neu-) Booten des Systems etwa 15 Sekunden lang läuft, dann stirbt der Stream. Ich habe so viel über Python und systemd gelesen, aber ich kann nicht für das Leben von mir herauszufinden, wo das Problem liegt. Ich habe versucht, meine Python Code, die Ladeeinheit Reihenfolge und alles, was ich online gefunden, die helfen könnte, aber nichts gefunden.

Fig1 (dxstream.py)

import sys 
import time 
import subprocess 

def start(): 
    return subprocess.Popen(r’ffpmeg -re -f alsa -ac2 -i hw:1,0 -acodec mp3 -ab 320k -f mp3 icecast://[email protected]:8000/stream', shell=True) 

testProcess = start() 

while True: 

    res = testProcess.poll() 
    if res is not None: 
     testProcess = start() 
    time.sleep(1) 

Fig2 (dxstream.service)

[Unit] 
Description=ffmpeg stream starter 
After=multi-user.target 
[Service] 
Type=idle 
Execstart=/usr/bin/python /usr/local/bin/dxstream.py 
Restart=on-failure 

[Install] 
WantedBy=custom.target 

Fig3 (custom.target)

[Unit] 
Description=Custom Target 
Requires=multi-user.target 
After=multi-user.target 
AllowIsolate=yes 

Wenn mir jemand einen allgemeinen Hinweis auf eine Lösung geben könnte, wäre ich unendlich dankbar!

Vielen Dank.

Antwort

0

Ich habe Berichte für den ffmpeg-Stream auf ON gesetzt, sowie verfolgen den Startvorgang der Einheit und es scheint, es war eine Verbindung zu IceCast vorzeitig erstellen, während IceCast noch initialisiert wurde. Ich habe dem Skript selbst für den ersten Start eine Verzögerung von 30 Sekunden hinzugefügt, und es funktioniert nun ordnungsgemäß.

Dieses Thema schließen!

Verwandte Themen