Skip to content

Commit 079f2cd

Browse files
Eric Morrismderrick
authored andcommitted
Playback Rate (#48)
* add support for video playback rate * add playback rate to demo * add playback rate to docs * chore(build): add new code to dist * fix(video): don't pass invalid prop to HTML5 tag * fix(video): actually don't pass the prop this time. Oops * remove(events): remove onPlaybackRateChange event altogether * chore(build): include in dist
1 parent 865641f commit 079f2cd

File tree

4 files changed

+38
-2
lines changed

4 files changed

+38
-2
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ All children components will receive the following properties via props:
121121
- `paused`
122122
- `muted`
123123
- `volume`
124+
- `playbackRate`
124125
- `percentageBuffered`
125126
- `percentagePlayed`
126127

@@ -134,6 +135,7 @@ All children components receive the following methods via props:
134135
- `seek`
135136
- `fullscreen`
136137
- `setVolume`
138+
- `setPlaybackRate`
137139

138140
## Contributing
139141

demo/src/components/index/main/Main.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ var Main = React.createClass({
7373
this.refs.video.setVolume(this._volumeInput.valueAsNumber);
7474
},
7575

76+
setPlaybackRate() {
77+
this.refs.video.setPlaybackRate(this._playbackRateInput.valueAsNumber);
78+
},
79+
7680
onProgress() {
7781
var el = ReactDOM.findDOMNode(this.refs.video).getElementsByTagName('video')[0];
7882
this.setState({
@@ -141,6 +145,10 @@ var Main = React.createClass({
141145
<Button onClick={this.setVolume}>setVolume</Button>
142146
<input className="main__input" defaultValue="1" ref={(c) => this._volumeInput = c} type="number" min="0" max="1" step="0.1"/>
143147
</li>
148+
<li>
149+
<Button onClick={this.setPlaybackRate}>setPlaybackRate</Button>
150+
<input className="main__input" defaultValue="1" ref={(c) => this._playbackRateInput = c} type="number" min="0.5" max="2" step="0.25"/>
151+
</li>
144152
<li>
145153
<Button onClick={this.fullscreen}>fullscreen</Button>
146154
</li>

dist/ReactHtml5Video.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ return /******/ (function(modules) { // webpackBootstrap
173173
paused: !this.props.autoPlay,
174174
muted: !!this.props.muted,
175175
volume: 1,
176+
playbackRate: 1,
176177
error: false,
177178
loading: false
178179
};
@@ -339,6 +340,16 @@ return /******/ (function(modules) { // webpackBootstrap
339340
}
340341
},
341342

343+
/**
344+
* Sets the video playback rate.
345+
* @param {number} rate The playback rate (default 1.0).
346+
* @return {undefined}
347+
*/
348+
setPlaybackRate: function setPlaybackRate(rate) {
349+
this.videoEl.playbackRate = rate;
350+
this.updateStateFromVideo();
351+
},
352+
342353
/**
343354
* Updates the React component state from the DOM video properties.
344355
* This is where the magic happens.
@@ -353,6 +364,7 @@ return /******/ (function(modules) { // webpackBootstrap
353364
paused: this.videoEl.paused,
354365
muted: this.videoEl.muted,
355366
volume: this.videoEl.volume,
367+
playbackRate: this.videoEl.playbackRate,
356368
readyState: this.videoEl.readyState,
357369

358370
// Non-standard state computed from properties
@@ -381,7 +393,8 @@ return /******/ (function(modules) { // webpackBootstrap
381393
unmute: this.unmute,
382394
seek: this.seek,
383395
fullscreen: this.fullscreen,
384-
setVolume: this.setVolume
396+
setVolume: this.setVolume,
397+
setPlaybackRate: this.setPlaybackRate
385398
}, this.state, { copyKeys: this.props.copyKeys });
386399

387400
var controls = _react2['default'].Children.map(this.props.children, function (child) {

src/components/video/Video.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ var Video = React.createClass({
6565
paused: !this.props.autoPlay,
6666
muted: !!this.props.muted,
6767
volume: 1,
68+
playbackRate: 1,
6869
error: false,
6970
loading: false
7071
};
@@ -231,6 +232,16 @@ var Video = React.createClass({
231232
}
232233
},
233234

235+
/**
236+
* Sets the video playback rate.
237+
* @param {number} rate The playback rate (default 1.0).
238+
* @return {undefined}
239+
*/
240+
setPlaybackRate(rate) {
241+
this.videoEl.playbackRate = rate;
242+
this.updateStateFromVideo();
243+
},
244+
234245
/**
235246
* Updates the React component state from the DOM video properties.
236247
* This is where the magic happens.
@@ -245,6 +256,7 @@ var Video = React.createClass({
245256
paused: this.videoEl.paused,
246257
muted: this.videoEl.muted,
247258
volume: this.videoEl.volume,
259+
playbackRate: this.videoEl.playbackRate,
248260
readyState: this.videoEl.readyState,
249261

250262
// Non-standard state computed from properties
@@ -273,7 +285,8 @@ var Video = React.createClass({
273285
unmute: this.unmute,
274286
seek: this.seek,
275287
fullscreen: this.fullscreen,
276-
setVolume: this.setVolume
288+
setVolume: this.setVolume,
289+
setPlaybackRate: this.setPlaybackRate,
277290
}, this.state, {copyKeys: this.props.copyKeys});
278291

279292
var controls = React.Children.map(this.props.children, (child) => {

0 commit comments

Comments
 (0)