glimmer-cw-video 0.1.3 → 1.0.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +28 -0
- data/README.md +101 -20
- data/VERSION +1 -0
- data/lib/glimmer-cw-video.rb +2 -0
- data/lib/views/glimmer/video.rb +57 -3
- data/samples/launch +6 -0
- data/samples/video/hello_looped_video_with_black_background.rb +10 -0
- data/samples/video/hello_video.rb +9 -0
- data/samples/video/hello_video_observers.rb +50 -0
- data/samples/video/videos/Ants.mp4 +0 -0
- data/samples/video/videos/Blackpool_Timelapse.mp4 +0 -0
- data/samples/video/videos/Clouds_passing_by_CCBY_NatureClip.mp4 +0 -0
- metadata +33 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 12ba9b4c7e64db7a363ab1d05166ae8d9ff916726f44a691f44dd3107fb1c839
|
4
|
+
data.tar.gz: ede349878b4b018aaef0c56718800884a79efe4ee7c4cecbf3045f10d6ee36f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 798c5b9f4089204b473902de74ad83d3434a8f6817dc5d36bcfab1364ae2b046b05668005cef6d02558f29f4b99e39a8722c91b3d7812f59df8d5bfb80bda35c
|
7
|
+
data.tar.gz: 103dd4980a6779c63e545837752eb593e3c2507854413bcddcac32c8cb9000669afaed8e2a5ee369f141836d0afc4f092221482cb880cdba89727fe24be4c8b1
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# Change Log
|
2
|
+
|
3
|
+
## 1.0.0
|
4
|
+
|
5
|
+
- Upgraded to Glimmer DSL for SWT 4.17.0.0
|
6
|
+
- Made samples available via the `glimmer` command (e.g. glimmer sample:run[hello_video])
|
7
|
+
- `#toggle` method for video play/pause action (plays if paused and pauses if playing)
|
8
|
+
- Handle non-absolute files
|
9
|
+
- Validate video file and raise error if invalid
|
10
|
+
- Fast-Forward & Rewind
|
11
|
+
- Volume get, set, up, and down
|
12
|
+
- mute, unmute, muted?, and toggle_muted
|
13
|
+
|
14
|
+
## 0.1.3
|
15
|
+
|
16
|
+
- Fixed an issue with hooking widget observers via symbol instead of a string
|
17
|
+
|
18
|
+
## 0.1.2
|
19
|
+
|
20
|
+
- Upgraded to the glimmer-dsl-swt 0.4.1, glimmer-dsl-xml 0.1.0, and glimmer-dsl-css 0.1.0
|
21
|
+
|
22
|
+
## 0.1.1
|
23
|
+
|
24
|
+
- Upgraded to Glimmer 0.8.0 with a relaxed version requirement
|
25
|
+
|
26
|
+
## 0.1.0
|
27
|
+
|
28
|
+
- Initial version
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Video 0.
|
1
|
+
# Video 1.0.0
|
2
2
|
## [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=40 /> Glimmer Custom Widget](https://github.com/AndyObtiva/glimmer#custom-widget-gem)
|
3
3
|
[](http://badge.fury.io/rb/glimmer-cw-video)
|
4
4
|
[](https://travis-ci.com/github/AndyObtiva/glimmer-cw-video)
|
@@ -29,7 +29,7 @@ This has been tested and confirmed to be working on:
|
|
29
29
|
Add the following to a Glimmer application `Gemfile`:
|
30
30
|
|
31
31
|
```ruby
|
32
|
-
gem 'glimmer-cw-video', '0.
|
32
|
+
gem 'glimmer-cw-video', '1.0.0'
|
33
33
|
```
|
34
34
|
|
35
35
|
Run:
|
@@ -49,9 +49,9 @@ require 'glimmer-cw-video'
|
|
49
49
|
# ... more require statements follow
|
50
50
|
```
|
51
51
|
|
52
|
-
## Options
|
52
|
+
## API Options
|
53
53
|
|
54
|
-
Here are the options to pass in as hash arguments to the `video` widget keyword (see in [
|
54
|
+
Here are the options to pass in as hash arguments to the `video` widget keyword (see in [Samples](#samples)):
|
55
55
|
- `autoplay` (true [default] or false): plays video automatically as soon as loaded
|
56
56
|
- `controls` (true [default] or false): displays controls
|
57
57
|
- `looped` (true or false [default]): plays video in looped mode
|
@@ -61,10 +61,11 @@ Here are the options to pass in as hash arguments to the `video` widget keyword
|
|
61
61
|
- `offset_x` (integer [default: 0]): offset from left border. Could be a negative number if you want to show only an area of the video. Useful when fit_to_width is false to pick an area of the video to display.
|
62
62
|
- `offset_y` (integer [default: 0]): offset from top border. Could be a negative number if you want to show only an area of the video. Useful when fit_to_height is false to pick an area of the video to display.
|
63
63
|
|
64
|
-
## Methods
|
64
|
+
## API Methods
|
65
65
|
|
66
66
|
- `#play`: plays video
|
67
67
|
- `#pause`: pauses video
|
68
|
+
- `#toggle`: toggles video playback, playing if paused, and pausing if playing.
|
68
69
|
- `#reload`: reloads video restarting from beginning
|
69
70
|
- `#position`: position in seconds (and fractions)
|
70
71
|
- `#position=`: seeks a new position in video
|
@@ -73,17 +74,42 @@ Here are the options to pass in as hash arguments to the `video` widget keyword
|
|
73
74
|
- `#playing?`: returns true when video is actively playing
|
74
75
|
- `#paused?`: returns true when video is not playing
|
75
76
|
- `#ended?`: returns true when video has reached the end (position == duration)
|
77
|
+
- `#volume`: returns video volume (0.0 - 1.0 float value)
|
78
|
+
- `#volume=`: sets video volume (0.0 - 1.0 float value)
|
79
|
+
- `#volume_up(value=0.05)`: bumps video volume up by a specified value or default
|
80
|
+
- `#volume_down(value=0.05)`: bumps video volume down by a specified value or default
|
81
|
+
- `#mute`: mutes video
|
82
|
+
- `#unmute`: unmutes video
|
83
|
+
- `#muted?`: returns true if video is muted
|
84
|
+
- `#toggle_muted`: mutes/unmutes video depending on `muted?` attribute
|
76
85
|
|
77
|
-
|
86
|
+
|
87
|
+
## API Observer Events
|
88
|
+
|
89
|
+
(see in [Samples](#samples))
|
78
90
|
|
79
91
|
- `on_loaded`: invoked when video `#loaded?` becomes true
|
80
92
|
- `on_ended`: invoked when video `#ended?` becomes true
|
81
93
|
- `on_playing`: invoked when video `#playing?` becomes true
|
82
94
|
- `on_paused`: invoked when video `#paused?` becomes true
|
83
95
|
|
84
|
-
##
|
96
|
+
## Samples
|
97
|
+
|
98
|
+
Run this command to list available Video samples:
|
99
|
+
|
100
|
+
```
|
101
|
+
glimmer sample:list
|
102
|
+
```
|
103
|
+
|
104
|
+
### Hello, Video!
|
105
|
+
|
106
|
+
Run:
|
107
|
+
|
108
|
+
```
|
109
|
+
glimmer sample:run[hello_video]
|
110
|
+
```
|
85
111
|
|
86
|
-
|
112
|
+
Glimmer Code (from [samples/video/hello_video.rb](samples/video/hello_video.rb)):
|
87
113
|
|
88
114
|
```ruby
|
89
115
|
# ...
|
@@ -92,7 +118,19 @@ shell {
|
|
92
118
|
}.open
|
93
119
|
```
|
94
120
|
|
95
|
-
|
121
|
+
Glimmer App:
|
122
|
+
|
123
|
+

|
124
|
+
|
125
|
+
### Hello, Looped Video with Black Background!
|
126
|
+
|
127
|
+
Run:
|
128
|
+
|
129
|
+
```
|
130
|
+
glimmer sample:run[hello_looped_video_with_black_background]
|
131
|
+
```
|
132
|
+
|
133
|
+
Glimmer Code (from [samples/video/hello_looped_video_with_black_background.rb](samples/video/hello_looped_video_with_black_background.rb)):
|
96
134
|
|
97
135
|
```ruby
|
98
136
|
# ...
|
@@ -102,28 +140,66 @@ shell {
|
|
102
140
|
}.open
|
103
141
|
```
|
104
142
|
|
105
|
-
|
143
|
+
Glimmer App:
|
144
|
+
|
145
|
+

|
146
|
+
|
147
|
+
### Hello, Video Observers!
|
148
|
+
|
149
|
+
Run:
|
150
|
+
|
151
|
+
```
|
152
|
+
glimmer sample:run[hello_video_observers]
|
153
|
+
```
|
154
|
+
|
155
|
+
Glimmer Code (from [samples/video/hello_video_observers.rb](samples/video/hello_video_observers.rb)):
|
106
156
|
|
107
157
|
```ruby
|
108
158
|
# ...
|
159
|
+
require_relative '../../lib/glimmer-cw-video'
|
160
|
+
|
161
|
+
include Glimmer
|
162
|
+
|
163
|
+
video_file = File.expand_path('../videos/Ants.mp4', __FILE__)
|
164
|
+
|
109
165
|
def display_video_status(video, status)
|
110
|
-
message_box
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
message_box.setMessage(message)
|
115
|
-
message_box.open
|
166
|
+
message_box {
|
167
|
+
text status
|
168
|
+
message "#{video.position.round(2)}/#{video.duration.round(2)} seconds have elapsed."
|
169
|
+
}.open
|
116
170
|
end
|
117
171
|
|
118
172
|
@shell = shell {
|
119
173
|
minimum_size 800, 500
|
120
174
|
@video = video(file: video_file, background: :black) {
|
175
|
+
on_swt_show { |event|
|
176
|
+
# set focus as soon as the SWT widget is shown to grab keyboard events below
|
177
|
+
@video.set_focus
|
178
|
+
}
|
179
|
+
|
180
|
+
on_key_pressed { |event|
|
181
|
+
case event.keyCode
|
182
|
+
when swt(:space), swt(:cr)
|
183
|
+
@video.toggle
|
184
|
+
when swt(:arrow_left)
|
185
|
+
@video.rewind
|
186
|
+
when swt(:arrow_right)
|
187
|
+
@video.fast_forward
|
188
|
+
when swt(:arrow_up)
|
189
|
+
@video.volume_up
|
190
|
+
when swt(:arrow_down)
|
191
|
+
@video.volume_down
|
192
|
+
end
|
193
|
+
}
|
194
|
+
|
121
195
|
on_playing {
|
122
196
|
display_video_status(@video, 'Playing')
|
123
197
|
}
|
198
|
+
|
124
199
|
on_paused {
|
125
200
|
display_video_status(@video, 'Paused')
|
126
201
|
}
|
202
|
+
|
127
203
|
on_ended {
|
128
204
|
display_video_status(@video, 'Ended')
|
129
205
|
}
|
@@ -132,12 +208,17 @@ end
|
|
132
208
|
@shell.open
|
133
209
|
```
|
134
210
|
|
211
|
+
Glimmer App:
|
212
|
+
|
213
|
+

|
214
|
+
|
215
|
+
## TODO
|
216
|
+
|
217
|
+
[TODO.md](TODO.md)
|
218
|
+
|
135
219
|
## Change Log
|
136
220
|
|
137
|
-
|
138
|
-
- 0.1.2: Upgraded to the glimmer-dsl-swt 0.4.1, glimmer-dsl-xml 0.1.0, and glimmer-dsl-css 0.1.0
|
139
|
-
- 0.1.1: Upgraded to Glimmer 0.8.0 with a relaxed version requirement
|
140
|
-
- 0.1.0: Initial version
|
221
|
+
[CHANGELOG.md](CHANGELOG.md)
|
141
222
|
|
142
223
|
## Contributing to glimmer-cw-video
|
143
224
|
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.0.0
|
data/lib/glimmer-cw-video.rb
CHANGED
data/lib/views/glimmer/video.rb
CHANGED
@@ -20,7 +20,12 @@ module Glimmer
|
|
20
20
|
alias looped? looped
|
21
21
|
alias fit_to_width? fit_to_width
|
22
22
|
alias fit_to_height? fit_to_height
|
23
|
-
|
23
|
+
|
24
|
+
before_body {
|
25
|
+
file_source = file
|
26
|
+
raise "Video file does not exist: #{file_source}" if file_source && !file_source.start_with?('uri:classloader') && !File.exist?(File.expand_path(file_source))
|
27
|
+
}
|
28
|
+
|
24
29
|
body {
|
25
30
|
browser(:no_scroll) {
|
26
31
|
text html {
|
@@ -66,7 +71,7 @@ module Glimmer
|
|
66
71
|
}
|
67
72
|
}
|
68
73
|
|
69
|
-
def source
|
74
|
+
def source
|
70
75
|
file_source = file
|
71
76
|
if file_source
|
72
77
|
if file_source.start_with?('uri:classloader')
|
@@ -81,6 +86,7 @@ module Glimmer
|
|
81
86
|
File.binwrite(tmp_file, file_content)
|
82
87
|
"file://#{tmp_file}"
|
83
88
|
else
|
89
|
+
file_source = File.expand_path(file_source)
|
84
90
|
"file://#{file_source}"
|
85
91
|
end
|
86
92
|
else
|
@@ -105,6 +111,10 @@ module Glimmer
|
|
105
111
|
def pause
|
106
112
|
video_action('pause')
|
107
113
|
end
|
114
|
+
|
115
|
+
def toggle
|
116
|
+
paused? ? play : pause
|
117
|
+
end
|
108
118
|
|
109
119
|
def reload
|
110
120
|
video_action('load')
|
@@ -132,12 +142,56 @@ module Glimmer
|
|
132
142
|
end
|
133
143
|
|
134
144
|
def position=(new_position)
|
145
|
+
new_position = [new_position, 0].max
|
146
|
+
new_position = [new_position, duration].min
|
135
147
|
video_attribute_set('currentTime', new_position)
|
136
148
|
end
|
149
|
+
|
150
|
+
def fast_forward(seconds=15)
|
151
|
+
self.position += seconds
|
152
|
+
end
|
153
|
+
|
154
|
+
def rewind(seconds=15)
|
155
|
+
self.position -= seconds
|
156
|
+
end
|
137
157
|
|
138
158
|
def duration
|
139
159
|
video_attribute('duration')
|
140
160
|
end
|
161
|
+
|
162
|
+
def volume
|
163
|
+
video_attribute('volume')
|
164
|
+
end
|
165
|
+
|
166
|
+
def volume=(value)
|
167
|
+
value = [value, 0].max
|
168
|
+
value = [value, 1].min
|
169
|
+
video_attribute_set('volume', value)
|
170
|
+
end
|
171
|
+
|
172
|
+
def volume_up(value=0.05)
|
173
|
+
self.volume += value
|
174
|
+
end
|
175
|
+
|
176
|
+
def volume_down(value=0.05)
|
177
|
+
self.volume -= value
|
178
|
+
end
|
179
|
+
|
180
|
+
def mute
|
181
|
+
video_attribute_set('muted', true)
|
182
|
+
end
|
183
|
+
|
184
|
+
def unmute
|
185
|
+
video_attribute_set('muted', false)
|
186
|
+
end
|
187
|
+
|
188
|
+
def muted?
|
189
|
+
video_attribute('muted')
|
190
|
+
end
|
191
|
+
|
192
|
+
def toggle_muted
|
193
|
+
muted? ? unmute : mute
|
194
|
+
end
|
141
195
|
|
142
196
|
def can_handle_observation_request?(observation_request)
|
143
197
|
result = false
|
@@ -162,7 +216,7 @@ module Glimmer
|
|
162
216
|
end
|
163
217
|
end
|
164
218
|
end
|
165
|
-
|
219
|
+
|
166
220
|
private
|
167
221
|
|
168
222
|
class VideoObserverBrowserFunction < BrowserFunction
|
data/samples/launch
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require_relative '../../lib/glimmer-cw-video'
|
2
|
+
|
3
|
+
include Glimmer
|
4
|
+
|
5
|
+
video_file = File.expand_path('../videos/Ants.mp4', __FILE__)
|
6
|
+
|
7
|
+
def display_video_status(video, status)
|
8
|
+
message_box {
|
9
|
+
text status
|
10
|
+
message "#{video.position.round(2)}/#{video.duration.round(2)} seconds have elapsed."
|
11
|
+
}.open
|
12
|
+
end
|
13
|
+
|
14
|
+
@shell = shell {
|
15
|
+
minimum_size 800, 500
|
16
|
+
@video = video(file: video_file, background: :black) {
|
17
|
+
on_swt_show { |event|
|
18
|
+
# set focus as soon as the SWT widget is shown to grab keyboard events below
|
19
|
+
@video.set_focus
|
20
|
+
}
|
21
|
+
|
22
|
+
on_key_pressed { |event|
|
23
|
+
case event.keyCode
|
24
|
+
when swt(:space), swt(:cr)
|
25
|
+
@video.toggle
|
26
|
+
when swt(:arrow_left)
|
27
|
+
@video.rewind
|
28
|
+
when swt(:arrow_right)
|
29
|
+
@video.fast_forward
|
30
|
+
when swt(:arrow_up)
|
31
|
+
@video.volume_up
|
32
|
+
when swt(:arrow_down)
|
33
|
+
@video.volume_down
|
34
|
+
end
|
35
|
+
}
|
36
|
+
|
37
|
+
on_playing {
|
38
|
+
display_video_status(@video, 'Playing')
|
39
|
+
}
|
40
|
+
|
41
|
+
on_paused {
|
42
|
+
display_video_status(@video, 'Paused')
|
43
|
+
}
|
44
|
+
|
45
|
+
on_ended {
|
46
|
+
display_video_status(@video, 'Ended')
|
47
|
+
}
|
48
|
+
}
|
49
|
+
}
|
50
|
+
@shell.open
|
Binary file
|
Binary file
|
Binary file
|
metadata
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glimmer-cw-video
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Maleh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
16
|
- - ">="
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version: 0.
|
18
|
+
version: 4.17.0.0
|
19
19
|
- - "<"
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 5.0.0.0
|
22
22
|
name: glimmer-dsl-swt
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
@@ -26,16 +26,16 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.
|
29
|
+
version: 4.17.0.0
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
32
|
+
version: 5.0.0.0
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
requirement: !ruby/object:Gem::Requirement
|
35
35
|
requirements:
|
36
36
|
- - ">="
|
37
37
|
- !ruby/object:Gem::Version
|
38
|
-
version:
|
38
|
+
version: 1.0.0
|
39
39
|
- - "<"
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: 2.0.0
|
@@ -46,7 +46,7 @@ dependencies:
|
|
46
46
|
requirements:
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version:
|
49
|
+
version: 1.0.0
|
50
50
|
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: 2.0.0
|
@@ -55,7 +55,7 @@ dependencies:
|
|
55
55
|
requirements:
|
56
56
|
- - ">="
|
57
57
|
- !ruby/object:Gem::Version
|
58
|
-
version:
|
58
|
+
version: 1.0.0
|
59
59
|
- - "<"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 2.0.0
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
requirements:
|
67
67
|
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
69
|
+
version: 1.0.0
|
70
70
|
- - "<"
|
71
71
|
- !ruby/object:Gem::Version
|
72
72
|
version: 2.0.0
|
@@ -98,20 +98,6 @@ dependencies:
|
|
98
98
|
- - '='
|
99
99
|
- !ruby/object:Gem::Version
|
100
100
|
version: 2.3.9
|
101
|
-
- !ruby/object:Gem::Dependency
|
102
|
-
requirement: !ruby/object:Gem::Requirement
|
103
|
-
requirements:
|
104
|
-
- - ">="
|
105
|
-
- !ruby/object:Gem::Version
|
106
|
-
version: '0'
|
107
|
-
name: glimmer-cs-gladiator
|
108
|
-
type: :development
|
109
|
-
prerelease: false
|
110
|
-
version_requirements: !ruby/object:Gem::Requirement
|
111
|
-
requirements:
|
112
|
-
- - ">="
|
113
|
-
- !ruby/object:Gem::Version
|
114
|
-
version: '0'
|
115
101
|
- !ruby/object:Gem::Dependency
|
116
102
|
requirement: !ruby/object:Gem::Requirement
|
117
103
|
requirements:
|
@@ -154,6 +140,20 @@ dependencies:
|
|
154
140
|
- - "~>"
|
155
141
|
- !ruby/object:Gem::Version
|
156
142
|
version: 0.7.0
|
143
|
+
- !ruby/object:Gem::Dependency
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - ">="
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
name: glimmer-cw-video
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
requirements:
|
154
|
+
- - ">="
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: '0'
|
157
157
|
description: Glimmer video widget with basic functionality like play, pause, loop,
|
158
158
|
and reload. Support mp4, webm, and ogg. Works with both local files and web URLs.
|
159
159
|
email: andy.am@gmail.com
|
@@ -163,10 +163,19 @@ extra_rdoc_files:
|
|
163
163
|
- LICENSE.txt
|
164
164
|
- README.md
|
165
165
|
files:
|
166
|
+
- CHANGELOG.md
|
166
167
|
- LICENSE.txt
|
167
168
|
- README.md
|
169
|
+
- VERSION
|
168
170
|
- lib/glimmer-cw-video.rb
|
169
171
|
- lib/views/glimmer/video.rb
|
172
|
+
- samples/launch
|
173
|
+
- samples/video/hello_looped_video_with_black_background.rb
|
174
|
+
- samples/video/hello_video.rb
|
175
|
+
- samples/video/hello_video_observers.rb
|
176
|
+
- samples/video/videos/Ants.mp4
|
177
|
+
- samples/video/videos/Blackpool_Timelapse.mp4
|
178
|
+
- samples/video/videos/Clouds_passing_by_CCBY_NatureClip.mp4
|
170
179
|
homepage: http://github.com/AndyObtiva/glimmer-cw-video
|
171
180
|
licenses:
|
172
181
|
- MIT
|