screen-recorder 1.3.1 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 354630449024886a2588bf44a6dfad01d7837341ecb94ced49b936d6cce6fb57
4
- data.tar.gz: 21140832dd0bc9f9fb51d01a9ef885b6387847c4ec1484380993613e96453ae0
3
+ metadata.gz: 07a4db7e87e1575f6ab01b6f07f91e23d4ca7002fbaeaada1c699e191da11c4d
4
+ data.tar.gz: 1da1db9f4b5cce4a96c7e550b8e47456dc12ea7ed32cb759d300f95edb38c042
5
5
  SHA512:
6
- metadata.gz: 58da8b78830b44b56b76408561198953b5dba59a3d5c57f0eae82052f60312ad8e6a426fc4b1bcbef9bd142fc9640ab07785aa0cba03676c5b9ce04bb99b51ea
7
- data.tar.gz: 8c549968577da56770fa558a91d461240765dc32276612de7ad17bf31fe74bc29386b92f77438cbc444fe7c2d0622f33074120341810b4f9d363b1919bcf99a0
6
+ metadata.gz: c4ae54ee250118a5c5ad525d74bac390e98f6c780a3518ff3c4d591ccd23ef7465dcd91ecf4e818284953c70eb0f497aa075120adf456b0edb79d633ea32a858
7
+ data.tar.gz: 18cf226da4ea901e956cadf490048367a95b96e441e867df982749b1ce9f72a82c6e3f202e06aa408612e8a4508d1a8189041f9abe80e45066d8907fad16bc9e
@@ -6,6 +6,7 @@ Please provide the following information for bug reports:
6
6
 
7
7
  * Operating system - Microsoft Windows, Linux, or macOS.
8
8
  * Ruby version
9
+ * screen-recorder version
9
10
  * Recorder parameters - input, output, etc.
10
11
  * Recorder log (`ffmpeg.log`) file as a gist or on pastebin.com.
11
12
  * Set `ScreenRecorder.logger.level = Logger::DEBUG`, run the recorder, and share the
data/.rspec CHANGED
@@ -1,3 +1,3 @@
1
- --format documentation
2
- --color
3
- --require spec_helper
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -17,25 +17,25 @@ Layout/EndOfLine:
17
17
  Layout/MultilineMethodCallIndentation:
18
18
  EnforcedStyle: indented_relative_to_receiver
19
19
 
20
- Layout/AlignArray:
20
+ Layout/ArrayAlignment:
21
21
  Enabled: true
22
22
 
23
- Layout/AlignHash:
23
+ Layout/HashAlignment:
24
24
  Enabled: true
25
25
  EnforcedHashRocketStyle: key
26
26
  EnforcedColonStyle: table
27
27
 
28
- Layout/AlignParameters:
28
+ Layout/ParameterAlignment:
29
29
  Enabled: true
30
30
  EnforcedStyle: with_first_parameter
31
31
 
32
- Layout/IndentFirstHashElement:
32
+ Layout/FirstHashElementIndentation:
33
33
  Enabled: true
34
34
 
35
- Layout/TrailingBlankLines:
35
+ Layout/TrailingEmptyLines:
36
36
  Enabled: false
37
37
 
38
- Metrics/LineLength:
38
+ Layout/LineLength:
39
39
  Max: 120
40
40
 
41
41
  Metrics/MethodLength:
@@ -14,10 +14,10 @@ matrix:
14
14
  - rvm: 2.4.6
15
15
  dist: xenial
16
16
  env: RAKE_TASK=rubocop
17
- - rvm: 2.6.3
17
+ - rvm: 2.7.0
18
18
  dist: xenial
19
19
  env: RAKE_TASK=spec REPORT_COVERAGE=true
20
- - rvm: jruby-9.2.7.0
20
+ - rvm: jruby-9.2.9.0
21
21
  dist: xenial
22
22
  jdk: openjdk8
23
23
  env: RAKE_TASK=spec JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"
@@ -39,4 +39,4 @@ before_script:
39
39
  - bash support/start_test_reporter.sh
40
40
  script: bundle exec rake $RAKE_TASK
41
41
  after_script:
42
- - bash support/stop_test_reporter.sh
42
+ - bash support/stop_test_reporter.sh
@@ -2,6 +2,14 @@
2
2
 
3
3
  This project adheres to [Semantic Versioning](https://semver.org/).
4
4
 
5
+ ### 1.4.0 (2019-10-27)
6
+ * Users can now select a ffmpeg [capture device](https://ffmpeg.org/ffmpeg-devices.html) from advanced -> input.
7
+ * Fix a bug where some advanced parameters were not parsed correctly.
8
+ * Add support for audio stream capture ([#15](https://github.com/kapoorlakshya/screen-recorder/issues/15))
9
+ * Fix [#84](https://github.com/kapoorlakshya/screen-recorder/issues/84) where the user given ffmpeg binary path was never used.
10
+ * Relax childprocess gem version requirement to roughly match requirements in `selenium-webdriver` gem ([#85](https://github.com/kapoorlakshya/screen-recorder/issues/85))
11
+ * Add support for capturing screenshots in both desktop and window modes ([#44](https://github.com/kapoorlakshya/screen-recorder/issues/44)).
12
+
5
13
  ### 1.3.1 (2019-10-20)
6
14
  * Reattempt `ffprobe` execution up to times if the first try raises `Errno::EAGAIN`.
7
15
  Hopefully fixes [#79](https://github.com/kapoorlakshya/screen-recorder/issues/79).
@@ -1,21 +1,21 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2018 Lakshya Kapoor
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 Lakshya Kapoor
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md CHANGED
@@ -7,13 +7,13 @@
7
7
  [![Maintainability](https://api.codeclimate.com/v1/badges/b6049dfee7375aed9bc8/maintainability)](https://codeclimate.com/github/kapoorlakshya/screen-recorder/maintainability)
8
8
  [![Test Coverage](https://api.codeclimate.com/v1/badges/b6049dfee7375aed9bc8/test_coverage)](https://codeclimate.com/github/kapoorlakshya/screen-recorder/test_coverage)
9
9
 
10
- A Ruby gem to video record your computer screen - desktop or specific
10
+ A Ruby gem to video record or take screenshots of your computer screen - desktop or specific
11
11
  window - using [FFmpeg](https://www.ffmpeg.org/). Primarily
12
12
  geared towards recording automated UI (Selenium) test executions for
13
13
  debugging and documentation.
14
14
 
15
15
  #### Demo
16
- [https://kapoorlakshya.github.io/introducing-screen-recorder-ruby-gem](https://kapoorlakshya.github.io/introducing-screen-recorder-ruby-gem).
16
+ [https://kapoorlakshya.github.io/introducing-screen-recorder-ruby-gem](https://kapoorlakshya.github.io/introducing-screen-recorder-ruby-gem)
17
17
 
18
18
  ## Compatibility
19
19
 
@@ -96,7 +96,7 @@ browser = Watir::Browser.new :firefox
96
96
  @recorder.stop
97
97
  browser.quit
98
98
  ```
99
- This mode has limited capabilities. Read more about it in the wiki
99
+ This mode has a few limitations which are listed in the wiki
100
100
  [here](https://github.com/kapoorlakshya/screen-recorder/wiki/Window-Capture-Limitations).
101
101
 
102
102
  ##### Fetch Title
@@ -112,7 +112,62 @@ ScreenRecorder::Window.fetch_title('chrome')
112
112
  #=> ["New Tab - Google Chrome"]
113
113
  ```
114
114
 
115
- #### Output
115
+ #### Capture Audio
116
+
117
+ Provide the following `advanced` configurations to capture audio:
118
+
119
+ ```ruby
120
+ # Linux
121
+ advanced = { f: 'alsa', ac: 2, i: 'hw:0'} # Using ALSA
122
+ # Or using PulseAudio
123
+ advanced = { 'f': 'pulse', 'ac': 2, 'i': 'default' } # Records default sound output device
124
+
125
+ # macOS
126
+ advanced = { input: { i: '1:1' } } # -i video:audio input device ID
127
+
128
+ # Windows
129
+ advanced = { f: 'dshow', i: 'audio="Microphone (High Definition Aud"' }
130
+ ```
131
+
132
+ You can retrieve a list of audio devices by running these commands:
133
+
134
+ ```
135
+ # Linux
136
+ $ arecord -L # See https://trac.ffmpeg.org/wiki/Capture/ALSA
137
+
138
+ # macOS
139
+ $ ffmpeg -f avfoundation -list_devices true -i ""
140
+
141
+ # Windows
142
+ > ffmpeg -list_devices true -f dshow -i dummy
143
+ ```
144
+
145
+ #### Screenshots
146
+
147
+ Screenshots can be captured at any point after initializing the recorder:
148
+
149
+ ```ruby
150
+ # Desktop
151
+ @recorder = ScreenRecorder::Desktop.new(output: 'recording.mkv')
152
+ @recorder.screenshot('before-recording.png')
153
+ @recorder.start
154
+ @recorder.screenshot('during-recording.png')
155
+ @recorder.stop
156
+ @recorder.screenshot('after-recording.png')
157
+
158
+ # Window (Microsoft Windows only)
159
+ browser = Watir::Browser.new :chrome, options: { args: ['--disable-gpu'] } # Hardware acceleration must be disabled
160
+ browser.goto('watir.com')
161
+ window_title = ScreenRecorder::Titles.fetch('chrome').first
162
+ @recorder = ScreenRecorder::Window.new(title: window_title, output: 'recording.mkv')
163
+ @recorder.screenshot('before-recording.png')
164
+ @recorder.start
165
+ @recorder.screenshot('during-recording.png')
166
+ @recorder.stop
167
+ @recorder.screenshot('after-recording.png')
168
+ browser.quit
169
+ ```
170
+ #### Video Output
116
171
 
117
172
  Once the recorder is stopped, you can view the video metadata or transcode
118
173
  it if desired.
@@ -15,7 +15,7 @@ environment:
15
15
  RUBY_BIN: ruby
16
16
  RAKE_TASK: spec
17
17
  SCRIPT_CONTEXT: bundle exec
18
- - RUBY_VERSION: jruby-9.2.7.0
18
+ - RUBY_VERSION: jruby-9.2.9.0
19
19
  RUBY_BIN: jruby
20
20
  RAKE_TASK: spec
21
21
  SCRIPT_CONTEXT: jruby -G -S
@@ -27,13 +27,13 @@ install:
27
27
  }
28
28
  - choco install ffmpeg
29
29
  - set PATH=C:\%RUBY_VERSION%\bin;%PATH%
30
- - '%RUBY_BIN% -S gem update --system'
31
- - '%RUBY_BIN% -S gem install bundler'
32
- - '%RUBY_BIN% -S bundle install'
30
+ - "%RUBY_BIN% -S gem update --system"
31
+ - "%RUBY_BIN% -S gem install bundler"
32
+ - "%RUBY_BIN% -S bundle install"
33
33
  before_test:
34
34
  - ffmpeg -version
35
- - '%RUBY_BIN% -v'
36
- - '%RUBY_BIN% -S gem -v'
37
- - '%RUBY_BIN% -S bundle -v'
35
+ - "%RUBY_BIN% -v"
36
+ - "%RUBY_BIN% -S gem -v"
37
+ - "%RUBY_BIN% -S bundle -v"
38
38
  test_script:
39
- - '%SCRIPT_CONTEXT% rake %RAKE_TASK%'
39
+ - "%SCRIPT_CONTEXT% rake %RAKE_TASK%"
File without changes
data/bin/setup CHANGED
@@ -1,8 +1,8 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -12,14 +12,19 @@ module ScreenRecorder
12
12
  # ScreenRecorder.ffmpeg_binary = 'C:\ffmpeg.exe'
13
13
  #
14
14
  def self.ffmpeg_binary=(bin)
15
+ ScreenRecorder.logger.debug 'Setting ffmpeg path...'
15
16
  FFMPEG.ffmpeg_binary = bin
17
+ ScreenRecorder.logger.debug "ffmpeg path set: #{bin}"
18
+ ScreenRecorder.ffmpeg_binary
16
19
  end
17
20
 
18
21
  #
19
- # Returns path to ffmpeg binary
22
+ # Returns path to ffmpeg binary or raises DependencyNotFound
20
23
  #
21
24
  def self.ffmpeg_binary
22
25
  FFMPEG.ffmpeg_binary
26
+ rescue Errno::ENOENT # Raised when binary is not set in project or found in ENV
27
+ raise Errors::DependencyNotFound
23
28
  end
24
29
 
25
30
  #
@@ -9,6 +9,8 @@ module ScreenRecorder
9
9
  attr_reader :options, :video
10
10
 
11
11
  def initialize(input:, output:, advanced: {})
12
+ raise Errors::DependencyNotFound unless ffmpeg_exists?
13
+
12
14
  @options = Options.new(input: input, output: output, advanced: advanced)
13
15
  @video = nil
14
16
  @process = nil
@@ -36,13 +38,27 @@ module ScreenRecorder
36
38
  @video = prepare_video
37
39
  end
38
40
 
41
+ #
42
+ # Takes a screenshot in the current context (input) - desktop or current window
43
+ #
44
+ def screenshot(filename)
45
+ process = execute_command(screenshot_cmd(filename))
46
+ exit_code = wait_for_process_exit(process) # 0 (success) or 1 (fail)
47
+ if exit_code.zero?
48
+ ScreenRecorder.logger.info "Screenshot: #{filename}"
49
+ return filename
50
+ end
51
+ ScreenRecorder.logger.error 'Failed to take a screenshot.'
52
+ nil
53
+ end
54
+
39
55
  #
40
56
  # Discards the recorded file. Useful in automated testing
41
57
  # when a test passes and the recorded file is no longer
42
58
  # needed.
43
59
  #
44
60
  def discard
45
- FileUtils.rm options.output
61
+ File.delete options.output
46
62
  end
47
63
 
48
64
  alias delete discard
@@ -54,17 +70,9 @@ module ScreenRecorder
54
70
  # the given options.
55
71
  #
56
72
  def start_ffmpeg
57
- raise Errors::DependencyNotFound, 'ffmpeg binary not found.' unless ffmpeg_exists?
58
-
59
- ScreenRecorder.logger.debug "Command: #{command}"
60
- process = build_command
61
- @log_file = File.new(options.log, 'w+')
62
- process.io.stdout = process.io.stderr = @log_file
63
- @log_file.sync = true
64
- process.duplex = true
65
- process.start
66
- sleep(1.5) # Takes ~1.5s on average to initialize
67
- # Stopped because of an error
73
+ process = execute_command(ffmpeg_command, options.log)
74
+ sleep(1.5) # Takes ~1.5s to initialize ffmpeg
75
+ # Check if it exited unexpectedly
68
76
  raise FFMPEG::Error, "Failed to start ffmpeg. Reason: #{lines_from_log(:last, 2)}" if process.exited?
69
77
 
70
78
  process
@@ -78,12 +86,7 @@ module ScreenRecorder
78
86
  @process.io.stdin.puts 'q' # Gracefully exit ffmpeg
79
87
  @process.io.stdin.close
80
88
  @log_file.close
81
- @process.poll_for_exit(PROCESS_TIMEOUT)
82
- @process.exit_code
83
- rescue ChildProcess::TimeoutError
84
- ScreenRecorder.logger.error 'FFmpeg failed to stop. Force killing it...'
85
- @process.stop # Tries increasingly harsher methods to kill the process.
86
- ScreenRecorder.logger.error "Check '#{@options.log}' for more information."
89
+ wait_for_process_exit(@process)
87
90
  end
88
91
 
89
92
  #
@@ -107,29 +110,35 @@ module ScreenRecorder
107
110
  end
108
111
  end
109
112
 
113
+ def ffmpeg_bin
114
+ "#{ScreenRecorder.ffmpeg_binary} -y"
115
+ end
116
+
110
117
  #
111
118
  # Generates the command line arguments based on the given
112
119
  # options.
113
120
  #
114
- def command
115
- cmd = "#{ScreenRecorder.ffmpeg_binary} -y "
116
- cmd << @options.parsed
121
+ def ffmpeg_command
122
+ "#{ffmpeg_bin} #{@options.parsed}"
123
+ end
124
+
125
+ #
126
+ # Parameters to capture a single frame
127
+ #
128
+ def screenshot_cmd(filename)
129
+ # -f overwrites existing file
130
+ "#{ffmpeg_bin} -f #{options.capture_device} -i #{options.input} -framerate 1 -frames:v 1 #{filename}"
117
131
  end
118
132
 
119
133
  #
120
134
  # Returns true if ffmpeg binary is found.
121
135
  #
122
136
  def ffmpeg_exists?
123
- return !`which ffmpeg`.empty? if OS.linux? # "" if not found
137
+ return true if FFMPEG.ffmpeg_binary
124
138
 
125
- return !`where ffmpeg`.empty? if OS.windows?
126
-
127
- # If the user does not use ScreenRecorder.ffmpeg_binary=() to set the binary path,
128
- # ScreenRecorder.ffmpeg_binary returns 'ffmpeg' assuming it must be in ENV. However,
129
- # if the above two checks fail, it is not in the ENV either.
130
- return false if ScreenRecorder.ffmpeg_binary == 'ffmpeg'
131
-
132
- true
139
+ false
140
+ rescue Errno::ENOENT # Raised when binary is not set in project or found in ENV
141
+ false
133
142
  end
134
143
 
135
144
  #
@@ -146,15 +155,47 @@ module ScreenRecorder
146
155
  end
147
156
 
148
157
  #
149
- # Returns OS specific arguments for Childprocess.build
158
+ # Executes the given command and outputs to the
159
+ # optional logfile
160
+ #
161
+ def execute_command(cmd, logfile = nil)
162
+ ScreenRecorder.logger.debug "Executing command: #{cmd}"
163
+ process = new_process(cmd)
164
+ process.duplex = true
165
+ if logfile
166
+ @log_file = File.new(logfile, 'w+')
167
+ process.io.stdout = process.io.stderr = @log_file
168
+ @log_file.sync = true
169
+ end
170
+ process.start
171
+ process
172
+ end
173
+
174
+ #
175
+ # Calls Childprocess.new with OS specific arguments
176
+ # to start the given process.
150
177
  #
151
- def build_command
152
- ChildProcess.posix_spawn = true # Support JRuby.
178
+ def new_process(process)
179
+ ChildProcess.posix_spawn = true if RUBY_PLATFORM == 'java' # Support JRuby.
153
180
  if OS.windows?
154
- ChildProcess.build('cmd.exe', '/c', command)
181
+ ChildProcess.new('cmd.exe', '/c', process)
155
182
  else
156
- ChildProcess.build('sh', '-c', command)
183
+ ChildProcess.new('sh', '-c', process)
157
184
  end
158
185
  end
186
+
187
+ #
188
+ # Waits for given process to exit.
189
+ # Forcefully kills the process if it does not
190
+ # exit within 5 seconds.
191
+ #
192
+ def wait_for_process_exit(process)
193
+ process.poll_for_exit(PROCESS_TIMEOUT)
194
+ process.exit_code
195
+ rescue ChildProcess::TimeoutError
196
+ ScreenRecorder.logger.error 'ffmpeg failed to stop. Force killing it...'
197
+ process.stop # Tries increasingly harsher methods to kill the process.
198
+ ScreenRecorder.logger.error 'Forcefully killed ffmpeg.'
199
+ end
159
200
  end
160
201
  end
@@ -2,9 +2,17 @@ module ScreenRecorder
2
2
  # @since 1.0.0-beta5
3
3
  module Errors
4
4
  # @since 1.0.0-beta3
5
- class ApplicationNotFound < StandardError; end
5
+ class ApplicationNotFound < StandardError
6
+ def message
7
+ 'expected application was not found by ffmpeg.'
8
+ end
9
+ end
6
10
 
7
11
  # @since 1.0.0-beta5
8
- class DependencyNotFound < StandardError; end
12
+ class DependencyNotFound < StandardError
13
+ def message
14
+ 'ffmpeg binary path not set or not found in ENV.'
15
+ end
16
+ end
9
17
  end
10
18
  end
@@ -74,9 +74,9 @@ module ScreenRecorder
74
74
  def parsed
75
75
  vals = "-f #{capture_device} "
76
76
  vals << parse_advanced(advanced_input)
77
- vals << "-i #{input} "
78
- vals << parse_advanced(advanced_output)
77
+ vals << "-i #{input} " unless advanced_input[:i] # Input provided by user
79
78
  vals << parse_advanced(advanced)
79
+ vals << parse_advanced(advanced_output)
80
80
  vals << output
81
81
  end
82
82
 
@@ -143,19 +143,19 @@ module ScreenRecorder
143
143
  # Returns input capture device based on user given value or the current OS.
144
144
  #
145
145
  def determine_capture_device
146
- # User given capture device or format
146
+ # User given capture device or format from advanced configs Hash
147
147
  # @see https://www.ffmpeg.org/ffmpeg.html#Main-options
148
- return advanced[:f] if advanced[:f]
148
+ return advanced_input[:f] if advanced_input[:f]
149
149
 
150
- return advanced[:fmt] if advanced[:fmt]
150
+ return advanced_input[:fmt] if advanced_input[:fmt]
151
151
 
152
- os_specific_capture_device
152
+ default_capture_device
153
153
  end
154
154
 
155
155
  #
156
156
  # Returns input capture device for current OS.
157
157
  #
158
- def os_specific_capture_device
158
+ def default_capture_device
159
159
  return 'gdigrab' if OS.windows?
160
160
 
161
161
  return 'x11grab' if OS.linux?
@@ -1,3 +1,3 @@
1
1
  module ScreenRecorder
2
- VERSION = '1.3.1'.freeze
2
+ VERSION = '1.4.0'.freeze
3
3
  end
@@ -21,7 +21,7 @@ module ScreenRecorder
21
21
  # ScreenRecorder::Window.fetch_title('chrome')
22
22
  # #=> ["New Tab - Google Chrome"]
23
23
  def fetch_title(process_name)
24
- ScreenRecorder.logger.debug "Retrieving window title for: #{process_name}"
24
+ ScreenRecorder.logger.debug "Retrieving window title from '#{process_name}'"
25
25
  window_title_for process_name
26
26
  end
27
27
 
@@ -43,6 +43,8 @@ module ScreenRecorder
43
43
  raise Errors::ApplicationNotFound, "No open windows found for: #{process_name}.exe" if titles.empty?
44
44
 
45
45
  warn_on_mismatch(titles, process_name)
46
+ ScreenRecorder.logger.debug "Retrieved titles: #{titles}"
47
+
46
48
  titles
47
49
  end
48
50
 
@@ -17,7 +17,8 @@ Gem::Specification.new do |spec|
17
17
  # noinspection RubyStringKeysInHashInspection
18
18
  spec.metadata = {
19
19
  'changelog_uri' => 'https://github.com/kapoorlakshya/screen-recorder/blob/master/CHANGELOG.md',
20
- 'source_code_uri' => 'https://github.com/kapoorlakshya/screen-recorder/',
20
+ 'source_code_uri' => "https://github.com/kapoorlakshya/screen-recorder/tree/v#{ScreenRecorder::VERSION}",
21
+ 'documentation_uri' => "https://www.rubydoc.info/gems/screen-recorder/#{ScreenRecorder::VERSION}",
21
22
  'bug_tracker_uri' => 'https://github.com/kapoorlakshya/screen-recorder/issues',
22
23
  'wiki_uri' => 'https://github.com/kapoorlakshya/screen-recorder/wiki'
23
24
  }
@@ -38,7 +39,7 @@ Gem::Specification.new do |spec|
38
39
  spec.add_development_dependency 'watir', '~> 6.0'
39
40
  spec.add_development_dependency 'webdrivers', '~> 4.0'
40
41
 
41
- spec.add_runtime_dependency 'childprocess', '~> 3.0'
42
+ spec.add_runtime_dependency 'childprocess', '>= 1.0', '< 4.0' # Roughly match Selenium
42
43
  spec.add_runtime_dependency 'os', '~> 1.0.0'
43
44
  spec.add_runtime_dependency 'streamio-ffmpeg', '~> 3.0'
44
45
  end
@@ -1,5 +1,5 @@
1
- $downloadLink = "https://repo1.maven.org/maven2/org/jruby/jruby-dist/9.2.7.0/jruby-dist-9.2.7.0-bin.zip"
2
- $zipPath = "c:\jruby-dist-9.2.7.0-bin.zip"
1
+ $downloadLink = "https://repo1.maven.org/maven2/org/jruby/jruby-dist/9.2.9.0/jruby-dist-9.2.9.0-bin.zip"
2
+ $zipPath = "c:\jruby-dist-9.2.9.0-bin.zip"
3
3
 
4
4
  Write-Host "Installing $($env:RUBY_VERSION)" -ForegroundColor cyan
5
5
  appveyor DownloadFile "$($downloadLink)" -FileName "$($zipPath)"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: screen-recorder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lakshya Kapoor
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-21 00:00:00.000000000 Z
11
+ date: 2020-01-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -140,16 +140,22 @@ dependencies:
140
140
  name: childprocess
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - "~>"
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
- version: '3.0'
145
+ version: '1.0'
146
+ - - "<"
147
+ - !ruby/object:Gem::Version
148
+ version: '4.0'
146
149
  type: :runtime
147
150
  prerelease: false
148
151
  version_requirements: !ruby/object:Gem::Requirement
149
152
  requirements:
150
- - - "~>"
153
+ - - ">="
151
154
  - !ruby/object:Gem::Version
152
- version: '3.0'
155
+ version: '1.0'
156
+ - - "<"
157
+ - !ruby/object:Gem::Version
158
+ version: '4.0'
153
159
  - !ruby/object:Gem::Dependency
154
160
  name: os
155
161
  requirement: !ruby/object:Gem::Requirement
@@ -219,7 +225,8 @@ licenses:
219
225
  - MIT
220
226
  metadata:
221
227
  changelog_uri: https://github.com/kapoorlakshya/screen-recorder/blob/master/CHANGELOG.md
222
- source_code_uri: https://github.com/kapoorlakshya/screen-recorder/
228
+ source_code_uri: https://github.com/kapoorlakshya/screen-recorder/tree/v1.4.0
229
+ documentation_uri: https://www.rubydoc.info/gems/screen-recorder/1.4.0
223
230
  bug_tracker_uri: https://github.com/kapoorlakshya/screen-recorder/issues
224
231
  wiki_uri: https://github.com/kapoorlakshya/screen-recorder/wiki
225
232
  post_install_message:
@@ -237,7 +244,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
237
244
  - !ruby/object:Gem::Version
238
245
  version: '0'
239
246
  requirements: []
240
- rubygems_version: 3.0.6
247
+ rubygems_version: 3.1.2
241
248
  signing_key:
242
249
  specification_version: 4
243
250
  summary: Video record your computer screen using FFmpeg.