Audio/video stream recording forums
|
Attention Visitor: |
You may have to register or log in before you can post:
|
|
|
Thread Tools | Display Modes |
|
#1
|
|||
|
|||
Using LibRTMP in VB or C# applicationHello, 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) Code:
Parsing... Parsed protocol: 0 Parsed host : rtmp.website.com Parsed app : play RTMP_Connect0, failed to create socket. Error: 10093 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 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 |
#2
|
|||
|
|||
Re: Using LibRTMP in VB or C# applicationyou need to initialize winsock before calling RTMP_Connect. first error is due to invalid rtmp url and second error is due to non initialized winsock.
|
#3
|
|||
|
|||
Re: Using LibRTMP in VB or C# applicationThank you very much. It works fine now.
|
#4
|
|||
|
|||
Re: Using LibRTMP in VB or C# applicationHi,
I´m trying to get this done too (in VB 6.0) and am right now not so good at it. Would it be possible to get your Code (or a HowTo)? Would be great if you could help me. Thank you very much in advance. Student |
#5
|
|||
|
|||
Re: Using LibRTMP in VB or C# applicationQuote:
Get a copy its free VISUAL BASIC 2010 EXPRESS |
#6
|
|||
|
|||
Re: Using LibRTMP in VB or C# applicationHi Elgero,
can you please post the code that was finally working for you? cheerz lorus |
Tags: librtmp |
Thread Tools | |
Display Modes | |
|
|