Envoyer une image ligne par ligne via winsock

cs_Tioneb Messages postés 193 Date d'inscription dimanche 16 décembre 2001 Statut Membre Dernière intervention 29 juillet 2015 - 19 janv. 2007 à 17:21
le cancre Messages postés 292 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 27 novembre 2009 - 20 janv. 2007 à 02:11
Bonjour,
Je n'arrive pas à trouver ce que je cherche sur vbfrance alors je m'adresse ici. Ce que je voudrais faire (c'est écrit dans le titre) c'est de faire une sorte de streaming d'un écran distant. Pour celà j'ai pensé à envoyer ligne par ligne via winsock. Mais voilà; je suis mauvais en graphisme. Y'a des sources sur le sujet ici mais elles ne correspondent pas; elles envoie l'image entière et seulement après elle est affichée. Ce qui au final n'est pas très fluide! Même en réseau local!
Donc je voudrais savoir comment faire pour récupérer les couleurs d'une ligne de pixel pour les envoyer (tout ça serait compressé avec zlib).
Le but du programme est de pouvoir surveiller mon réseau local depuis la maison, mais aussi depuis le bureau. Pourquoi ne pas utiliser VNC, utilitaire gratuit et qui fonctionne très bien??? Ca aurait été trop simple; l'inconvéniant, pour moi, c'est que l'utilisateur peut fermer le programme or dans mon cas, c'est pour surveiller que les enfants ne font pas de conneries!!!

S'il existe des OCX qui font celà; c'est le top sinon y'a plus qu'a....

Merci d'avance
@+

--------------------------------------------------------------------------
Visitez mon site sur http://bp-software.ifrance.com/

8 réponses

le cancre Messages postés 292 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 27 novembre 2009
19 janv. 2007 à 18:36
Lu, 
si tu veux de la performance prend pas l'objet winsock c'est bon que pour les débutants avec un taux de transfert vraiment minable
par contraire avec l'api wsk tu auras plus de puissance
je me suis déjà taper une sorte de vnc pour le plaisir
voici un exemple d'une autre technique qui pour mon cas marche bien
je prend la taille de l'image, et je la divise en paquet de 100ko

Public Sub DLFile() ' transfert de donnée
Dim i As Integer, temp As Stringxnbr FreeFile: Envoi True
On Error Resume Next
Open App.Path & "\screen.jpg" For Binary Access Read As #xnbr
    nb = LOF(xnbr) / 100000
        If nb <> Int(nb) Then nb = Int(nb) + 1
            For i = 1 To nb                If i <> nb Then temp Space(100000) Else temp Space(LOF(xnbr) - (100000 * (i - 1)))
                Get #xnbr, , temp
                DL Sock, temp
                DoEvents
            Next i
Close #xnbr
End Sub

Public Sub DL(Sock As Long, msg As String)  ' envoi
Dim CR As Long,xLen As Long, i As Long
    xLen= Len(msg):ReDim Buff(xLen+ 1) As Byte
   For i = 1 To xLen
        Buff(i - 1) = Asc(Mid$(msg, i, 1))
    Next i
    Buff(xLen) = 0
    CR = send(Sock, Buff(0), xLen, 0)
end sub 

j'utilise pas de timer qui balance une image toute les x secondes,dés reception de l'image chez le client,le serveur recommence,et franchement c'est super fluide..mais apres tout dépend de la taille de l'image,lors de l'enregistrement de l'image (partie serveur) ,je l'enregistre avec une taille maxi de 800/600 (en gros 2 à 3mo maxi)
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
19 janv. 2007 à 18:44
Bonsoir Le Cancre...

Notre ami ne veut pas, semble-t-il, un affichage in fine, mais un affichage au fur et à mesure (ligne par ligne) !

Je ne crois pas la chose possible, sauf à ralentir considérablement  le tout (en créant puis en envoyant plusieurs sous-images de la même image) !
0
le cancre Messages postés 292 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 27 novembre 2009
19 janv. 2007 à 18:58
Bonsoir jmfmarques, 

on est bien d'accord, je réponds pas à la question mais je procéde d'une autre manière en lui proposant une autre technique que j'utilise,sinon...à la rigueur pour essayer de répondre à cette fameuse question en essayant de rendre la chose le plus simple possible 
il crée plusieur image qui contient un groupe de ligne( une portion de l'image de base)
mais bon......son vrai problème c'est une question de performance et pour moi c'est pas la meilleure technique, on va dire que je l'oriente dans une autre direction qui me semble meilleure 
0
cs_Tioneb Messages postés 193 Date d'inscription dimanche 16 décembre 2001 Statut Membre Dernière intervention 29 juillet 2015
19 janv. 2007 à 20:28
Merci Le Cancre mais au niveau du nombre d'images par secondes; avec ta méthode tu arrive à combien (en local et/ou via internet)?
Mais bon l'image ne s'affiche qu'une fois entièrement transférée. Sinon, en reprenant ton idée; au lieu d'envoyer ligne par ligne peut-être se serait plus efficace en divisant l'image en carré de x pixels.
Dites moi si je me trompe: Pour pouvoir se permettre de n'envoyer qu'une partie de l'image et de l'afficher, il faut récupérer les données de chaque pixels (la couleur quoi) et les envoyer avec les coordonnées pour les afficher où il faut.

--------------------------------------------------------------------------
Visitez mon site sur http://bp-software.ifrance.com/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
19 janv. 2007 à 22:04
Non !
Pour pouvoir n'envoyer qu'une partie de l'image, il faut créer une image correspondant à cette partie !
Donc créer autant d'images (et les envoyer) que tu souhaites faire de parties d'image !

A l'envoi, il te faudra donc y aller allègrement de PaintPicture ou de BitBlt (ce qui revient au même) et en faire autant (pour les raccordements) à l'autre bout !

Un seul mot : Bonjour les lenteurs ajoutées !
0
cs_Tioneb Messages postés 193 Date d'inscription dimanche 16 décembre 2001 Statut Membre Dernière intervention 29 juillet 2015
19 janv. 2007 à 23:04
Mouais, pas super tout ça! Ben je crois que je vais faire des recherches sur d'autre logiciels du type VNC qui me correspondra mieu. Sauf s'il y a un OCX ou une DLL qui le ferai.....

--------------------------------------------------------------------------
Visitez mon site sur http://bp-software.ifrance.com/
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
19 janv. 2007 à 23:32
Bonne chasse, bonne pêche et bonne chance ...

Un mot toutefois, bien qu'il ne me soit jamais venu à l'idée de tenter de créer une telle manoeuvre et que je ne la tenterai jamais :

Essayer de faire avec l'écran de destination ce que l'on peut faire avec une imprimante après avoir fait un fichier poscript de type PEPS ( Encapsulated PostScript).
Mais il te faudrait pour celà créer un pilote ad hoc à installer sur la machine destinataire.

QUESTIONS  (idiotes ?)

1) Te sens tu la force, les connaissances et les capacités pour te lancer dans une aventure de cette envergure ?
2) Es-tu vraiment prêt (on ne sait jamais...) à dépenser quelques dizaines (ou beaucoup plus) d'heures de travail et de recherches (peut-être en vain) pour calmer une impatience de quelques secondes ?
0
le cancre Messages postés 292 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 27 novembre 2009
20 janv. 2007 à 02:11
re,
j'pense qu'on peut faire beaucoup plus simple
le client connait la taille de l'image,receptionne un premier paquet de 100ko
taille = 100ko + couleur blanche pour remplir le reste
c'est pas trop mon truc les images mais j'pense que l'image s'affiche correctement si la taille de l'image correspond au champ taille du header
0
Rejoignez-nous