
View the change log in the github repository for the continued record of jPlayer development.
loadeddata event
from the progress event.
TraceOut class
from the Jplayer.as code
and the happyworm package.
autoBlur option will now either
blur() or focus().
This helps maintain cross-browser behaviour when a user clicks on a GUI button.
noVolume state class for when the volume controls
are being hidden due to the noVolume option.
This helps GUI design by enabling a CSS rule to hide the volume controls.
Jplayer.swf
to jquery.jplayer.swf
jquery.jplayer.swf file is now compiled using the
Flex compiler in the grunt-mxmlc node.js module.
captureDuration option (Default: true)
to capture clicks on the duration element.
This can help the operation of the toggleDuration option in some designs.
input or textarea.
Now any element in focus will prevent the jPlayer key bindings.
A fallback remains for old browsers without document.activeElement support, but this may be redundant.
This issue was report here
jPlayer breaks all links on a page for keyboard users
by digitaltoast.
blur() when the
autoBlur option is true (default).
null was being made incorrectly.
cssSelectorAncestor element.
The state class names are defined in the stateClass option object,
where the following states may have a class name defined:
playing,
seeking,
muted,
looped and
fullScreen.
useStateClassSkin (default: false) option
is set to enable skins that do not have element pairs for the controls.
These new skins types use the state classes to change the display through CSS rules.
autoBlur option of the jPlayer instance
now affects the Playlist GUI controls.
useStateClassSkin option of the jPlayer instance
now affects the Playlist GUI controls through the stateClass option
for shuffled class name.
autoBlur option of the jPlayer instance
now affects the Playlist track selection.
tabindex changed from
tabindex="1" to tabindex="0".
tabindex changed from
tabindex="1" to tabindex="-1".
.jp-no-solution element were not working.
The empty click handler was capturing and preventing the click on the link.
Changed the cssSelector code so the GUI elements that do not have a user action,
do not longer require an empty function. This removes a number of empty internal functions.
This issue was report here
Cannot click links in .jp-no-solution
by robballou.
loadedmetadata and
durationchange events.
This is important for the jplayer Popcorn Player Plugin working with MP3 and IE8.
console.log() feature.
url
value before attempting to convert them to absolute URLs.
The jPlayer.inspector project highlighted this problem.
setMedia() to an audio media type, any immediate
play(),
play(time) or
pause(time)
commands are delayed until the first progress event.
media.title
property of the setMedia object
is now written to the jp-title class of the instance.
It is also written to the HTML Media element's title attribue.
This should now display in the iOS Control Center.
However, we found and reported a bug in the iOS7.1 system for audio elements and
for the time being, this will only work with video elements.
remainingDuration option.
The toggleDuration option may be used to enable clicks on the duration
to toggle the remainingDuration option.
$.jPlayer.event.setmedia event
has been added that fires when jPlayer is issued a setMedia comand.
(The jPlayer.inspector was updated to include this event.)
currentTime and duration
GUI display elements will only be written to if their display value has changed.
This may help Chrome, which has issues capturing clicks on the text if it is being changed.
media.duration
property of the setMedia object
is now used when displaying the jp-duration.
When undefined, the values are taken from the media.
When a string, the string is used.
When a number (in seconds), the displayed values are calculated using this number.
Internally, the values on the status are always taken from the media.
destroy command now removes the full screen event handlers.
TraceOut() class being instanced.
The class is now only instanced in debug mode.
consoleAlerts option (default:true) which forces
the alerts generated by errorAlerts and warningAlerts
to be written to the console instead.
When the console is not supported and this option is enabled, no alert will occur.
This feature was proposed here
Added an option for console logging errors...
by adamwaite.
event.jPlayer.status.media object, even if you supplied relative URLs.
m3u8a and video m3u8v format definitions.
Be aware that, only a few HTML browsers support this format and the Flash does not support it.
m3ua and video m3uv format definitions.
Be aware that, only a few HTML browsers support this format and the Flash does not support it.
tellOthers(command[,conditions][,args]) method.
This method enables an instance to issue commands to the other instances.
The optional conditions(invoker) function executes with
the other instance's context (this) and
returns true or false,
controlling whether the other instance is commanded.
The invoker parameter is the jPlayer instance that is issuing the commands.
Both this and invoker are the jPlayer JavaScript object.
For example: this.status.srcSet or
invoker.options.muted.
time parameter to pauseOthers(time) method.
This feature was proposed here
Added stopOthers similar to pauseOthers
by harvest.
globalVolume option (default:false) which causes
the volume option to be shared with other jPlayer instances
that have the globalVolume option enabled.
globalVolume option to causes
the muted option to be shared with other jPlayer instances
that have the globalVolume option enabled.
bower.json file to the jPlayer Repository.
This addition was proposed here
bower component file
by popol1991.
allowInsecureDomain("*") command to the Flash.
This addition was proposed here
Use allowInsecureDomain in order to support serving the SWF over HTTPS
by prekageo.
flashreset event.
This fix was given here
Recovering from "flash reset" does not restore volume
by marcn.
playbackRate option for the HTML solution.
This option works with these other options:
defaultPlaybackRate,
minPlaybackRate and
maxPlaybackRate.
The GUI cssSelectors have been added for a control bar.
The status object has the status.playbackRateEnabled flag to indicate support.
This feature varies cross-browser, see the dev guide for more information.
noConflict option is now restricted to strings that contain the term jQuery.
lib.jQuery or myjQueryRocks.
playing,
waiting,
canplay and
canplaythrough.
waiting event timer on setMedia.
Thus fixing erroneous waiting event generation when setMedia, then play, then setMedia.
cssSelectorAncestor after instancing now updates the GUI to the current state.
Bug reported by kusch in Issue #83.
seekBar or volumeBar,
and the click refers to itself through the event.currentTarget.
tabindex="-1" to the object element used by the Flash solution.
<meta http-equiv="X-UA-Compatible" content="IE=7" />
clearMedia.
Solution from GitHub issue clearMedia makes extraneous HTTP request
by marcn.
_checkForFlash(version)
where version is a string with the form "1.2.3",
"1.2", "1"
or a number 1.2.
<track> support to setMedia ready for when HTML5 browsers implement the feature.
This follows the W3C Media Element Living Standard
and the WebVTT Living Standard as of 1st November 2012.
A polyfill will be needed to enable this feature in the meantime and for the Flash solution.
Could possibly use the WebVTT polyfill in Playr.
iemobile: /iemobile/ to noVolume and noFullScreen blocklist option objects.
_checkForFlash(version) to use code prior to 2.2.9 with changes to enable major.minor version number.
The version is a number 1.2.
This satisfies the need to check for Flash 10.1 while saving over 1k bytes when compared to the 2.2.9 change.
default, added in 2.2.10, and made jshint.com pass with our options.
fullScreen to fullWindow
and noFullScreen to noFullWindow.
fullScreen mode.
Desktop functionality verified with Firefox 16, Safari 5.1, Chrome 23 and Opera 12.10.
Mobile functionality verified with iOS6 (iPad3) Mobile Safari and Android 4.2 (Nexus 7) Chrome.
noFullWindow regular expressions
for msie, ipad and
android_pad. For example, IE10 now allows full window.
$.jPlayer.convertTime(s) and the
$.jPlayer.timeFormat options.
keyEnabled (default: false) is used to turn the feature on.
The option keyBindings is an object used to define actions with their key and function.
The option audioFullScreen (default: false) allows key controls to display audio poster images in full screen, which is useful for media players.
eg., A player that has both video and audio media in a playlist.
The method jPlayer("focus") may be used on an instance to gain focus without playing.
videoWidth and videoHeight information is now maintained on the status.
These are the intrinsic width and height values of the video in pixels.
The default is zero before it is known or if it is audio media.
.on() and .off()
instead of the deprecated .live() and .die() jQuery methods.
The add-on now requires jQuery 1.7+ and enables jQuery 1.9+ which dropped support of the deprecated code.
keyBindings options
that enable next/previous track through the LEFT and RIGHT arrow keys.
cssSelector elements click propagation was being disabled due to using return false;.
Corrected to use event.preventDefault();.
smoothPlayBar option (Default: true),
which enables the animation of the play bar. Changes to its value are now animated over 250ms in a linear manner.
smoothPlayBar option (Default: false),
had its default value changed from true to false.
rtmpv and rtmpa for video and media RTMP streams respectively.
RTMP feature developed by Robert M. Hall in this GitHub fork github.com/rmhall/jPlayer of jPlayer.
media.duration and it remains a NaN.
Blackberry OS7 gives the initial media.duration as Infinity.
jPlayer now leaves the status.duration at zero until the media.duration is finite.
stop button/command was used, and when the progress bar was used while paused.
Both issues were related to pause(time) causing a locked-up state.
progress event forever.
The timeupdate event now only occurs while playing. ie., It used to happen during the locked-up state.
jQuery.browser sniffer is deprecated in jQuery and will be removed in the future.
All browser sniffing now uses code internal to jPlayer. ie., jQuery.jPlayer.browser
position:relative; rule was removed from the container as this corrupted popcorn plugin placement over the video.
Negative margins have been used instead to align video play button.
As a result, the video play button graphic is now the active area for clicks.
warningAlerts instead of incorrectly by the errorAlerts setting.warningAlerts would interfere with the Flash ready event, causing it not to occur.gate and active properties were undefined. Affected the NO_SOLUTION error event.ready event now only ever occurs once. Previously, using setMedia in the jPlayer ready event when the Flash solution was being used, would generate an extra ready event.size and sizeFull, both being objects containing: width, height and cssClass.
The cssSelectorAncestor determines the element that the cssClass is switched onto.
The option fullScreen determines which setting is used.
Added default values for the HTML css selectors restoreScreen and fullScreen, along with their methods.
cssSelectorAncestor default value changed to "#jp_container_1" from "#jp_interface_1".CSS_SELECTOR_COUNT if ancestor not found.volume and muted options are now maintained on the options object. The duplicate status object properties have been removed. These options can now be changed through the option method. The options object has been added to the jPlayer event object.mute() and unmute() methods now have an optional parameter. The default is true, and sending a false value performs the opposite effect. Eg., mute(false) is the same as unmute(), which both set muted to false.muted value of true now correctly displays the volume bar at zero.wmode option (default:"window") to constructor options. Valid wmode values: window, transparent, opaque, direct, gpunoConflict option (default:"jQuery") for use with jQuery.noConflict(true).emulateHtml option (default:false), which creates a bridge that emulates the HTML5 media properties, methods and events on the jPlayer DOM element.
This works with both HTML and Flash solutions. Properties are read-only. Known conflict with readyState property on IE9.
jPlayer("destroy") now works with empty strings (and unfound selectors) in the cssSelector control association object.jPlayer("play",time) or jPlayer("pause",time) on broken media URLs when using the HTML solution caused the broken URL to be polled.
The internal HTML error event handler now cancels any delayed commands.
flv and fla support to the supplied formats. This makes using these formats more flexible and robust, rather than fooling jPlayer into playing the Flash FLV format through the m4v and m4a formats and setting {solution:"flash"}.$.jPlayer.platform object for detecting mobile and tablet devices.cssSelector controls restoreScreen and fullScreen now show their correct state.display:none and is then shown again, jPlayer will now setup the Flash from the current status state.
This is primarily for solving a problem with the Full Screen system on Firefox, where position:fixed causes the Flash to reset.
This issue does not affect IE6+ at all. Chrome, Safari and Opera are affected by the display:none issue. Firefox is affected by both.
display:none issue, new events and error codes have been added.
When the Flash generates any additional ready events. the $.jPlayer.event.flashreset event occurs after attempting to setup the Flash with the current status.
The error type $.jPlayer.error.FLASH_DISABLED occurs if any command is given to jPlayer while the Flash is hidden or disabled by the browser.
cssSelector control volumeMax (default: ".jp-volume-max") and its method, which unmutes and sets the volume to max.
The volumechange event is now generated from the HTML media element's event or emulated through JavaScript for the Flash.
The volume fix for Chrome 4 was retested and found to be unneccessary. It has been removed to enable the volumechange event to be used on the HTML element.
autohide, an object with properties: restored, full, fadeIn, fadeOut and hold.
Added the cssSelector entity gui (default: ".jp-gui").
Changed default of the wmode option to "opaque". Changed default of sizeFull:{height:"100%"}
Added $.jPlayer.event.resize event for when screen state changes or when size options change.
loop option (default: false) to determine initial state off loop.
Added the repeat option, which defaults to the repeat event handler for repeating a single piece of media.
Added cssSelectors: repeat (default: ".jp-repeat") and repeatOff (default: ".jp-repeat-off").
Added the $.jPlayer.event.repeat event that occurs when the repeat state is changed and immediately before the ready event.
cssSelector: interface (".jp-interface") to gui (default: ".jp-gui").
jQuery.attr("id") has been changed to a falsy check.
destroy method.nativeVideoControls blocklist option, which is an object containing user agent regular expressions. The native controls are used if matched.
Native video controls are disabled when audio media is supplied and noFullScreen is set if nativeVideoControls found a matched.
noFullScreen blocklist option, which is an object containing user agent regular expressions. The full screen buttons are hidden if matched.noVolume blocklist option, which is an object containing user agent regular expressions. The volume controls are hidden if matched.setMedia method no longer performs a clearMedia command before setting up the new media.destroy method removes the size:{cssClass} from the cssSelectorAncestor.media.canPlayType property, but did not implement the function. The canPlayType() method is now tested in a try/catch before using it. If the test fails, the HTML solution will not be used.timeupdate event was generated by all pause commands.
Now a pause() only generates a timeupdate event if the media was playing.
If paused, a pause(time) only generates a timeupdate event if the time changed.
This fix eliminates possible timeupdate handler recusion loops if pause is used in the handler.
timeupdate and progress event frequency to 4Hz in the Flash fallback. This now matches the HTML event frequency more closely.destroy method now does a clearMedia. This stops downloads from streams persisting on some browsers.swfPath option can now be a URL (or a path) to the SWF file with extension .swf. For example, {swfPath:"/scripts/banana.swf"} where you renamed the Jplayer.swf file to "banana.swf".$.jPlayer.event.click event that detects clicks over the poster image, the HTML video and the Flash video.
While the event works well, on some browsers the transparent layers of the GUI in full screen mode stop this from working as hoped.
As in, the GUI needs to auto-hide and then the clicks can be captured. A different skin could be made to work fine though.
size and sizeFull options of the audio player using the Flash fallback no longer resizes the zero sized flash as well. Also affected the Flash video solution when the poster was still being displayed.display:none and then shown, or when display:fixed in Firefox through the full-screen button of a media player.cssSelector entity noSolution (default:".jp-no-solution"), to enable an error message when a NO_SOLUTION error occurs.verticalVolume option (default: false) to change the volume display and click calculations from horizontal to vertical.$.jPlayer.platform object (Added in [2.0.14]) to enable dot notation on platforms with a space in their name.
Whitespace is replaced with underscores. ie., "windows ce" is now "windows_ce".
progress and timeupdate events were still being generated.
The video play button was always being displayed when the error occurred, if present, where it should not be for the mp3 format.
The play/pause butttons on the GUI are now correctly reset to the 'paused' state. ie., showing the play button.
(NB: The Flash MP4 player did not have this issue.)
<audio> element per jPlayer, that is re-used and is no longer replaced each time setFile is issued.playHead and playHeadTime immediately after setFile, where the src of the audio element was never being set. Also had to correct an issue specific to Opera 10.53, where using playHead immediately after setFile was causing NaN values and corrupting the audio element.{display:none;} in the CSS. This stops the pause button being displayed briefly when the page loads. If you need different display types for play and pause, then set the cssId for play first, followed by setting pause.playHead, playHeadTime or stop immediately after a setFile when the browser is using HTML5 native audio, are now cleared when issuing a setFile, pause or stop command. Eliminates chained commands from generating unexpected results.volume command for Chrome 4, where it was not working when used between the setFile and play commands. Also fixed when setting the volume multiple times to the same value during the condition.System.security.allowDomain('*'). This change allows cross-domain access of the SWF file and enables HTML to remote SWF scripting.preload constructor option. Default is {preload:'none'}. Options from HTML5 Draft Spec are: none, metadata, auto.jPlayer('load') to preload the current audio file.jPlayer("cssId",fn,id) now issues a jQuery.blur() to the id that was clicked. This also affects the default cssIds, which use this function internally. This was added so that a link anchor <a> or form elements <input> and <button> would lose focus after being clicked on. ie., otherwise some browsers would highlight it until the user clicked elsewhere on the page.tabindex to the recommended HTML structure and changed controlling elements to <a>. This does not effect jPlayer directly, but since the default skin is widely used, we are mentioning it here in these notes.Audio() object, which replaces the old method of inserting an <audio> tag into the page.HTMLAudioElement.buffered coding so that it conforms with the current HTML5 Draft Spec. This fixes an issue in Opera 10.51, where the buffered property is being set to a TimeRanges object, but it is not actually being updated by the browser.jPlayer("setFile",mp3[,ogg]). Both issues are now fixed.jPlayer("setFile",mp3[,ogg]) command is issued.{volume:percent} and the method jPlayer("volume",percent).jPlayer("setFile",mp3[,ogg]) command now clears the internal controller on HTML5 browsers.playHead, playHeadTime or stop immediately after a setFile when the browser is using HTML5 native audio, are now cleared before delaying a new command. Issuing a play command clears the delayed command.jPlayer("clearFile") command, which enables clearing the current audio file and disabling the playback commands.version, swfVersionRequired and swfVersion. The jPlayer version text has been added to the SWF file, so direct viewing of the SWF shows its version. Check failure will create an alert if {errorAlerts:true}, but no other action is taken.jPlayer(). This breaks backwards compatibility and developers are advised to review the new documentation for the new control mechanism.Sound.onSoundComplete to raise a flag, which is then captured by the progressBroker(). The values affected by the inaccurate Sound.position property are forced to their correct values. (Affects: playedTime, playedPercentRelative and playedPercentAbsolute.)playHead, playHeadTime or stop immediately after a setFile when the browser is using HTML5 native audio, now works and does not throw an exception.ExternalInterface.addCallback() declarations and the jPlayerReady signal. This solved the problem with local testing on Firefox 3.6.{warningAlerts:true}). Affects the constructor ready() function, onSoundComplete() and onProgressChange().jPlayer.play event code in IE, setInterval(function, time, argument), since IE only supports setInterval(function, time). (IE does not supports HTML5 at the moment.)setFile command caused the audio file to be pinged before a play command was given. This has been fixed so that the audio file will not be touched until a play command is given.HTMLMediaElement.buffered.end(), such as Safari 4, stopping or pausing jPlayer while the download was in progress would freeze the load bar. This fix allows the load bar to function correctly, irrespective of whether jPlayer is playing or not.jPlayerId method renamed to cssId to match data structure.bufferMsg method and associated code, since this feature was only supported when the Flash component was used.customCssId constructor option to control whether the default CSS Ids are used. See documentation for more information. (Default: {customCssId:false}nativeSupport constuctor option to force jPlayer to use the Flash component. (Default: {nativeSupport:true})errorAlerts and warningAlerts constructor options to help debug jPlayer projects. (Default: {errorAlerts:false, warningAlerts:false}graphicsFix constructor option to allow the hidden random number text to be disabled. The random number is used to fix graphical update problems with Safari and Chrome browsers.jPlayer("getData", dataName) method. This includes new diagnostic information such as whether jPlayer is playing a track or not. For advanced users, read/write access is provided through $("jpId").data("jPlayer.config"). See documentation for full details.swfPath logic to accommodate a trailing slash on the path. Eg. {swfPath: "myDir"} is the same as {swfPath: "myDir/"}.{errorAlerts:true}) that there is a problem with the swfPath and/or Jplayer.swf file location.onProgressChange happens after all internal configuration data has been updated. When onSoundComplete occurs, onProgressChange is called once afterwards. The HTML5 and Flash solutions mirror this sequence.eval() statements.cssId is given. (Note: cssId was formerly jPlayerId.)canPlayType(MIME) now checks for an empty string and a "no". This corrects a bug that affected new browsers as they adopted changes to the HTML5 Draft Spec. This bug had affected updates to Firefox 3.5 and Safari 4.volume constructor option when using HTML5. The new audio file is now initialised with the current volume. The current volume is now stored/maintained in the jPlayer config.config.aid, being used before being defined.setTimeout(function, time, argument), since IE only supports setTimeout(function, time). (IE does not supports HTML5 at the moment.)jPlayer.setFile(mp3, ogg) commands. Priority given as 1) HTML5/OGG, 2) HTML5/MP3, 3) Flash/MP3jPlayer.setFile(mp3, [ogg]), where the mp3 file could not be changed from the 1st specified. This bug had affected browsers that supported HTML5 with mp3 format. (Currently only Safari 4)HTMLMediaElement.buffered DOM object implemented. (Currently only Safari 4)jPlayer.jPlayerGetInfo(element) method to enable access to basic diagnostic information.<audio> element on compliant browsers that can play mp3 format. At release, only the WebKit nightly builds for Mac OS X has implemented HTML5 support for mp3 format.ready() along with the methods jPlayer.onSoundComplete(fn) and jPlayer.onProgressChange(fn) to enable the use of $(this) within the user defined functions.jPlayer.setFile(f) twice, jPlayer.stop(), jPlayer.playHead(p) or jPlayer.playHeadTime(t) on an instance that had never been played using jPlayer.play() would cause all sounds to stop, regardless of the jPlayer instance.volume to enable setting of the initial volume value.jPlayer.change(file) to jPlayer.setFile(file) to avoid jQuery naming conflict with the jQuery.change(fn) event.$(this), which enables chaining.jPlayer.changeAndPlay(file) method, as chaining makes this redundent.getMovie() in the plugin to always return the document[fid]. Previously, Internet Explorer would return window[fid] instead. This removes a browser conditional statement, which was found to be redundent since the plugin adds the Flash object to the document definition in IE.jPlayer.playHead(p) so that it could be used immediately after jPlayer.setFile(file) without needing a jPlayer.play() command prior to it.jPlayer.playHeadTime(t) to make the play head jump to the time defined in seconds.