Audio/video stream recording forums

Attention Visitor:
You may have to register or log in before you can post:
  • Click the register link to sign up.
  • Registered members please fill in the form below and click the "Log in" button.
To start viewing messages, select the forum that you want to visit from the selection below.

Go Back   Audio/video stream recording forums > Streaming media recording forum > rtmpdump
Register FAQ Members List Calendar Mark Forums Read

 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
  #1  
Old 02-14-2012, 09:12 AM
Elgero Elgero is offline
Senior Member
 
Join Date: Feb 2012
Posts: 177
Elgero is on a distinguished road
Default

Using LibRTMP in VB or C# application


Hello, I'm trying to use LibRTMP in my VB application, but I can't get it to work. No matter what rtmp stream I use, it always fails to connect (RTMP_Connect). Using RTMPDump with the same rtmp stream works fine.

Does anybody have any idea what's wrong?

In the immediate window I always get either this message:

Code:
Parsing...
Parsed protocol: 0
Parsed host    : rtmp.website.com
Parsed app     : play
Problem accessing the DNS. (addr: rtmp.website.com)
or this message:

Code:
Parsing...
Parsed protocol: 0
Parsed host    : rtmp.website.com
Parsed app     : play
RTMP_Connect0, failed to create socket. Error: 10093
This is my form code.

Code:
Imports System.Runtime.InteropServices
Imports System.IO

Public Class Form1

    Private m_LogCallback As New LibRTMP.LogCallback(AddressOf LogCallback)

    Private Sub LogCallback(ByVal level As LibRTMP.LogLevel, ByVal message As String)
        Debug.Print(message)
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim b(1023) As Byte
        Dim bytes_read As Integer
        Dim r As IntPtr

        LibRTMP.RTMP_LogSetLevel(LibRTMP.LogLevel.ALL)
        LibRTMP.SetLogCallback(m_LogCallback)

        r = LibRTMP.RTMP_Alloc

        If r = IntPtr.Zero Then
            MessageBox.Show("failed rtmp_alloc")
            Return
        End If

        LibRTMP.RTMP_Init(r)

        LibRTMP.RTMP_SetupURL(r, Marshal.StringToHGlobalAnsi("rtmp://whatever-stream.com"))

        '// Always fails to connect here
        If LibRTMP.RTMP_Connect(r, IntPtr.Zero) = 0 Then
            MessageBox.Show("failed to establish RTMP connection")
            Return
        End If

        If LibRTMP.RTMP_ConnectStream(r, 0) = 0 Then
            MessageBox.Show("failed to establish RTMP session")
            Return
        End If

        Using FS As New FileStream("C:\teststream.flv", FileMode.Create, FileAccess.Write)
            Do
                bytes_read = LibRTMP.RTMP_Read(r, b, b.Length)
                If (bytes_read = 0) Then Exit Do
                FS.Write(b, 0, bytes_read)
            Loop
        End Using

        LibRTMP.RTMP_Close(r)
        LibRTMP.RTMP_Free(r)
    End Sub
End Class
This is my LibRTMP class.

Code:
Imports System.Runtime.InteropServices

Public Class LibRTMP

    Public Enum LogLevel
        CRIT = 0
        [ERROR]
        WARNING
        INFO
        DEBUG
        DEBUG2
        ALL
    End Enum

    <DllImport("librtmp.dll", CallingConvention:=CallingConvention.Cdecl)>
    Public Shared Function RTMP_LibVersion() As Integer
    End Function

    <DllImport("librtmp.dll", CallingConvention:=CallingConvention.Cdecl)>
    Public Shared Function RTMP_Alloc() As IntPtr
    End Function

    <DllImport("librtmp.dll", CallingConvention:=CallingConvention.Cdecl)>
    Public Shared Sub RTMP_Free(ByVal rtmp As IntPtr)
    End Sub

    <DllImport("librtmp.dll", CallingConvention:=CallingConvention.Cdecl)>
    Public Shared Sub RTMP_Init(ByVal rtmp As IntPtr)
    End Sub

    <DllImport("librtmp.dll", CallingConvention:=CallingConvention.Cdecl)>
    Public Shared Sub RTMP_Close(ByVal rtmp As IntPtr)
    End Sub

    <DllImport("librtmp.dll", CallingConvention:=CallingConvention.Cdecl)>
    Public Shared Sub RTMP_EnableWrite(ByVal rtmp As IntPtr)
    End Sub

    <DllImport("librtmp.dll", CallingConvention:=CallingConvention.Cdecl)>
    Public Shared Function RTMP_SetupURL(ByVal rtmp As IntPtr, ByVal url As IntPtr) As Integer
    End Function
    'Intptr, because memory must remain valid so use StringToHGlobalAnsi

    <DllImport("librtmp.dll", CallingConvention:=CallingConvention.Cdecl)>
    Public Shared Sub RTMP_LogSetLevel(ByVal lvl As Integer)
    End Sub

    <DllImport("librtmp.dll", CallingConvention:=CallingConvention.Cdecl)>
    Public Shared Function RTMP_Connect(ByVal rtmp As IntPtr, ByVal cp As IntPtr) As Integer
    End Function

    <DllImport("librtmp.dll", CallingConvention:=CallingConvention.Cdecl)>
    Public Shared Function RTMP_ConnectStream(ByVal rtmp As IntPtr, ByVal seekTime As Integer) As Integer
    End Function

    <DllImport("librtmp.dll", CallingConvention:=CallingConvention.Cdecl)>
    Public Shared Function RTMP_Read(ByVal rtmp As IntPtr, ByVal buffer() As Byte, ByVal size As Integer) As Integer
    End Function

    <DllImport("librtmp.dll", CallingConvention:=CallingConvention.Cdecl)>
    Public Shared Function RTMP_Pause(ByVal rtmp As IntPtr, ByVal DoPause As Integer) As Integer
    End Function

    <DllImport("librtmp.dll", CallingConvention:=CallingConvention.Cdecl)>
    Public Shared Function RTMP_IsConnected(ByVal rtmp As IntPtr) As Boolean
    End Function

    <DllImport("librtmp.dll", CallingConvention:=CallingConvention.Cdecl)>
    Public Shared Function RTMP_IsTimedout(ByVal rtmp As IntPtr) As Boolean
    End Function

    <DllImport("librtmp.dll", CallingConvention:=CallingConvention.Cdecl)>
    Public Shared Function RTMP_HashSWF(ByVal url As String, <System.Runtime.InteropServices.Out()> ByRef size As Integer, ByVal hash() As Byte, ByVal age As Integer) As Boolean
    End Function

    <DllImport("logstub.dll", CallingConvention:=CallingConvention.Cdecl)>
    Public Shared Function InitSockets() As Integer
    End Function

    <DllImport("logstub.dll", CallingConvention:=CallingConvention.Cdecl)>
    Public Shared Sub CleanupSockets()
    End Sub

    <DllImport("logstub.dll", CallingConvention:=CallingConvention.Cdecl)>
    Public Shared Sub SetLogCallback(ByVal cb As LogCallback)
    End Sub

    Public Delegate Sub LogCallback(ByVal level As LogLevel, ByVal message As String)
End Class
Reply With Quote
 
Tags:



Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT -6. The time now is 12:10 AM.


Powered by All-streaming-media.com; 2006-2011
vB forum hacked with Zoints add-ons