Jump to content



Photo

LibRTMP in autoit


  • Please log in to reply
No replies to this topic

#1 carpkiller

carpkiller

    Seeker

  • New Members
  • 1 posts

Posted 28 April 2012 - 08:35 PM

Hi 1st post and i have a question can LibRTMP from the rtmpdump package and used in software like xbmc be used in autoit ?

I found some vb code to do it but i thought it would be cool if autit could do it also.

Here is the vb code:

Form:
Plain Text         
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®         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®         LibRTMP.RTMP_Free®     End Sub End Class


LibRTMP class:
Plain Text         
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


Note: you need to initialize winsock before calling RTMP_Connect.

More info on LibRTMP and RTMPDump here: http://rtmpdump.mplayerhq.hu/








0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users