librtmp 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +18 -0
- data/.rvmrc +1 -0
- data/Gemfile +4 -0
- data/README.md +4 -0
- data/Rakefile +1 -0
- data/lib/librtmp.rb +5 -0
- data/lib/librtmp/ffi.rb +7 -0
- data/lib/librtmp/ffi/amf.rb +161 -0
- data/lib/librtmp/ffi/rtmp.rb +240 -0
- data/lib/librtmp/version.rb +3 -0
- data/librtmp.gemspec +24 -0
- metadata +68 -0
data/.gitignore
ADDED
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm use 1.9.3@ruby-librtmp --create
|
data/Gemfile
ADDED
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/lib/librtmp.rb
ADDED
data/lib/librtmp/ffi.rb
ADDED
@@ -0,0 +1,161 @@
|
|
1
|
+
require 'ffi'
|
2
|
+
|
3
|
+
module Librtmp
|
4
|
+
module FFI
|
5
|
+
extend ::FFI::Library
|
6
|
+
|
7
|
+
ffi_lib 'librtmp'
|
8
|
+
|
9
|
+
AMFDataType = enum(
|
10
|
+
:amf_number, 0,
|
11
|
+
:amf_boolean, :amf_string, :amf_object,
|
12
|
+
:amf_movieclip, :amf_null, :amf_undefined,
|
13
|
+
:amf_reference, :amf_ecma_array, :amf_object_end,
|
14
|
+
:amf_strict_array, :amf_date, :amf_long_string,
|
15
|
+
:amf_unsupported, :amf_recordset, :amf_xml_doc,
|
16
|
+
:amf_typed_object, :amf_avmplus, :amf_invalid, 0xff
|
17
|
+
)
|
18
|
+
|
19
|
+
AMF3DataType = enum(
|
20
|
+
:amf3_undefined, 0,
|
21
|
+
:amf3_null, :amf3_false, :amf3_true,
|
22
|
+
:amf3_integer, :amf3_double, :amf3_string,
|
23
|
+
:amf3_xml_doc, :amf3_date, :amf3_array,
|
24
|
+
:amf3_object, :amf3_xml, :amf3_byter_array
|
25
|
+
)
|
26
|
+
|
27
|
+
class AVal < ::FFI::Struct
|
28
|
+
layout :av_val, :pointer,
|
29
|
+
:av_len, :int
|
30
|
+
end
|
31
|
+
|
32
|
+
class AMFObject < ::FFI::Struct
|
33
|
+
layout :o_num, :int
|
34
|
+
end
|
35
|
+
|
36
|
+
class AMFObjectPropertyPVu < ::FFI::Union
|
37
|
+
layout :p_number, :double,
|
38
|
+
:p_aval, AVal,
|
39
|
+
:p_object, AMFObject
|
40
|
+
end
|
41
|
+
|
42
|
+
class AMFObjectProperty < ::FFI::Struct
|
43
|
+
layout :p_name, AVal,
|
44
|
+
:p_type, AMFDataType,
|
45
|
+
:p_vu, AMFObjectPropertyPVu,
|
46
|
+
:p_UTCoffset, :int16
|
47
|
+
end
|
48
|
+
|
49
|
+
class AMFObject < ::FFI::Struct
|
50
|
+
layout :o_props, AMFObjectProperty
|
51
|
+
end
|
52
|
+
|
53
|
+
class AMF3ClassDef < ::FFI::Struct
|
54
|
+
layout :cd_name, AVal,
|
55
|
+
:cd_externalizable, :char,
|
56
|
+
:cd_dynamic, :char,
|
57
|
+
:cd_num, :int,
|
58
|
+
:cd_props, :pointer
|
59
|
+
end
|
60
|
+
|
61
|
+
# char *AMF_EncodeString(char *output, char *outend, const AVal * str);
|
62
|
+
# char *AMF_EncodeNumber(char *output, char *outend, double dVal);
|
63
|
+
# char *AMF_EncodeInt16(char *output, char *outend, short nVal);
|
64
|
+
# char *AMF_EncodeInt24(char *output, char *outend, int nVal);
|
65
|
+
# char *AMF_EncodeInt32(char *output, char *outend, int nVal);
|
66
|
+
# char *AMF_EncodeBoolean(char *output, char *outend, int bVal);
|
67
|
+
attach_function :AMF_EncodeString, [:pointer, :pointer, :pointer], :pointer
|
68
|
+
attach_function :AMF_EncodeNumber, [:pointer, :pointer, :double], :pointer
|
69
|
+
attach_function :AMF_EncodeInt16, [:pointer, :pointer, :short], :pointer
|
70
|
+
attach_function :AMF_EncodeInt24, [:pointer, :pointer, :int], :pointer
|
71
|
+
attach_function :AMF_EncodeInt32, [:pointer, :pointer, :int], :pointer
|
72
|
+
attach_function :AMF_EncodeBoolean, [:pointer, :pointer, :int], :pointer
|
73
|
+
|
74
|
+
# /* Shortcuts for AMFProp_Encode */
|
75
|
+
# char *AMF_EncodeNamedString(char *output, char *outend, const AVal * name, const AVal * value);
|
76
|
+
# char *AMF_EncodeNamedNumber(char *output, char *outend, const AVal * name, double dVal);
|
77
|
+
# char *AMF_EncodeNamedBoolean(char *output, char *outend, const AVal * name, int bVal);
|
78
|
+
attach_function :AMF_EncodeNamedString, [:pointer, :pointer, AVal, AVal], :pointer
|
79
|
+
attach_function :AMF_EncodeNamedNumber, [:pointer, :pointer, AVal, :double], :pointer
|
80
|
+
attach_function :AMF_EncodeNamedBoolean, [:pointer, :pointer, AVal, :int], :pointer
|
81
|
+
|
82
|
+
# unsigned short AMF_DecodeInt16(const char *data);
|
83
|
+
# unsigned int AMF_DecodeInt24(const char *data);
|
84
|
+
# unsigned int AMF_DecodeInt32(const char *data);
|
85
|
+
# void AMF_DecodeString(const char *data, AVal * str);
|
86
|
+
# void AMF_DecodeLongString(const char *data, AVal * str);
|
87
|
+
# int AMF_DecodeBoolean(const char *data);
|
88
|
+
# double AMF_DecodeNumber(const char *data);
|
89
|
+
attach_function :AMF_DecodeInt16, [:string], :ushort
|
90
|
+
attach_function :AMF_DecodeInt24, [:string], :uint
|
91
|
+
attach_function :AMF_DecodeInt32, [:string], :uint
|
92
|
+
attach_function :AMF_DecodeString, [:string, AVal], :void
|
93
|
+
attach_function :AMF_DecodeLongString, [:string, AVal], :void
|
94
|
+
attach_function :AMF_DecodeBoolean, [:string], :int
|
95
|
+
attach_function :AMF_DecodeNumber, [:string], :double
|
96
|
+
|
97
|
+
# char *AMF_Encode(AMFObject * obj, char *pBuffer, char *pBufEnd);
|
98
|
+
# int AMF_Decode(AMFObject * obj, const char *pBuffer, int nSize, int bDecodeName);
|
99
|
+
# int AMF_DecodeArray(AMFObject * obj, const char *pBuffer, int nSize, int nArrayLen, int bDecodeName);
|
100
|
+
# int AMF3_Decode(AMFObject * obj, const char *pBuffer, int nSize, int bDecodeName);
|
101
|
+
# void AMF_Dump(AMFObject * obj);
|
102
|
+
# void AMF_Reset(AMFObject * obj);
|
103
|
+
attach_function :AMF_Encode, [AMFObject, :pointer, :pointer], :pointer
|
104
|
+
attach_function :AMF_Decode, [AMFObject, :string, :int, :int], :int
|
105
|
+
attach_function :AMF_DecodeArray, [AMFObject, :string, :int, :int, :int], :int
|
106
|
+
attach_function :AMF3_Decode, [AMFObject, :string, :int, :int], :int
|
107
|
+
attach_function :AMF_Dump, [AMFObject], :void
|
108
|
+
attach_function :AMF_Reset, [AMFObject], :void
|
109
|
+
|
110
|
+
# void AMF_AddProp(AMFObject * obj, const AMFObjectProperty * prop);
|
111
|
+
# int AMF_CountProp(AMFObject * obj);
|
112
|
+
# AMFObjectProperty *AMF_GetProp(AMFObject * obj, const AVal * name, int nIndex);
|
113
|
+
attach_function :AMF_AddProp, [AMFObject, AMFObjectProperty], :void
|
114
|
+
attach_function :AMF_CountProp, [AMFObject], :int
|
115
|
+
attach_function :AMF_GetProp, [AMFObject, AVal, :int], AMFObjectProperty
|
116
|
+
|
117
|
+
# AMFDataType AMFProp_GetType(AMFObjectProperty * prop);
|
118
|
+
# void AMFProp_SetNumber(AMFObjectProperty * prop, double dval);
|
119
|
+
# void AMFProp_SetBoolean(AMFObjectProperty * prop, int bflag);
|
120
|
+
# void AMFProp_SetString(AMFObjectProperty * prop, AVal * str);
|
121
|
+
# void AMFProp_SetObject(AMFObjectProperty * prop, AMFObject * obj);
|
122
|
+
attach_function :AMFProp_GetType, [AMFObjectProperty], AMFDataType
|
123
|
+
#attach_function :AMFProp_SetNumber, [AMFObjectProperty, :double], :void
|
124
|
+
#attach_function :AMFProp_SetBoolean, [AMFObjectProperty, :int], :void
|
125
|
+
#attach_function :AMFProp_SetString, [AMFObjectProperty, AVal], :void
|
126
|
+
#attach_function :AMFProp_SetObject, [AMFObjectProperty, AMFObject], :void
|
127
|
+
|
128
|
+
# void AMFProp_GetName(AMFObjectProperty * prop, AVal * name);
|
129
|
+
# void AMFProp_SetName(AMFObjectProperty * prop, AVal * name);
|
130
|
+
# double AMFProp_GetNumber(AMFObjectProperty * prop);
|
131
|
+
# int AMFProp_GetBoolean(AMFObjectProperty * prop);
|
132
|
+
# void AMFProp_GetString(AMFObjectProperty * prop, AVal * str);
|
133
|
+
# void AMFProp_GetObject(AMFObjectProperty * prop, AMFObject * obj);
|
134
|
+
attach_function :AMFProp_GetName, [AMFObjectProperty, AVal], :void
|
135
|
+
attach_function :AMFProp_SetName, [AMFObjectProperty, AVal], :void
|
136
|
+
attach_function :AMFProp_GetNumber, [AMFObjectProperty], :double
|
137
|
+
attach_function :AMFProp_GetBoolean, [AMFObjectProperty], :int
|
138
|
+
attach_function :AMFProp_GetString, [AMFObjectProperty, AVal], :void
|
139
|
+
attach_function :AMFProp_GetObject, [AMFObjectProperty, AMFObject], :void
|
140
|
+
|
141
|
+
# int AMFProp_IsValid(AMFObjectProperty * prop);
|
142
|
+
attach_function :AMFProp_IsValid, [AMFObjectProperty], :int
|
143
|
+
|
144
|
+
# char *AMFProp_Encode(AMFObjectProperty * prop, char *pBuffer, char *pBufEnd);
|
145
|
+
# int AMF3Prop_Decode(AMFObjectProperty * prop, const char *pBuffer, int nSize, int bDecodeName);
|
146
|
+
# int AMFProp_Decode(AMFObjectProperty * prop, const char *pBuffer, int nSize, int bDecodeName);
|
147
|
+
attach_function :AMFProp_Encode, [AMFObjectProperty, :pointer, :pointer], :pointer
|
148
|
+
attach_function :AMF3Prop_Decode, [AMFObjectProperty, :pointer, :int, :int], :int
|
149
|
+
attach_function :AMFProp_Decode, [AMFObjectProperty, :pointer, :int, :int], :int
|
150
|
+
|
151
|
+
# void AMFProp_Dump(AMFObjectProperty * prop);
|
152
|
+
# void AMFProp_Reset(AMFObjectProperty * prop);
|
153
|
+
attach_function :AMFProp_Dump, [AMFObjectProperty], :void
|
154
|
+
attach_function :AMFProp_Reset, [AMFObjectProperty], :void
|
155
|
+
|
156
|
+
# void AMF3CD_AddProp(AMF3ClassDef * cd, AVal * prop);
|
157
|
+
# AVal *AMF3CD_GetProp(AMF3ClassDef * cd, int idx);
|
158
|
+
attach_function :AMF3CD_AddProp, [AMF3ClassDef, AVal], :void
|
159
|
+
attach_function :AMF3CD_GetProp, [AMF3ClassDef, :int], AVal
|
160
|
+
end
|
161
|
+
end
|
@@ -0,0 +1,240 @@
|
|
1
|
+
require 'ffi'
|
2
|
+
require 'librtmp/ffi/amf'
|
3
|
+
|
4
|
+
module Librtmp
|
5
|
+
module FFI
|
6
|
+
extend ::FFI::Library
|
7
|
+
|
8
|
+
ffi_lib 'librtmp'
|
9
|
+
|
10
|
+
RTMP_MAX_HEADER_SIZE = 18
|
11
|
+
RTMP_BUFFER_CACHE_SIZE = (16*1024)
|
12
|
+
RTMP_CHANNELS = 65600
|
13
|
+
RTMP_DEFAULT_CHUNKSIZE = 128
|
14
|
+
|
15
|
+
class RTMPChunk < ::FFI::Struct
|
16
|
+
layout :c_headerSize, :int,
|
17
|
+
:c_chunkSize, :int,
|
18
|
+
:c_chunk, :pointer,
|
19
|
+
:c_header, [:char, RTMP_MAX_HEADER_SIZE]
|
20
|
+
end
|
21
|
+
|
22
|
+
class RTMPPacket < ::FFI::Struct
|
23
|
+
layout :m_headerType, :uint8,
|
24
|
+
:m_packetType, :uint8,
|
25
|
+
:m_hasAbsTimestamp, :uint8,
|
26
|
+
:m_nChannel, :int,
|
27
|
+
:m_nTimestamp, :uint32,
|
28
|
+
:m_nInfoField2, :int32,
|
29
|
+
:m_nBodySize, :uint32,
|
30
|
+
:m_nBytesRead, :uint32,
|
31
|
+
:m_chunk, RTMPChunk,
|
32
|
+
:m_body, :pointer
|
33
|
+
end
|
34
|
+
|
35
|
+
class RTMPSockBuf < ::FFI::Struct
|
36
|
+
layout :sb_socket, :int,
|
37
|
+
:sb_size, :int,
|
38
|
+
:sb_start, :pointer,
|
39
|
+
:sb_buf, [:char, RTMP_BUFFER_CACHE_SIZE],
|
40
|
+
:sb_timedout, :int,
|
41
|
+
:sb_ssl, :pointer
|
42
|
+
end
|
43
|
+
|
44
|
+
RTMP_LF_AUTH = 0x0001
|
45
|
+
RTMP_LF_LIVE = 0x0002
|
46
|
+
RTMP_LF_SWFV = 0x0004
|
47
|
+
RTMP_LF_PLST = 0x0008
|
48
|
+
RTMP_LF_BUFX = 0x0010
|
49
|
+
RTMP_LF_FTCU = 0x0020
|
50
|
+
|
51
|
+
# typedef struct RTMP_LNK
|
52
|
+
# {
|
53
|
+
# #ifdef CRYPTO
|
54
|
+
# #define RTMP_SWF_HASHLEN 32
|
55
|
+
# void *dh; /* for encryption */
|
56
|
+
# void *rc4keyIn;
|
57
|
+
# void *rc4keyOut;
|
58
|
+
#
|
59
|
+
# uint32_t SWFSize;
|
60
|
+
# uint8_t SWFHash[RTMP_SWF_HASHLEN];
|
61
|
+
# char SWFVerificationResponse[RTMP_SWF_HASHLEN+10];
|
62
|
+
# #endif
|
63
|
+
# } RTMP_LNK;
|
64
|
+
class RTMP_LNK < ::FFI::Struct
|
65
|
+
layout :hostname, AVal,
|
66
|
+
:sockshost, AVal,
|
67
|
+
:playpath0, AVal,
|
68
|
+
:playpath, AVal,
|
69
|
+
:tcUrl, AVal,
|
70
|
+
:swfUrl, AVal,
|
71
|
+
:swfHash, AVal,
|
72
|
+
:pageUrl, AVal,
|
73
|
+
:app, AVal,
|
74
|
+
:auth, AVal,
|
75
|
+
:flashVer, AVal,
|
76
|
+
:subscribepath, AVal,
|
77
|
+
:usherToken, AVal,
|
78
|
+
:WeebToken, AVal,
|
79
|
+
:token, AVal,
|
80
|
+
:extras, AMFObject,
|
81
|
+
:depth, :int,
|
82
|
+
:seekTime, :int,
|
83
|
+
:stopTime, :int,
|
84
|
+
:lFlags, :int,
|
85
|
+
:swfAge, :int,
|
86
|
+
:swfSize, :int,
|
87
|
+
:protocol, :int,
|
88
|
+
:ConnectPacket, :int,
|
89
|
+
:CombineConnectPacket, :int,
|
90
|
+
:redirected, :int,
|
91
|
+
:timeout, :int,
|
92
|
+
:Extras, AVal,
|
93
|
+
:HandshakeResponse, AVal,
|
94
|
+
:socksport, :ushort,
|
95
|
+
:port, :ushort
|
96
|
+
end
|
97
|
+
|
98
|
+
RTMP_READ_HEADER = 0x01
|
99
|
+
RTMP_READ_RESUME = 0x02
|
100
|
+
RTMP_READ_NO_IGNORE = 0x04
|
101
|
+
RTMP_READ_GOTKF = 0x08
|
102
|
+
RTMP_READ_GOTFLVK = 0x10
|
103
|
+
RTMP_READ_SEEKING = 0x20
|
104
|
+
|
105
|
+
RTMP_READ_COMPLETE = -3
|
106
|
+
RTMP_READ_ERROR = -2
|
107
|
+
RTMP_READ_EOF = -1
|
108
|
+
RTMP_READ_IGNORE = 0
|
109
|
+
|
110
|
+
class RTMP_READ < ::FFI::Struct
|
111
|
+
layout :buf, :pointer,
|
112
|
+
:bufpos, :pointer,
|
113
|
+
:buflen, :uint,
|
114
|
+
:timestamp, :uint32,
|
115
|
+
:dataType, :uint8,
|
116
|
+
:flags, :uint8,
|
117
|
+
:status, :int8,
|
118
|
+
:initialFrameType, :uint8,
|
119
|
+
:nResumeTS, :uint32,
|
120
|
+
:metaHeader, :pointer,
|
121
|
+
:initialFrame, :pointer,
|
122
|
+
:nMetaHeaderSize, :uint32,
|
123
|
+
:nInitialFrameSize, :uint32,
|
124
|
+
:nIgnoredFrameCounter, :uint32,
|
125
|
+
:nIgnoredFlvFrameCounter, :uint32
|
126
|
+
end
|
127
|
+
|
128
|
+
class RTMP_METHOD < ::FFI::Struct
|
129
|
+
layout :name, AVal,
|
130
|
+
:num, :int
|
131
|
+
end
|
132
|
+
|
133
|
+
class RTMP < ::FFI::Struct
|
134
|
+
layout :m_inChunkSize, :int,
|
135
|
+
:m_outChunkSize, :int,
|
136
|
+
:m_nBWCheckCounter, :int,
|
137
|
+
:m_nBytesIn, :int,
|
138
|
+
:m_nBytesInSent, :int,
|
139
|
+
:m_nBufferMS, :int,
|
140
|
+
:m_stream_id, :int,
|
141
|
+
:m_mediaChannel, :int,
|
142
|
+
:m_mediaStamp, :uint32,
|
143
|
+
:m_pauseStamp, :uint32,
|
144
|
+
:m_pausing, :int,
|
145
|
+
:m_nServerBW, :int,
|
146
|
+
:m_nClientBW, :int,
|
147
|
+
:m_nClientBW2, :uint8,
|
148
|
+
:m_bPlaying, :uint8,
|
149
|
+
:m_bSendEncoding, :uint8,
|
150
|
+
:m_bSendCounter, :uint8,
|
151
|
+
:m_numInvoke, :int,
|
152
|
+
:m_numCalls, :int,
|
153
|
+
:m_methodCalls, RTMP_METHOD,
|
154
|
+
:m_vecChannelsIn, [RTMPPacket, RTMP_CHANNELS],
|
155
|
+
:m_vecChannelsOut, [RTMPPacket, RTMP_CHANNELS],
|
156
|
+
:m_channelTimestamp, [:int, RTMP_CHANNELS],
|
157
|
+
:m_fAudioCodecs, :double,
|
158
|
+
:m_fVideoCodecs, :double,
|
159
|
+
:m_fEncoding, :double,
|
160
|
+
:m_fDuration, :double,
|
161
|
+
:m_msgCounter, :int,
|
162
|
+
:m_polling, :int,
|
163
|
+
:m_resplen, :int,
|
164
|
+
:m_unackd, :int,
|
165
|
+
:m_clientID, AVal,
|
166
|
+
:m_read, RTMP_READ,
|
167
|
+
:m_write, RTMPPacket,
|
168
|
+
:m_sb, RTMPSockBuf,
|
169
|
+
:Link, RTMP_LNK
|
170
|
+
end
|
171
|
+
|
172
|
+
attach_function :RTMPPacket_Reset, [RTMPPacket], :void
|
173
|
+
attach_function :RTMPPacket_Dump, [RTMPPacket], :void
|
174
|
+
attach_function :RTMPPacket_Alloc, [RTMPPacket, :int], :int
|
175
|
+
attach_function :RTMPPacket_Free, [RTMPPacket], :void
|
176
|
+
|
177
|
+
attach_function :RTMP_ParseURL, [:string, :pointer, AVal, :pointer, AVal, AVal], :int
|
178
|
+
|
179
|
+
attach_function :RTMP_ParsePlaypath, [AVal, AVal], :void
|
180
|
+
attach_function :RTMP_SetBufferMS, [RTMP, :int], :void
|
181
|
+
attach_function :RTMP_UpdateBufferMS, [RTMP], :void
|
182
|
+
|
183
|
+
attach_function :RTMP_SetOpt, [RTMP, AVal, AVal], :int
|
184
|
+
attach_function :RTMP_SetupURL, [RTMP, :pointer], :int
|
185
|
+
attach_function :RTMP_SetupStream, [RTMP, :int, AVal, :uint, AVal, AVal,
|
186
|
+
AVal, AVal, AVal, AVal, AVal, AVal,
|
187
|
+
:uint32, AVal, AVal, AVal, AVal, :int,
|
188
|
+
:int, :int, :long], :void
|
189
|
+
|
190
|
+
attach_function :RTMP_Connect, [RTMP, RTMPPacket], :int
|
191
|
+
attach_function :RTMP_Connect0, [RTMP, :pointer], :int
|
192
|
+
attach_function :RTMP_Connect1, [RTMP, RTMPPacket], :int
|
193
|
+
attach_function :RTMP_Serve, [RTMP], :int
|
194
|
+
|
195
|
+
attach_function :RTMP_ReadPacket, [RTMP, RTMPPacket], :int
|
196
|
+
attach_function :RTMP_SendPacket, [RTMP, RTMPPacket, :int], :int
|
197
|
+
attach_function :RTMP_SendChunk, [RTMP, RTMPChunk], :int
|
198
|
+
attach_function :RTMP_IsConnected, [RTMP], :int
|
199
|
+
attach_function :RTMP_Socket, [RTMP], :int
|
200
|
+
attach_function :RTMP_IsTimedout, [RTMP], :int
|
201
|
+
attach_function :RTMP_GetDuration, [RTMP], :double
|
202
|
+
attach_function :RTMP_ToggleStream, [RTMP], :int
|
203
|
+
|
204
|
+
attach_function :RTMP_ConnectStream, [RTMP, :int], :int
|
205
|
+
attach_function :RTMP_ReconnectStream, [RTMP, :int], :int
|
206
|
+
attach_function :RTMP_DeleteStream, [RTMP], :void
|
207
|
+
attach_function :RTMP_GetNextMediaPacket, [RTMP, RTMPPacket], :int
|
208
|
+
attach_function :RTMP_ClientPacket, [RTMP, RTMPPacket], :int
|
209
|
+
|
210
|
+
attach_function :RTMP_Init, [RTMP], :void
|
211
|
+
attach_function :RTMP_Close, [RTMP], :void
|
212
|
+
attach_function :RTMP_Alloc, [RTMP], RTMP
|
213
|
+
attach_function :RTMP_Free, [RTMP], :void
|
214
|
+
attach_function :RTMP_EnableWrite, [RTMP], :void
|
215
|
+
|
216
|
+
attach_function :RTMP_LibVersion, [], :int
|
217
|
+
attach_function :RTMP_UserInterrupt, [], :int
|
218
|
+
|
219
|
+
attach_function :RTMP_SendCtrl, [RTMP, :short, :uint, :uint], :int
|
220
|
+
|
221
|
+
attach_function :RTMP_SendPause, [RTMP, :int, :int], :int
|
222
|
+
attach_function :RTMP_Pause, [RTMP, :int], :int
|
223
|
+
|
224
|
+
attach_function :RTMP_FindFirstMatchingProperty, [AMFObject, AVal, AMFObjectProperty], :int
|
225
|
+
|
226
|
+
attach_function :RTMPSockBuf_Fill, [RTMPSockBuf], :int
|
227
|
+
attach_function :RTMPSockBuf_Send, [RTMPSockBuf, :string, :int], :int
|
228
|
+
attach_function :RTMPSockBuf_Close, [RTMPSockBuf], :int
|
229
|
+
|
230
|
+
attach_function :RTMP_SendCreateStream, [RTMP], :int
|
231
|
+
attach_function :RTMP_SendSeek, [RTMP, :int], :int
|
232
|
+
attach_function :RTMP_SendServerBW, [RTMP], :int
|
233
|
+
attach_function :RTMP_SendClientBW, [RTMP], :int
|
234
|
+
attach_function :RTMP_DropRequest, [RTMP, :int, :int], :void
|
235
|
+
attach_function :RTMP_Read, [RTMP, :pointer, :int], :int
|
236
|
+
attach_function :RTMP_Write, [RTMP, :string, :int], :int
|
237
|
+
|
238
|
+
attach_function :RTMP_HashSWF, [:string, :pointer, :pointer, :int], :int
|
239
|
+
end
|
240
|
+
end
|
data/librtmp.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "librtmp/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "librtmp"
|
7
|
+
s.version = Librtmp::VERSION
|
8
|
+
s.authors = ["James Thompson"]
|
9
|
+
s.email = ["james@plainprograms.com"]
|
10
|
+
s.homepage = "http://github.com/plainprograms/ruby-librtmp"
|
11
|
+
s.summary = %q{Wraps the librtmp library from rtmpdump with Ruby}
|
12
|
+
s.description = %q{Provides a wrapper for the librtmp library in Ruby to allow use of the RTMP streaming protocols}
|
13
|
+
|
14
|
+
s.rubyforge_project = "librtmp"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
# s.add_development_dependency "rspec"
|
23
|
+
s.add_runtime_dependency "ffi"
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: librtmp
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- James Thompson
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-04-19 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: ffi
|
16
|
+
requirement: &70190125709880 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70190125709880
|
25
|
+
description: Provides a wrapper for the librtmp library in Ruby to allow use of the
|
26
|
+
RTMP streaming protocols
|
27
|
+
email:
|
28
|
+
- james@plainprograms.com
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- .gitignore
|
34
|
+
- .rvmrc
|
35
|
+
- Gemfile
|
36
|
+
- README.md
|
37
|
+
- Rakefile
|
38
|
+
- lib/librtmp.rb
|
39
|
+
- lib/librtmp/ffi.rb
|
40
|
+
- lib/librtmp/ffi/amf.rb
|
41
|
+
- lib/librtmp/ffi/rtmp.rb
|
42
|
+
- lib/librtmp/version.rb
|
43
|
+
- librtmp.gemspec
|
44
|
+
homepage: http://github.com/plainprograms/ruby-librtmp
|
45
|
+
licenses: []
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options: []
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
requirements: []
|
63
|
+
rubyforge_project: librtmp
|
64
|
+
rubygems_version: 1.8.12
|
65
|
+
signing_key:
|
66
|
+
specification_version: 3
|
67
|
+
summary: Wraps the librtmp library from rtmpdump with Ruby
|
68
|
+
test_files: []
|