Salut, dans un autre post je parlais de mon petit code pour mon projet de Deskboard. J’arrive a créer ce que je veux, mais c’est une fois sous Raspbian du Raspberry Pi que tout lâche.
J’utilise 3 appareils pour tester mon code; mon Pc sous WIn10, un eeePC avec Raspbian OS X86 (Raspbian du RPi, mais pour les PC) et un PiZero avec Raspbian OS Full.
Je code sous mon Windows 10, même éditeur sur les 3 (Thonny) et en version Python 3, je tente d’installer les même package sur chaque.
- Sous Windows 10 pas de soucis, tout comme sous le eeePC, je clique « play » et la radio démarre,
- Sous le RPi0, l’application démarre, je click sur « play », il a un délais, pas de son, et il « gèle » (un scrolling text de mon code arrête, ce qui me dit que le code a stoppé, l’actualisation en background est également stoppé) pas de message d’erreur, pas d’indication qu’un module est requis.
Dans mes premiers tests, j’avais dans le /boot/config.txt
l’audio module désactivé (passant que sur le BT), j’ai réactivé en passant que le passage ne marche pas avec Python, mais aucune différence.
Voici mon code;
Le « import » complet
import json, requests, gi, re, datetime
gi.require_version("Gtk", "3.0")
gi.require_version('Gst', '1.0')
from gi.repository import Gtk
from gi.repository import GLib
from gi.repository import GObject
from gi.repository import Gst
from gi.repository.GdkPixbuf import Pixbuf
Le « init »
Gst.init_check(None)
self.IS_GST010 = Gst.version()[0] == 0
self.player = Gst.ElementFactory.make("playbin", "player")
self.player.set_property("uri", "http://radio.levelkro.net:8000/1")
self.bus = self.player.get_bus()
self.bus.add_signal_watch()
self.bus.connect("message", self.on_message)
self.player.connect("about-to-finish", self.on_finished)
Les 2 commandes linké
# Music Player
def triggerPlayer(self, w):
if self.statePlayer == False:
self.statePlayer = True;
self.buttonPlayerAction.get_child().set_from_file("stop.png")
self.player.set_property("uri", "http://radio.levelkro.net:8000/1;.mp3")
self.player.set_state(Gst.State.PLAYING)
GLib.timeout_add_seconds(1, self.setPlayerUpdates)
else:
self.player.set_state(Gst.State.NULL)
self.statePlayer = False;
self.buttonPlayerAction.get_child().set_from_file("play.png")
def setPlayerUpdates(self):
if(self.statePlayer == False):
return False
posTimeNano = self.player.query_position(Gst.Format.TIME)[1];
posTimeSec = float(posTimeNano / Gst.SECOND)
self.dataPlayerTime.set_text(str(datetime.timedelta(seconds=round(posTimeSec))))
return True
def on_message(self, bus, message):
t = message.type
if t == Gst.MessageType.EOS:
self.player.set_state(Gst.State.NULL)
self.statePlayer = False;
self.buttonPlayerAction.get_child().set_from_file("play.png")
elif t == Gst.MessageType.ERROR:
self.player.set_state(Gst.State.NULL)
err, debug = message.parse_error()
print("Error: %s" % err, debug)
self.statePlayer = False;
self.buttonPlayerAction.get_child().set_from_file("play.png")
Dans quel situation que la lecture peux causer un plantage ? Problème avec les RPi0 ? Besoin de la clé de licence de décodage Mpeg ?