Verständnissfrage: UDP Videochat(gewollt UDP)

  • Allgemein

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Verständnissfrage: UDP Videochat(gewollt UDP)

    Hey Com,

    ich habe da mal eine etwas dümmere Frage :D Undzwar habe ich in meinen Chat die Videotelefonie eingebaut, da ich leider vorerst keinen weiteren PC zur Verfügung habe frag ich nun euch.Es ist UDP, wenn ich jetzt eine UDP-Adresse herausfinde und mit Ihm eine Videotelefonie starte, wird dann er überhaupt angerufen oder muss ich einen Client dafür machen.(Würde ich nicht gerne machen sonder eher wie Skype).
    Mein Code ist:

    VB.NET-Quellcode

    1. Dim subscriber As New UdpClient(2013)
    2. Dim publisher As New UdpClient()
    3. Dim mycomputername As String = Environment.MachineName
    4. Dim mycomputerIP() As System.Net.IPAddress = System.Net.Dns.GetHostAddresses(mycomputername)
    5. Dim Touchless As New TouchlessLib.TouchlessMgr
    6. Dim Camera1 As TouchlessLib.Camera = Touchless.Cameras.ElementAt(0)
    7. Dim picsize As Size = New Size(160, 120)
    8. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    9. publisher.Client.Blocking = False
    10. subscriber.Client.ReceiveTimeout = 100
    11. subscriber.Client.Blocking = False
    12. TB_Host.Text = Environment.MachineName
    13. Label3.Text = "My Name: " & Environment.MachineName
    14. Touchless.CurrentCamera = Camera1
    15. Touchless.CurrentCamera.CaptureWidth = picsize.Width
    16. Touchless.CurrentCamera.CaptureHeight = picsize.Height
    17. End Sub
    18. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    19. Try
    20. Dim bitmapz As Bitmap = New Bitmap(picsize.Width, picsize.Height)
    21. bitmapz = Touchless.CurrentCamera.GetCurrentImage
    22. PictureBox1.Image = bitmapz
    23. Dim sendbytes() As Byte
    24. bytesfromimage(sendbytes, bitmapz)
    25. publisher.Send(sendbytes, sendbytes.Length)
    26. Catch ex As Exception
    27. End Try
    28. Try
    29. Dim ep As System.Net.IPEndPoint = New System.Net.IPEndPoint(System.Net.IPAddress.Any, 0)
    30. Dim rcvbytes() As Byte = subscriber.Receive(ep)
    31. Dim bitmapz As Bitmap = New Bitmap(picsize.Width, picsize.Height)
    32. imagefrombytes(rcvbytes, bitmapz)
    33. PictureBox2.Image = bitmapz
    34. Catch ex As Exception
    35. End Try
    36. End Sub
    37. Private Sub imagefrombytes(ByRef bytez() As Byte, ByRef piccolor As Bitmap)
    38. Dim rect As New Rectangle(0, 0, piccolor.Width, piccolor.Height)
    39. Dim bmpData As System.Drawing.Imaging.BitmapData = piccolor.LockBits(rect, _
    40. Drawing.Imaging.ImageLockMode.ReadWrite, Imaging.PixelFormat.Format32bppRgb)
    41. Dim ptr As IntPtr = bmpData.Scan0
    42. Dim bytes As Integer = bmpData.Stride * piccolor.Height
    43. Dim rgbValues(bytes - 1) As Byte
    44. System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes)
    45. Dim secondcounter As Integer
    46. Dim tempred As Integer
    47. Dim tempblue As Integer
    48. Dim tempgreen As Integer
    49. Dim tempalpha As Integer
    50. secondcounter = 0
    51. While secondcounter < rgbValues.Length
    52. tempblue = rgbValues(secondcounter)
    53. tempgreen = rgbValues(secondcounter + 1)
    54. tempred = rgbValues(secondcounter + 2)
    55. tempalpha = rgbValues(secondcounter + 3)
    56. tempalpha = 255
    57. tempred = bytez(((secondcounter * 0.25) * 3) + 0)
    58. tempgreen = bytez(((secondcounter * 0.25) * 3) + 1)
    59. tempblue = bytez(((secondcounter * 0.25) * 3) + 2)
    60. rgbValues(secondcounter) = tempblue
    61. rgbValues(secondcounter + 1) = tempgreen
    62. rgbValues(secondcounter + 2) = tempred
    63. rgbValues(secondcounter + 3) = tempalpha
    64. secondcounter = secondcounter + 4
    65. End While
    66. System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes)
    67. piccolor.UnlockBits(bmpData)
    68. End Sub
    69. Private Sub bytesfromimage(ByRef bytez() As Byte, ByRef piccolor As Bitmap)
    70. Dim rect As New Rectangle(0, 0, piccolor.Width, piccolor.Height)
    71. Dim bmpData As System.Drawing.Imaging.BitmapData = piccolor.LockBits(rect, _
    72. Drawing.Imaging.ImageLockMode.ReadWrite, Imaging.PixelFormat.Format32bppRgb)
    73. Dim ptr As IntPtr = bmpData.Scan0
    74. Dim bytes As Integer = bmpData.Stride * piccolor.Height
    75. Dim rgbValues(bytes - 1) As Byte
    76. System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes)
    77. Dim secondcounter As Integer
    78. Dim tempred As Integer
    79. Dim tempblue As Integer
    80. Dim tempgreen As Integer
    81. Dim tempalpha As Integer
    82. secondcounter = 0
    83. Dim bytelist As List(Of Byte) = New List(Of Byte)
    84. While secondcounter < rgbValues.Length
    85. tempblue = rgbValues(secondcounter)
    86. tempgreen = rgbValues(secondcounter + 1)
    87. tempred = rgbValues(secondcounter + 2)
    88. tempalpha = rgbValues(secondcounter + 3)
    89. tempalpha = 255
    90. bytelist.Add(tempred)
    91. bytelist.Add(tempgreen)
    92. bytelist.Add(tempblue)
    93. rgbValues(secondcounter) = tempblue
    94. rgbValues(secondcounter + 1) = tempgreen
    95. rgbValues(secondcounter + 2) = tempred
    96. rgbValues(secondcounter + 3) = tempalpha
    97. secondcounter = secondcounter + 4
    98. End While
    99. System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes)
    100. piccolor.UnlockBits(bmpData)
    101. Dim bytearray(bytelist.Count - 1) As Byte
    102. For i = 0 To bytelist.Count - 1
    103. bytearray(i) = bytelist(i)
    104. Next
    105. bytez = bytearray
    106. End Sub
    107. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    108. publisher.Connect(tbHOST, 2013)
    109. End Sub

    Hoffe Ihr könnt mir da helfen :)
    Greet iEi

    iEi schrieb:

    da ich leider vorerst keinen weiteren PC zur Verfügung habe
    Das ist ja fast eine Grundvoraussetzung, dein Vorhaben scheitern zu lassen.

    Warum installierst du nicht VirtualBox und virtualisierst darauf einen (oder mehrere) Partner-Rechner?

    Mit einem einzigen Rechner lässt sich Netzwerkprogrammierung ganz schlecht testen.

    Damit ist zwar noch immer nicht das mögliche Problem gelöst, das Programm hinter einer Internet-Firewall zum Laufen zu bringen, aber lässt sich zumindest die Basiskommunikation testen.

    eher wie Skype
    Skype arbeitet übrigens mit einem zwischengeschalteten Server zum Verbindungsaufbau.
    Der dann verwendetete Lochtrick kommt erst danach zum Einsatz.
    Ganz ohne ein zentrales Sync-Programm wirst du nicht auskommen, sonst wird das Stochern im Nebel.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Außerdem fängst du am besten erst einmal an OOP zu lernen und anschließend auch überall zu verwenden. Denn davor fängt man nicht an nen Chat zu programmieren.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---