'--------------------------------Fortsetzung
' clsFIFOStack---------------------------
''' <summary>
''' Hängt ein Array an den Puffer an
''' </summary>
''' <param name="b">Das anzuhängende Array</param>
''' <param name="startindex">Der Startindex im Array</param>
''' <param name="length">Die Länge im Array</param>
''' <remarks></remarks>
Public Sub Push(ByRef b() As T, Optional ByVal startindex As Integer = _
0, Optional ByVal length As Integer = 0)
Dim oldlen As Integer
If length = 0 Then length = b.Length
If length > b.Length Then length = b.Length
If length < 0 Then
Throw New ArgumentOutOfRangeException("length", "Die angegebene" & _
"Länge darf nicht negativ sein!")
End If
If startindex + length > b.Length Then Exit Sub
If blockop Then waitforunlock()
blockop = True
oldlen = stack.Length
Array.Resize(stack, stack.Length + length)
Array.Copy(b, startindex, stack, oldlen, length)
blockop = False
End Sub
''' <summary>
''' Leert den Puffer.
''' </summary>
''' <remarks></remarks>
Public Sub Flush()
Array.Resize(Of T)(stack, 0)
End Sub
''' <summary>
''' Fügt an einer bestimmten stelle ein array ein
''' </summary>
''' <remarks></remarks>
Public Sub Insert(ByRef b() As T, ByVal index As Integer, Optional _
ByVal length As Integer = -1)
Dim temparray1() As T = Nothing
Dim temparray2() As T = Nothing
Dim result() As T = Nothing
If length = -1 Then
length = b.Length
End If
If length > b.Length Then length = b.Length
Array.Copy(stack, 0, temparray1, 0, index)
Array.Copy(stack, index, temparray2, 0, stack.Length - index)
Array.Resize(Of T)(result, temparray1.Length + temparray2.Length + _
length)
Array.Copy(temparray1, result, temparray1.Length)
Array.Copy(b, 0, result, temparray1.GetUpperBound(0) + 1, length)
Array.Copy(temparray2, 0, result, b.GetUpperBound(0) + _
temparray1.GetUpperBound(0) + 1, temparray2.Length)
stack = result
End Sub
Public Function FindIndex(ByVal Item As T, Optional ByVal StartIndex As _
Integer = 0) As Integer
Dim i As Integer
If stack.Length > 0 And Not (stack Is Nothing) Then
For i = stack.GetLowerBound(0) To stack.GetUpperBound(0)
If stack(i).Equals(Item) Then Return i
Next
End If
'wenn nichts gefunden wurde
Return -1
End Function
Public Function Contains(ByVal element As T) As Boolean
For Each item As T In stack
If item.Equals(element) Then
Return True
End If
Next
Return False
End Function
Private Sub waitforunlock()
Do While blockop
Threading.Thread.Sleep(1)
Loop
End Sub
End Class So.
Du brauchst nur eine neue Instanz vom Proxy zu erstellen, mit
Dim sp as New StreamingProxy() und das ganze mit
sp.startserver() zu starten.
nun rufst du mit einer neuen Net.TcpClient-Klasse den Stream ab(per HTTP) und immer wenn daten reinkommen(byte-array!) machst du ein
sp.PushData(b) Sobald sich ein CLient verbindet, werden die Daten weitergeleitet. Du kannst im Listen-Thread noch die eine Zeile nach (...).Accept(....) entkommentieren, dann hört man den stream von beginn an.....
Man kann sich nun mit dem VLC media player nach http://localhost:16800/listen.mp3 verbinden und den stream hören.
Mein Problem ist, dass ich es nicht schaffe, die Streamgeschwindigkeit absolut konstant zu halten, es kommt zu schlechterem sound, störgeräuschen und abrissen beim hören.
Leider klappt es mit Winamp nicht, hat jmd ne idee?
burny |