Aller au contenu


Photo

UPNP/DLNA avec SWIFT 3 et Xcode 8

upnp dlna xcode 8 swift 3 librairie

  • Please log in to reply
7 réponses à ce sujet

#1 Fabcan

Fabcan

    Planteur de pousses

  • Membre
  • Pip
  • 4 messages

Posté 20 avril 2017 - 16:55

Bonjour à tous,

 

Je suis en train de développer une application de type vidéothèque.

J'ai créer la base de donnée avec coredata, jusque là pas de soucis.

 

Maintenant j'aimerai utiliser le protocole UPNP ou DLNA pour :

 

1-Récupérer la liste des médias partagés sur un mediaserver

 

2-Récupérer les liens de ces médias et les mettre dans ma base de donnée (lien du type : http:// 192.168.0.30:50002/v/NDLNA/30002.avi?)

 

3-Lancer la lecture des vidéos sur une TV

 

Mon problème est que je ne trouve pas de librairies UPNP en Swift 3.

 

J'ai trouvé plusieurs librairies (UPNPX, UpnpAtom, cyberlink, platinum, Ohnet...) mais que je n'arrive pas à exploiter. Elles sont en C ou objective C et je ne parvient pas à les utiliser.

 

Est-ce que quelqu'un a un lien vers une librairie écrite en Swift? Ou une procédure pour utiliser une des librairies que j'ai trouvé?

 

Merci d'avance.



#2 Lexxis

Lexxis

    Ecabosseur en fèves

  • Membre
  • PipPipPipPip
  • 419 messages

Posté 20 avril 2017 - 17:57

Bonjour,

Tu peux parfaitement utiliser une librairie C/C++/ObjectiveC/ObjectiveC++ avec ton code Swift. Je pense d'ailleurs que toute les libraires les plus abouties sont en C/C++. Il serait plus adéquat de créer un wrapper Swift au dessus de ces libraries (enfin surtout pour le C/C++).

 

Qu'est est donc le problème que tu rencontres lors de l'intégration d'une de ces libraries ?



#3 Fabcan

Fabcan

    Planteur de pousses

  • Membre
  • Pip
  • 4 messages

Posté 20 avril 2017 - 18:58

Bonjour,

Merci pour cette réponse rapide.

 

En fait j'essaye d'utiliser la librairie UPNPX.

Et j'essaye de traduire ça en Swift:

 

https://github.com/f...es/discovery.md

 

J'ai donc commencé par créer un fichier BridgeHeader.h dans lequel j'ai:

 

#import "../Pods/upnpx/src/api/UPnPDB.h"

 

Ensuite j'essaye de traduire les éléments du lien que j'ai donné plus haut.

NSArray *mDevices;   ->  var mDevices:NSArray=[]  -> OK

Sur le clic de mon bouton:

UPnPDB* db = [[UPnPManager GetInstance] DB]; ->  let db:UPnPDB = UPnPManager.getInstance().db  -> A piori OK
mDevices = [db rootDevices]; -> mDevices = (db.rootDevices)! -> A piori OK

Ensuite ça se complique pour moi. Il faut traduire  [db addObserver:self];

Xcode me propose ça:

 

db.addObserver(observer: NSObject, forKeyPath:String, options:NSKeyValueObservingOptions,context:UnsafeMutableRawPointer?)

 

Je n'ai pas la moindre idée de comment renseigner les paramètres et de ce qu'ils représentent.

 

Ensuite il y a une notion de protocole que je ne comprends pas non plus.

//protocol UPnPDBObserver
-(void)UPnPDBWillUpdate:(UPnPDB*)sender;
-(void)UPnPDBUpdated:(UPnPDB*)sender;

J'ai traduit ça par:

 

import UIKit

protocol UPnPDBObserver {
    func UPnPDBUpdated(sender:UPnPDB)
    func UPnPDBWillUpdate (sender:UPnPDB)
}

class ReglagesViewController: UIViewController,UPnPDBObserver {
    
    internal func UPnPDBWillUpdate(sender: UPnPDB) {
        print("Will Update")
    }

    internal func UPnPDBUpdated(sender: UPnPDB) {
        print("Updated")
    }

 

Ensuite je ne sais pas à quel moment sont appelés les fonctions UPnPDBWillUpdate et UPnPDBUpdated. Je suppose que c'est dans la librairie mais je ne sais pas...

 

Bref je patauge un peu!!

 

Merci de ton aide.



#4 Lexxis

Lexxis

    Ecabosseur en fèves

  • Membre
  • PipPipPipPip
  • 419 messages

Posté 21 avril 2017 - 08:02

A priori, addObserver est une méthode de la classe UPnPDB. Il devrait donc être possible de faire db.addObserver(self) avec une classe qui implémente le protocole UPnPDBObserver (comme cela semble être le cas pour la classe ReglagesViewController).

Ensuite les méthodes semblent être appeler par la librairie sur la découverte de nouveau device. cela te permet de mettre à jour ton interface par exemple.



#5 Fabcan

Fabcan

    Planteur de pousses

  • Membre
  • Pip
  • 4 messages

Posté 21 avril 2017 - 13:43

Quand j'écris ça : db.addObserver(self)

J'ai l'erreur : Missing arguments...

 

 

C'est peut être la manière dont j'ai essayé d'implémenter le protocole UPnPDBObserver qui ne va pas??

 

Je ne maitrise pas du tout cette notion de protocole.



#6 Lexxis

Lexxis

    Ecabosseur en fèves

  • Membre
  • PipPipPipPip
  • 419 messages

Posté 21 avril 2017 - 14:16

db.addObserver(self) est bien appelé depuis la classe qui implémenter le protocole UPnPDBObserver ?



#7 Fabcan

Fabcan

    Planteur de pousses

  • Membre
  • Pip
  • 4 messages

Posté 25 avril 2017 - 08:33

Oui l'appel se fait dans la même class que le reste:

 

Entre temps j'ai fait d'autres essais.

J'ai enlever la définition du protocol maintenant j'ai ça:

 

import UIKit

class ReglagesViewController: UIViewController,UPnPDBObserver {

 

 @IBAction func Upnp(_ sender: UIButton) {
        var mDevices:NSArray=[]
        let db:UPnPDB = UPnPManager.getInstance().db
        mDevices = (db.rootDevices)!
 
        UPnPManager.getInstance().ssdp.searchSSDP
 
        db.add(self)

        print (mDevices )

}
 

ça à l'air de fonctionner avec db.add(self).

 

Mon problème c'est que je ne sais pas quand la recherche de périphériques est terminée.

 

Je dois appuyer plusieurs fois sur le bouton pour qu'il y est des résultats dans le mDevices.

 

Donc il faudrait que j'arrive à implémenter la fonction UPnPDBUpdated qui à priori est faite pour ça.

 

Mais je ne sais pas comment faire?? Est-ce que tu as une idée?

 

Merci.



#8 takago

takago

    Planteur de pousses

  • Membre
  • Pip
  • 1 messages

Posté 13 juin 2017 - 13:23

Salut a tu du nouveau je chercher aussi une lib swift pour la gestion de l'UPNP je veux bien tes modifications si elles sont fonctionnelles 







Also tagged with one or more of these keywords: upnp, dlna, xcode 8, swift 3, librairie

0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)