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

Qt Discussion :

[Qt][network] est il possible d'envoyer des paquets autre que du texte


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 42
    Par défaut [Qt][network] est il possible d'envoyer des paquets autre que du texte
    Bonjour voila j'aimerai faire un semblant de voip.
    Alors j'utilise Qt+OpenAL+sndfile

    Mais voila pour ce qui est du reseau avec qt j'ai toujours géré des paquet qui contenaient du texte ou des quint16.
    Mais maintenant j'ai besoin de paquet contenant de vector<ALshort> et je ne sais pas comment proceder. Car bien sur il n'y a pas de surcharge QDataStream &operator>>(vector <ALshort>)

    Voila je vous remercie d'avance pour votre aide.

    Edit : je pensai recupérer chaque ALshort du tableau le convertir en short puis en quint16 et les transferer un a un dans des sous paquets.
    Alors à la reception du paquet je regarde tous les sous paquets et je les reconverti en ALshort puis jen refait un tableau mais ca m'a l'air un peu compliqué et même peut être que ce n'est pas la bonne solution.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par poulecaca Voir le message
    je pensai recupérer chaque ALshort du tableau le convertir en short puis en quint16
    ben AlSHort,short et quint16 son généralement la même chose. Au pire AlSHort est la même chose que quint16.
    Donc pas besoin de conversion. Le plus simple est d'utiliser les QByteArray pour envoyer sur le réseaux.Le top serait que tu compress l'audio avant de l'envoyer.
    Regard peut être un phonon, y as peut être des chose pour faire ce que tu veut.

    Qu'as tu commencé à faire? qu'es ce qui marche? qu'es ce qui ne marche pas?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 42
    Par défaut
    Oui je me suis rendu compte que la "conversion" quint16 en ALshort allez être ridicule.

    En fait j'en suis qu'en phase de début.
    -----
    Je sais réaliser un client/serveur Qt pour du texte sans utiliser QTextStream.
    Je sais lire un .wav et un ogg (au pire mp3 il suffit d'avoir le codec)
    Je sais enregistrer au micro.
    -----
    Maintenant je sais pas si il est utile de compresser l'audio n'envoyant que petit paquets par petit paquet d'une seconde d'enregistrement si j'utilise des tampons d'une seconde pour décompresser l'audio j'ai l'impression que je vais perdre mon temps. Mais pourquoi pas à la limite ca peut venir après.
    -----
    Pour ce qui est du QBytesArray je comprend pas trop je vais en fait envoyer par le reseau un tableau de bytes ? Si c'est le cas comment stocker un ALshort dans le QBytesArray et refaire l'inverse.

    EDIT : ok j'ai regardé du coté de QBytesArray on peut facilement lui attribuer des short mais un tableau je sais pas peut être vais je devoir envoyer plein de QByteArray autant que de case dans le vector<ALshirt>.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    EN gros, a temps régulier, tu envoie une frame audio (un vecteur de AlShort) au travers de QByteArray.
    Un QByteArray est simplement un vector<uint8>. Il faut juste que tu copie ton tableau dedans.
    Je ne voie pas trop ou est ton problème...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 42
    Par défaut
    Donc en fait j'envoie mon paquet brut sans faire un sous paquet pour stocker la taille du paquet.
    Et j'attend pas d'avoir recu tout le paquet pour le reespédier ?

    J'essaie de me réexprimer mieux lorsque j'ai réalisé un chat ecrit les paquet que jenvoyai étaient en fait divisés en deux grace a QDataStream :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    QByteArray paquet;
    QDataStream out(&paquet, QIODevice::WriteOnly);
    out<< (quint16) 0; //on écrit O pour réserver la place pour la taille
    out<< message; //On ajoute le message à la suite
    out.device()->seek(0); // On se replace au début du paquet
    out << (quint16) (paquet.size() - sizeof(quint16)); //on enleve le zéro
    Alors que maintenant je vais expédier mon QByteArray sans faire un sous paquet taille recu par mon serveur en sous paquet sans savoir si on a tous le tableau et reevoyé au client.

    Ca risque pas d'être un peu anarchique ?

    sauf si on stoque dans QByteArray buffer; buffer[0] = 'taille du paquet';
    et on attend de récupérer au moins la taille d'un quint8 et on recupère sur le serveur buffer[0] pour avoir la taille du paquet.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 42
    Par défaut
    Bon toujours avec ce problème voila comment je crée un paquet :

    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
     
    if(!initOpenAl())
    	{
    		cerr<<"impossible d'envoyer le message"<<endl;
    		return;
    	}
     
    	vector<ALshort> sound;
    	sound=loadSound("ocean.wav");
    	cout<<sound.size()<<endl;
    	QByteArray paquet;
    	paquet.append(sound.size()+1);
     
    	for(int i =0;i<(int) sound.size();i++)
    	{
    		paquet.push_back((sound[i]));
    	}
    	cout<<paquet.size()<<endl;
    	cout<<paquet.at(0)<<endl;
    	cout<<"envoie"<<endl;
    	socket->write(paquet);
    	shutdownAL();
    le problème c'est que le paquet n'affiche rien à la position 0 ou aux autres d'ailleur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 09/03/2014, 15h52
  2. Est-il possible d'envoyer des message JMS non textuel ?
    Par ctardella dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 12/08/2009, 20h33
  3. Est-ce possible d'envoyer des emails ?
    Par Raiden1234 dans le forum Struts 2
    Réponses: 2
    Dernier message: 30/04/2008, 11h36
  4. Réponses: 2
    Dernier message: 19/09/2007, 10h21
  5. [CR] Est il possible de créer des univers avec Seagate Info?
    Par Frank dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/06/2002, 15h22

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