IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Demarrer/arreter omxplayer via python (CTRL C) ?


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 11
    Points : 3
    Points
    3
    Par défaut Demarrer/arreter omxplayer via python (CTRL C) ?
    Bonjour,

    j'utilise ceci pour afficher la video d'une camera lorsque j'appuie sur un bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # fonction afficher video
    def camera_on():
            subprocess.call(['omxplayer --avdict rtsp_transport:tcp --live "rtsp://admin:admin@192.168.0.212:554/cam/realmonitor?channel=1&subtype=0"'], shell=True)
    .....
    if (button_press_timer > une_seconde) :
        camera_on()
    ....
    Quand je tape en commande terminal la video de ma camera s'affiche bien :

    omxplayer --avdict rtsp_transport:tcp --live "rtsp://admin:admin@192.168.0.212:554/cam/realmonitor?channel=1&subtype=0

    J'appuie sur CTRL C pour stopper la video.

    Par contre, avec python, je ne sais pas comment fermer la video de la camera afficher à l'écran.

    Une idée ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par mat46007 Voir le message
    J'appuie sur CTRL C pour stopper la video.

    Par contre, avec python, je ne sais pas comment fermer la video de la camera afficher à l'écran.
    Il faut terminer le sous-process i.e. lui expédier un signal semblable à celui associé au ctrl-C.
    Ce qui veut dire ne pas utiliser subprocess.call - puisqu'alors on est bloqué en attendant que le sous-process se termine - mais subprocess.Popen qui va retourner un objet auquel on pourra appliquer .terminate() à la demande.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    p = subprocess.Popen(['omxplayer ...')
    time.sleep(10) # çà attend 10 secondes
    p.terminate()
    p.wait()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Bonjour wiztricks,
    Merci pour ton aide,

    voila le code que j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    #!/usr/bin/env python2.7
     
    from time import sleep
    import subprocess
    import RPi.GPIO as GPIO
    import os
    import signal
     
    # On choisit le GPIO 17 (pin ?) pour notre bouton
    CHANNEL = 17
     
    # On definit nos durees
    une_seconde = 1
    quattre_secondes = 4
     
    # on met RPi.GPIO en mode notation BCM
    GPIO.setmode(GPIO.BCM)
     
    # on initialise le GPIO 17 en mode entree
    GPIO.setup(CHANNEL, GPIO.IN, pull_up_down=GPIO.PUD_UP)
     
    # notre fonction de gestion du bouton
    def system_button(CHANNEL):
            # cette variable servira a stocker le temps de pression
            button_press_timer = 0
     
    while True:
                            if (GPIO.input(CHANNEL) == False) : # le bouton a ete presse...
                                    button_press_timer += 0.2 # ... on enregistre le temps que cela dure
     
                            else: # le bouton a ete relache, on compte combien de temps cela a dure
     
                                    if (button_press_timer > une_seconde) :
                                            print "1 seconde : ", button_press_timer
                                            p = subprocess.Popen(['omxplayer --avdict rtsp_transport:tcp --live "rtsp://franco:franco@192.168.0.212:554/cam/realmonitor?cha$
                                            time.sleep(10) # çà attend 10 secondes
                                            p.terminate()
                                            p.wait()
     
     
                                    button_press_timer = 0
                            # on attend 0.2 secondes avant la boucle suivante afin de reduire la charge sur le CPU
                            sleep(0.2)
    et j'ai l'erreur :
    pi@raspberrypi:~ $ sudo python test4.py
    File "test4.py", line 69
    SyntaxError: Non-ASCII character '\xc3' in file test4.py on line 69, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

    cela a été ok quand j'ai mis ceci tout au debut :
    # coding: utf-8

    Ensuite quand j'ai appuié sur le bouton, voici l'erreur :

    1 seconde : 3.0
    Traceback (most recent call last):
    File "test4.py", line 69, in system_button
    p = subprocess.Popen(['omxplayer --avdict rtsp_transport:tcp --live "rtsp://franco:franco@192.168.0.212:554/cam/realmonitor?channel=1&subtype=0"'])
    File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
    File "/usr/lib/python2.7/subprocess.py", line 1335, in _execute_child
    raise child_exception
    OSError: [Errno 2] No such file or directory

    Une idée?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par mat46007 Voir le message
    et j'ai l'erreur :
    pi@raspberrypi:~ $ sudo python test4.py
    File "test4.py", line 69
    SyntaxError: Non-ASCII character '\xc3' in file test4.py on line 69, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

    qui est la ligne avec time.sleep(10) et j'ai essayé aussi sleep(10) mais c'est pareil ??
    C'est parce que vous avez des caractères accentués dans les commentaires.
    Si vous n'avez pas la patience de lire le PEP mentionné dans le message d'erreur, ne pas utiliser de caractères accentués fonctionne.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    cela a été ok quand j'ai mis ceci tout au debut :
    # coding: utf-8

    Ensuite quand j'ai appuié sur le bouton, voici l'erreur :

    1 seconde : 3.0
    Traceback (most recent call last):
    File "test4.py", line 69, in system_button
    p = subprocess.Popen(['omxplayer --avdict rtsp_transport:tcp --live "rtsp://franco:franco@192.168.0.212:554/cam/realmonitor?channel=1&subtype=0"'])
    File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
    File "/usr/lib/python2.7/subprocess.py", line 1335, in _execute_child
    raise child_exception
    OSError: [Errno 2] No such file or directory

    Une idée?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par mat46007 Voir le message
    OSError: [Errno 2] No such file or directory
    C'est parce que vous avez oublié de recopier shell=True...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Ok je viens de reessayer, une erreur est apparue sur le time.
    Donc j'ai inscrit sleep(10) au lieu de time.sleep(10) et je n'ai plus d'erreur.
    Par contre ma video s'affiche après l'appui sur le bouton mais après 10 secondes rien ne se passe, la video reste affichée.
    J'ai du faire CTRL C au clavier pour fermer la video.
    Encore une idée ?

    Et encore merci de votre aide

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par mat46007 Voir le message
    J'ai du faire CTRL C au clavier pour fermer la video.
    Encore une idée ?
    Vérifiez d'abord (en ajoutant des "print") que le p.terminate() et le p.wait() ont bien été exécutés (ou si on attend qu'ils se terminent)

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if (button_press_timer > une_seconde) :
                                            print "1 seconde : ", button_press_timer
                                            p = subprocess.Popen(['omxplayer --avdict rtsp_transport:tcp --live "rt$
                                            sleep(10) # attendre 10 secondes
                                            print "10 seconde  "
                                            p.terminate()
                                            print "terminate "
                                            p.wait()
                                            print "wait "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    1 seconde :  4.0
    Invalid framerate 125, using forced 25fps and just trust timestamps
    Video codec omx-h264 width 1280 height 720 profile 66 fps 25.000000
    Audio codec pcm_alaw channels 1 samplerate 16000 bitspersample 8
    Subtitle count: 0, state: off, index: 1, delay: 0
    V:PortSettingsChanged: 1280x720@125.00 interlace:0 deinterlace:0 anaglyph:0 par:1.00 display:0 layer:0 alpha:255 aspectMode:0
    10 seconde
    terminate
    wait
    Cela a l'air de faire ce qui est encodé.
    Peut etre qu'il faut fermer la video avec autre chose que terminate ? Kill peut etre ?

  10. #10
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Bon j'ai essayer avec p.kill() et aussi os.kill(p.pid, signal.SIGINT)
    au lieu de p.terminate()
    Mais cela ne change pas, la video ne se ferme pas

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par mat46007 Voir le message
    Bon j'ai essayer avec p.kill() et aussi os.kill(p.pid, signal.SIGINT)
    au lieu de p.terminate()
    Mais cela ne change pas, la video ne se ferme pas
    Il vous reste à lancer la console Python et y exécuter la séquence d'instructions Popen, .sleep, .terminate, ... pour être sur que ce n'est pas un effet de bord du reste de votre programme.
    Si ce n'est pas le cas, il faut relire la documentation d'omxplayer et/ou poser la question dans un forum approprié.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Voila la fonction qui ferme omxplayer :

    os.system('killall omxplayer.bin')


  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2011
    Messages : 27
    Points : 34
    Points
    34
    Par défaut solution
    Bonsoir je sais que ce topic est vieux mais à tout hasard je laisse ça là au cas ou ;-).

    exemple de lancement de omxplayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     p = subprocess.Popen(['/usr/bin/omxplayer --win "235 30 785 350" "rtsp://xxxxxxxxx/cam/realmonitor?channel=1&subtype=0"'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
    le code qui suit permet d'envoyer la commande 'q' (quit) a omxplayer comme ci nous l'avions tapé en ligne de commande.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p.communicate(input='q')

Discussions similaires

  1. probleme d'identification sur site web via python
    Par KINENVEU dans le forum Réseau/Web
    Réponses: 16
    Dernier message: 11/08/2009, 15h06
  2. Remplacer du texte via python
    Par csseur22 dans le forum Réseau/Web
    Réponses: 5
    Dernier message: 29/12/2008, 19h36
  3. Réponses: 5
    Dernier message: 06/11/2008, 16h21
  4. Demarrer/Eteindre PC via ethernet
    Par sycfrid dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 24/08/2008, 22h25
  5. Accéder à une base MySQL 'distante' via Python
    Par tse_tilky_moje_imja dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 24/07/2006, 11h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo