librtmp 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ v0.1.2
2
+ ======
3
+ * Fixed issue with Streamer#send not handling null bytes well for binary data;
4
+ required adjusting Librtmp::FFI#RTMP_Write() implementation to expect a
5
+ pointer instead of a string.
6
+ * Stubbed out implementation for converting a Hash sent to Streamer#send into
7
+ an AMF Object to send over the stream.
8
+
1
9
  v0.1.1
2
10
  ======
3
11
 
@@ -233,7 +233,7 @@ module Librtmp
233
233
  attach_function :RTMP_SendClientBW, [RTMP], :int
234
234
  attach_function :RTMP_DropRequest, [RTMP, :int, :int], :void
235
235
  attach_function :RTMP_Read, [RTMP, :pointer, :int], :int
236
- attach_function :RTMP_Write, [RTMP, :string, :int], :int
236
+ attach_function :RTMP_Write, [RTMP, :pointer, :int], :int
237
237
 
238
238
  attach_function :RTMP_HashSWF, [:string, :pointer, :pointer, :int], :int
239
239
  end
@@ -33,12 +33,14 @@ module Librtmp
33
33
 
34
34
  def send(data)
35
35
  if data.is_a?(Hash)
36
- # TODO Handle conversion of Hash to AMF Object
36
+ packet = build_metadata_packet(data)
37
+
38
+ FFI::RTMP_SendPacket(@session_ptr, packet.pointer, 1)
37
39
  else
38
- chunk = data.to_s
39
- chunk_size = chunk.bytes.to_a.size
40
+ data_buffer = ::FFI::MemoryPointer.new(:char, data.size)
41
+ data_buffer.put_bytes(0, data)
40
42
 
41
- FFI::RTMP_Write(@session_ptr, chunk, chunk_size)
43
+ FFI::RTMP_Write(@session_ptr, data_buffer, data.size)
42
44
  end
43
45
  end
44
46
 
@@ -59,5 +61,40 @@ module Librtmp
59
61
 
60
62
  @session = FFI::RTMP.new @session_ptr
61
63
  end
64
+
65
+ def build_metadata_packet(data)
66
+ packet = FFI::RTMPPacket.new
67
+ amf_object = FFI::AMFObject.new
68
+ amf_object_ptr = amf_object.pointer
69
+
70
+ data.each do |key, value|
71
+ amf_prop = FFI::AMFObjectProperty.new
72
+ amf_prop_ptr = amf_prop.pointer
73
+
74
+ prop_name = key.to_s
75
+ aval = FFI::AVal.new
76
+ aval.av_len = prop_name.bytes.to_a.size
77
+ aval.av_val = ::FFI::MemoryPointer.from_string(prop_name)
78
+
79
+ amf_prop.p_name = name_aval
80
+
81
+ case value
82
+ when is_a?(String)
83
+ amf_prop.p_type = :amf_string
84
+
85
+ aval = FFI::AVal.new
86
+ aval.av_len = value.bytes.to_a.size
87
+ aval.av_val = ::FFI::MemoryPointer.from_string(value)
88
+
89
+ amf_prop.p_vu.p_aval = aval
90
+ else
91
+ #???
92
+ end
93
+
94
+ FFI::AMF_AddProp(amf_object_ptr, amf_prop_ptr)
95
+ end
96
+
97
+ packet
98
+ end
62
99
  end
63
100
  end
@@ -1,3 +1,3 @@
1
1
  module Librtmp
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.2'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: librtmp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-04-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70213899045000 !ruby/object:Gem::Requirement
16
+ requirement: &70224132986380 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70213899045000
24
+ version_requirements: *70224132986380
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: ffi
27
- requirement: &70213899044520 !ruby/object:Gem::Requirement
27
+ requirement: &70224132985900 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70213899044520
35
+ version_requirements: *70224132985900
36
36
  description: Provides a wrapper for the librtmp library in Ruby to allow use of the
37
37
  RTMP streaming protocols
38
38
  email: