librtmp 0.1.1 → 0.1.2

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/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: