kurento_rails 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.
Files changed (34) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.travis.yml +4 -0
  4. data/CODE_OF_CONDUCT.md +13 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +41 -0
  8. data/Rakefile +25 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +7 -0
  11. data/kurento_rails.gemspec +30 -0
  12. data/lib/generators/kurento_rails/install_generator.rb +45 -0
  13. data/lib/generators/kurento_rails/templates/config/events.rb +24 -0
  14. data/lib/generators/kurento_rails/templates/controllers/kurento_controller.rb +27 -0
  15. data/lib/generators/kurento_rails/templates/controllers/kurento_websockets_controller.rb +103 -0
  16. data/lib/generators/kurento_rails/templates/javascript/kurento-rails-js/adapterjs/publish/adapter.min.js +3 -0
  17. data/lib/generators/kurento_rails/templates/javascript/kurento-rails-js/kurento-client/js/kurento-client.map +1 -0
  18. data/lib/generators/kurento_rails/templates/javascript/kurento-rails-js/kurento-client/js/kurento-client.min.js +557 -0
  19. data/lib/generators/kurento_rails/templates/javascript/kurento-rails-js/kurento-rails.js +635 -0
  20. data/lib/generators/kurento_rails/templates/javascript/kurento-rails-js/kurento-utils/js/kurento-utils.map +1 -0
  21. data/lib/generators/kurento_rails/templates/javascript/kurento-rails-js/kurento-utils/js/kurento-utils.min.js +36 -0
  22. data/lib/generators/kurento_rails/templates/migrations/create_video_streams.rb +13 -0
  23. data/lib/generators/kurento_rails/templates/models/kurento_rails_video_stream.rb +2 -0
  24. data/lib/generators/kurento_rails/templates/views/kurento/broadcast.html.slim +2 -0
  25. data/lib/generators/kurento_rails/templates/views/kurento/index.html.slim +2 -0
  26. data/lib/generators/kurento_rails/templates/views/kurento/old_streams.html.slim +2 -0
  27. data/lib/kurento_rails.rb +5 -0
  28. data/lib/kurento_rails/version.rb +3 -0
  29. data/src/events.rb +24 -0
  30. data/src/kurento-rails.coffee +387 -0
  31. data/src/kurento_controller.rb +27 -0
  32. data/src/kurento_rails_video_stream.rb +2 -0
  33. data/src/kurento_websockets_controller.rb +103 -0
  34. metadata +161 -0
@@ -0,0 +1,27 @@
1
+ class KurentoController < ApplicationController
2
+
3
+ # this shows all currently active streams, then lets a user connect to one if they would like
4
+ def index
5
+ @streams = KurentoRailsVideoStream.where(streaming: true)
6
+ end
7
+
8
+ # this allows a user to create a new stream. It probably should be role protected, but isn't for now
9
+ def broadcast
10
+
11
+ end
12
+
13
+ # this is just a simple alias
14
+ def receive
15
+ redirect_to action: "index"
16
+ end
17
+
18
+ # This lets a client look at all of the old streams that have been played, and watch whichever one they would like
19
+ def old_streams
20
+ @streams = KurentoRailsVideoStream.where(streaming: false).order(updated_at: 'desc')
21
+ end
22
+
23
+ private
24
+ def stream_params
25
+ params.permit :id, :pipeline, :file_url, :sender_rtc, :viewer_rtc, :hub, :streaming, :name
26
+ end
27
+ end
@@ -0,0 +1,2 @@
1
+ class KurentoRailsVideoStream < ActiveRecord::Base
2
+ end
@@ -0,0 +1,103 @@
1
+ class KurentoWebsocketsController < WebsocketRails::BaseController
2
+
3
+ public
4
+ # just to see if this can make things work
5
+ # def process_action(method, event)
6
+ # puts "Calling process action with method #{method} and event #{event}"
7
+ # super(method, event)
8
+ # end
9
+
10
+ def active_streams
11
+ search_params = message.merge streaming: true
12
+ streams = KurentoRailsVideoStream.where(search_params)
13
+ trigger_success streams
14
+ end
15
+
16
+ def recorded_streams
17
+ search_params = message.merge streaming: false
18
+ streams = KurentoRailsVideoStream.where(search_params)
19
+ trigger_success streams
20
+ end
21
+
22
+ # tell all users that a new video is available
23
+ def broadcast
24
+ stream = KurentoRailsVideoStream.new(stream_params(message))
25
+ if stream.save
26
+ # notify any people watching active streams that this stream is available
27
+ WebsocketRails[:video_streams].trigger 'new', stream
28
+ # store the fact that this user was broadcasting
29
+ connection_store[:streaming] = stream.id
30
+ # and now trigger the success callback
31
+ trigger_success stream
32
+ else
33
+ trigger_failure stream
34
+ end
35
+ end
36
+
37
+ # tell all users that this broadcast is no longer streaming
38
+ def stop_broadcasting
39
+ stream = KurentoRailsVideoStream.find(connection_store[:streaming])
40
+ stream.streaming = false
41
+ if stream.save
42
+ # perform the relevant stop streaming actions
43
+ stop_streaming stream
44
+ # and finally, trigger the success callback
45
+ trigger_success stream
46
+ else
47
+ trigger_failure stream
48
+ end
49
+ end
50
+
51
+ # let a user know if a video is available for streaming or not
52
+ def view
53
+ stream = KurentoRailsVideoStream.find(stream_params(message)[:id])
54
+ # if this stream is active, great
55
+ if stream.streaming
56
+ trigger_success stream
57
+ else
58
+ trigger_failure stream
59
+ end
60
+ end
61
+
62
+ # handle a user disconnecting from rails.
63
+ # Usually, this would happen because the user refreshes the page
64
+ def user_disconnect
65
+ # check to see if the user was broadcasting video. If they were, then we need
66
+ # to notify all users viewing their channel that they're no longer broadcasting
67
+ if connection_store[:streaming]
68
+ stream = KurentoRailsVideoStream.find(connection_store[:streaming])
69
+ stop_streaming stream
70
+ end
71
+ end
72
+
73
+ private
74
+ def stream_params(params)
75
+ new_params = {}
76
+ new_params[:id] = params[:id]
77
+ new_params[:pipeline] = params[:pipeline]
78
+ new_params[:file_url] = params[:file_url]
79
+ new_params[:sender_rtc] = params
80
+
81
+ permit params, :id, :pipeline, :file_url, :sender_rtc, :streaming, :name
82
+ end
83
+
84
+ def permit(original_hash, *allowed_fields)
85
+ new_hash = {}
86
+ if allowed_fields.nil?
87
+ return {}
88
+ end
89
+ allowed_fields.each do |field|
90
+ new_hash[field] = original_hash[field]
91
+ end
92
+ new_hash
93
+ end
94
+
95
+ def stop_streaming(stream)
96
+ # Notify any people watching active streams that this stream isn't available any more
97
+ WebsocketRails[:video_streams].trigger 'remove', stream
98
+ # Also notify people watching this stream that it has ended
99
+ WebsocketRails["stream-#{stream.id}"].trigger 'end-of-stream', stream
100
+ # remove the stream from the connection store
101
+ connection_store[:streaming] = nil
102
+ end
103
+ end
metadata ADDED
@@ -0,0 +1,161 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kurento_rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Andrew Stephenson
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-04-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: jquery-rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: coffee-script
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: websocket-rails
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: All of the ruby and javascript files you should need to easily integrate
98
+ kurento video streaming into your rails project
99
+ email:
100
+ - Andrew.Stephenson123@gmail.com
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".gitignore"
106
+ - ".travis.yml"
107
+ - CODE_OF_CONDUCT.md
108
+ - Gemfile
109
+ - LICENSE.txt
110
+ - README.md
111
+ - Rakefile
112
+ - bin/console
113
+ - bin/setup
114
+ - kurento_rails.gemspec
115
+ - lib/generators/kurento_rails/install_generator.rb
116
+ - lib/generators/kurento_rails/templates/config/events.rb
117
+ - lib/generators/kurento_rails/templates/controllers/kurento_controller.rb
118
+ - lib/generators/kurento_rails/templates/controllers/kurento_websockets_controller.rb
119
+ - lib/generators/kurento_rails/templates/javascript/kurento-rails-js/adapterjs/publish/adapter.min.js
120
+ - lib/generators/kurento_rails/templates/javascript/kurento-rails-js/kurento-client/js/kurento-client.map
121
+ - lib/generators/kurento_rails/templates/javascript/kurento-rails-js/kurento-client/js/kurento-client.min.js
122
+ - lib/generators/kurento_rails/templates/javascript/kurento-rails-js/kurento-rails.js
123
+ - lib/generators/kurento_rails/templates/javascript/kurento-rails-js/kurento-utils/js/kurento-utils.map
124
+ - lib/generators/kurento_rails/templates/javascript/kurento-rails-js/kurento-utils/js/kurento-utils.min.js
125
+ - lib/generators/kurento_rails/templates/migrations/create_video_streams.rb
126
+ - lib/generators/kurento_rails/templates/models/kurento_rails_video_stream.rb
127
+ - lib/generators/kurento_rails/templates/views/kurento/broadcast.html.slim
128
+ - lib/generators/kurento_rails/templates/views/kurento/index.html.slim
129
+ - lib/generators/kurento_rails/templates/views/kurento/old_streams.html.slim
130
+ - lib/kurento_rails.rb
131
+ - lib/kurento_rails/version.rb
132
+ - src/events.rb
133
+ - src/kurento-rails.coffee
134
+ - src/kurento_controller.rb
135
+ - src/kurento_rails_video_stream.rb
136
+ - src/kurento_websockets_controller.rb
137
+ homepage: https://github.com/andrewls/kurento-rails
138
+ licenses:
139
+ - MIT
140
+ metadata: {}
141
+ post_install_message:
142
+ rdoc_options: []
143
+ require_paths:
144
+ - lib
145
+ required_ruby_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ required_rubygems_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ requirements: []
156
+ rubyforge_project:
157
+ rubygems_version: 2.4.5
158
+ signing_key:
159
+ specification_version: 4
160
+ summary: Kurento integration for Rails apps
161
+ test_files: []