Daten schneller übers Internet austauschen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> Also afaik ist .avi nicht komprimiert
AVI ist ein Container-Format, die Dateiendung sagt nichts über die
Komprimierung aus, siehe DivX usw.

Oftmals sind aber unkomprimierte Videodaten in einen AVI-Container. Wollte
die pauschale Aussage nur ein wenig korrigieren :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Beitrag von Alves »

Danke!

Kenn mich mich Videos nicht so aus, habe d nur draus geschlossen, wie groß meine gerenderten Vids immer sind. :D
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Joel hat geschrieben:Achso bin mal 2 Stunden weg. Aber ihr könnt ja schonmal versuchen das problem zu lösen.
das ist aber großzügig von Euer Hohlheit.


die idee mit dem vorher packen und dann versenden find ich schon ganz gut.
allerdings kann man eben codierte formate nich unbedingt weiter packen.

etwas wesentlich kleiner machen kann man immer nur, wenn man informationen wegnimmt. irgendwo ist eben eine untergrenze erreicht. deshalb lässt auch mit zunehmender codierung zur platzersparnis die qualität nach.
bilddaten kann man deshalb so gut komprimieren, weil so viele redundanten informationen vorhanden sind. natürlich kann ich anstatt tausend mal die farbe blau zu speichern, einfach die tausend und ein blau speichern. aber wenn jedes byte einer datei eine komplett andere information trägt, kann man kaum komprimieren.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

Kaeru Gaman hat geschrieben: etwas wesentlich kleiner machen kann man immer nur, wenn man informationen wegnimmt.
Das stimmt so nicht. Es gibt Möglichkeiten der Beschreibung, die sehr
viel kleiner sind als das Endergebnis. Im Grunde fügt man also Informationen hinzu und nimmt dafür das "Fleisch" weg.
Vorraussetzung dafür sind allerdings immer bekannte und vorhandene Resourcen.
Früher Demoprogrammierung, heute das hervorragende QB_Play1.3(†) vom FroggerProgger.
Ein kleineres "Komprimat" für WaveDateien wirst Du wohl schwerlich
finden.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

:| Nein!!!!
Also ihr habt gesagt wenn man den Video umwandelt dass wird die Dstei kleiner. So aber bis der Video umgewandelt ist dauert das zb 10 min. Und dann muss die umgewandelte Datei verschickt werden. Das dauert auch nochmal 60 min.


Also wollte ich wenn die Datei umgewandelt wird als erstellt wird das schon anfangen zu verschicken, Daten kann man ja nicht wenn auf die zugegriffen oder erstellt werden irgentwas gemacht werden also wollte ich wissen wie das doch geht.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Warum brennst du's nicht auf CD und verschickst es per Brieftaube (nach RFC 1149)?
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Joel hat geschrieben:Also wollte ich wenn die Datei umgewandelt wird als erstellt wird das schon anfangen zu verschicken, Daten kann man ja nicht wenn auf die zugegriffen oder erstellt werden irgentwas gemacht werden also wollte ich wissen wie das doch geht.
sag mal: Kannst Du Dir bitte in Zukunft den Klumpatsch mal durchlesen und
korrigieren, bevor Du ihn abschickst? :|

@Topic: Mir wäre kein Verfahren bekannt, das es ermöglicht, eine Datei zu
versenden, während sie erstellt wird.
a²+b²=mc²
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

@Kiffi: Jaja, die Jugend von heute... Und PISA is an allem Schuld... <)
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

Ist doch eigentlich nicht so schwer das Ganze.
Ist halt nur etwas Gebastel (bei dem fraglich ist, ob das Endergebnis
dem Bastelaufwand gerecht wird)


Auf der Senderseite nimmst Du das lange, große Video und zerschneidest es in kleine Stücke.


Die kleinen Stücke werden komprimiert (**) und jeweils gleich nach dem Komprimieren übertragen.


Auf der Empfangsseite empfängt der Empfänger und spielt (***) die
empfangenen Videoteile ab(*) sobald sie eingetroffen sind.
Außerdem setzt der Empfänger die empfangenden Videoteile zu einem langen aber dann komprimierten Video wieder zusammen.


(*) ansonsten hätte das versenden direkt nach der Komprimierung
vermutlich nicht so viel Sinn.

(**) ob das möglich ist oder nicht ist erstmal gar nciht relevant. Meist isses unter Verlust sehr gut möglich.

(***) Hierbei wird es zwangsläufig zu Rucklern bei den Übergängen
der einzelenen Videoteile kommen wenn die Übertragung länger dauert
als das Abspielen.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

ich habs mal versucht, nur wie versendet man Daten im Arbeitsspeicher?

Server:

Code: Alles auswählen

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

Port = 6832
Buffer = AllocateMemory(1000)

If CreateNetworkServer(0, Port)

  MessageRequester("PureBasic - Server", "Server created (Port "+Str(Port)+").", 0)
  
  Repeat
      
    SEvent = NetworkServerEvent()
  
    If SEvent
    
      ClientID = EventClient()
  
      Select SEvent
      
        Case 1
          MessageRequester("PureBasic - Server", "hat sich gemeldet ", 0)
  
        Case 2
          MessageRequester("PureBasic - Server", "Ein Client hat eine roh-datei gesendet ", 0)
          DateiName$ = SaveFileRequester("Bitte Datei zum Speichern auswählen", "C:\", "*.*", 0)

       If DateiName$
       ReceiveNetworkFile(ClientID, DateiName$)
       EndIf 
        Case 3
          MessageRequester("PureBasic - Server", "Ein Client hat eine Datei gesendet!", 0)
          SendNetworkString(ClientID, "Ja")

          DateiName$ = SaveFileRequester("Bitte Datei zum Speichern auswählen", "C:\", "*.*", 0)

       If DateiName$

       
       
       
       
       ReceiveNetworkFile(ClientID, DateiName$)
  EndIf 
        Case 4
          MessageRequester("PureBasic - Server", "Die verbindung wurde beendet!", 0)
          Quit = 1
    
      EndSelect
    EndIf
    
  Until Quit = 1 
  
  MessageRequester("PureBasic - Server", "Click to quit the server.", 0)
  
  CloseNetworkServer(0)
Else
  MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf

  
End   

Client:

Code: Alles auswählen

Datei.s = OpenFileRequester(Datei, "", "", 0) 
If OpenFile(0, Datei) = 0 
  Debug "Error: OpenFile!" 
  End 
EndIf 

lenFile = Lof(0) 
*buffer = AllocateMemory(lenFile) 
*pack = AllocateMemory(lenFile + 8) 
ReadData(0, *buffer, lenFile) 
lenPack = PackMemory(*buffer, *pack, lenFile, 7) 
If lenPack 
  MessageRequester("Info", "Ratio: " + StrF(lenPack/lenFile)) 
Else 
  MessageRequester("Info", "Weitere Komprimierung nicht möglich") 
EndIf 
; *pack -> Daten zu senden 
If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

Port = 6832

ConnectionID = OpenNetworkConnection("joel2.dyndns.org", Port)
If ConnectionID = 1
MessageRequester("Error", "Can't load the movie...", 0)
End
EndIf 
;Name$ = OpenFileRequester("Senden", "C:\", "*.*", 0 , 0)
;If Name$
SendNetworkFile(ConnectionID, *pack)

  
  
  
  
  CloseNetworkConnection(ConnectionID)
;Else
  ;MessageRequester("PureBasic - Client", "Can't find the server (Is it launched ?).", 0)
;EndIf

  
End   
 

Antworten