2016-12-14 5 views
0

J'essaie d'utiliser le SDK Google Cast pour écrire une petite application. Cette application devrait être capable de montrer quelle chanson (Google Casted) mon système audio est en train de jouer. Cela doit inclure des informations sur le titre de la piste, la longueur, l'artiste, l'album, etc.Google Cast: Obtenir la chanson en cours de lecture à partir d'un périphérique audio

En utilisant les classes iOS, j'ai réussi à me connecter au bon GCKDevice via le GCKDiscoveryManager. Mais comment puis-je obtenir les données sur la piste en cours de lecture?

Je préférerais avoir une réponse pour les classes iOS, mais j'apprécierais aussi énormément de conseils pour atteindre la même chose avec l'extension du navigateur Chromecast.

Addon:

Sur les développeurs Cast + -Group je signalais à this link, merci Leon! Je vois que je devrais enregistrer un GCKRemoteMediaClientListener que je pourrais faire si j'avais un objet GCKRemoteMediaClient. La seule façon d'obtenir cela semble être via un GCKSession. Je peux créer une telle session à partir de zéro, mais la propriété remoteMediaClient est nil. Ou je peux demander au GCKCastContext.sharedInstance().sessionManager de commencer une session pour moi. Mais si je fais cela, l'appareil arrête la lecture immédiatement. Donc, je suis encore un peu perdu sur la façon d'atteindre mon objectif initial.

Une aide s'il vous plaît?

Répondre

1

Après un peu plus d'aide de Leon du groupe Cast Developer, j'ai compris celui-ci. Les informations clés sont l'ID de l'application qui s'exécute sur mon périphérique audio. Je l'ai compris par l'API 2.0 obsolète, c'est pourquoi je ne vais pas ajouter ce détail. supposer Vous avez cette clé, vous pouvez initialiser yiur contexte moulé par

let options = GCKCastOptions.init(receiverApplicationID: applicationID) 
GCKCastContext.setSharedInstanceWith(options) 

La prochaine chose est de trouver votre appareil. Ce n'était pas trop dur (le seul string que j'ai compris par moi-même: o) et le GCKCastContext.sharedInstance().discoveryManager est votre ami ici. Si vous démarrez maintenant une session via le GCKCastContext.sharedInstance().sessionManager, ce sera et non arrêter la lecture. Avec le recul, je me demande quelle application j'ai démarrée avant avec cet identifiant aléatoire ...

Avec la session commencée, vous pouvez lancer cette session sur une session de distribution et ajouter un écouteur de session.

if let session = sessionManager.currentSession as? GCKCastSession { 
    session.add(self) 
} 

Et lorsque cette session notifie sa activeness comme indiqué dans

func castSession(_ castSession: GCKCastSession, didReceive activeInputStatus: GCKActiveInputStatus) 

vous pouvez maintenant trouver le temps perdu remoteMediaClient et inscrivez-vous pour ses événements précieux

if let client = castSession.remoteMediaClient { 
    client.add(self) 
} 

Et cela mettra fin à la long trajet en appelant votre méthode de délégué

func remoteMediaClient(_ client: GCKRemoteMediaClient, didUpdate mediaMetadata: GCKMediaMetadata) 

Et si vous êtes aussi chanceux que je l'étais, les données médias sont assez incomplètes. Mine contenait juste le titre et la date de sortie et rien d'autre. Merci Deezer!

Mais peut-être que je peux utiliser un identifiant ou un autre obtenu dans l'ensemble du processus pour obtenir les données manquantes sur le serveur Deezer? Le temps nous le dira.

En attendant, j'espère que cela aidera quelqu'un avec plus de chance.