librtmp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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: []
|