__group__	ticket	summary	component	version	type	owner	status	created	_changetime	_description	_reporter
Backlog Release	1807	Support Envivio HLS streams	streaming		bug	jeroen	new	2012-11-23T03:39:58-05:00	2013-05-08T18:34:18-04:00	"Streams from the encoders differ in one location from AMS/WMS streams: their ADTS syncword is ''0xFFF8'' instead of ''0xFFF1''. We can add support for these streams by allowing this syncword (like we do for Sorenson):

{{{
/** ADTS Syncword (111111111111), ID (MPEG4), layer (00) and protection_absent (1).**/
public static const SYNCWORD:uint =  0xFFF1;
/** ADTS Syncword with MPEG2 stream ID (used by e.g. Squeeze 7). **/
public static const SYNCWORD_2:uint =  0xFFF9;
/** ADTS Syncword with MPEG2 stream ID (used by e.g. Envivio 4Caster). **/
public static const SYNCWORD_3:uint =  0xFFF8;
}}}

A teststream is available under ''envivio/manifest''."	jeroen
Backlog Release	1843	VAST mute tracking fired twice	advertising		bug	alex	new	2012-12-13T13:10:02-05:00	2013-01-24T12:36:55-05:00	VAST tracking event for mute and unmute is fired twice. 	alex
Backlog Release	1878	RTMP SMIL: fullscreen switches triggers lowest quality	general		bug		new	2013-01-03T06:00:11-05:00	2013-05-02T15:41:31-04:00	"If the RTMP SMIL manifest does not have dimensions defined, a fullscreen switch (both in and out) will result in the player switching to the lowest quality. Instead, the player should stick to the highest quality at all times (as in: the highest quality that fits the bandwidth). 

This bug can be verified with the attached HTML and SMIL files. Note the bandwidth in the test location should be sufficient to allow high quality streams."	jeroen
Backlog Release	1889	Chrome issue detecting mouse pointer location	embedding		bug		new	2013-01-15T10:24:01-05:00	2013-05-17T14:02:14-04:00	"This seems to be a small bug with the way we detect the mouse pointer location. If the player is inside a relative body, the coordinates are offset, leading to strange behaviour for both the rightclick and the seekbar.

A simple example is attached. Note this only happens with Chrome in HTML5.
"	ed
Backlog Release	1897	onPlay event is sent twice in html5 mode	general		bug		new	2013-01-31T08:08:30-05:00	2013-05-03T17:20:26-04:00	A publisher is reporting that in HTML5 mode, on Webkit browsers only, the onPlay event is sent twice.	alex
Backlog Release	1948	Load fragment N-2 for HLS live streams	streaming		bug		new	2013-03-26T11:08:25-04:00	2013-03-26T11:08:25-04:00	"For HLS live streams, the player should load fragment N-2 instead of N-1. This issue was overlooked in ticket [1811].

The player should follow the HLS spec to determine which media segment is played:
[http://tools.ietf.org/html/draft-pantos-http-live-streaming-05#section-6.3.3 HLS Specification]
"	ed
Backlog Release	1953	HTML5 play icon has generic CSS name	general		bug		new	2013-04-04T15:27:58-04:00	2013-04-04T15:27:58-04:00	"The class name of the play button in the html5 player is ""icon"". It should be called something like ""jwicon"" to prevent css/jQuery conflicts."	ed
Backlog Release	1954	Vast Flash > Complete tracking event not fired	advertising		bug		new	2013-04-16T14:12:52-04:00	2013-04-16T14:12:52-04:00	"For at least some ad tags, the complete event is not being fired.
Tags where complete is not working include
http://test.crosscast-system.com/jwplayer6/vast-preroll.xml 
Config available here
http://test.crosscast-system.com/jwplayer6/vast-preroll.html


http://www.longtailvideo.com/sites/default/files/advertisement.xml
config available here:
http://www.longtailvideo.com/support/jw-player/31403/static-vast-xml-tag

To reproduce, watch the network tab in Developer tool while one of these tags plays. You should see the tracking events for the quartiles correctly fired, but no complete event.

"	alex
Backlog Release	1955	Vast Flash > Fullscreen tracking event is firing incorrectly	advertising		bug		new	2013-04-16T14:21:00-04:00	2013-04-16T14:21:00-04:00	"The Vast ad plugin is firing the fullscreen event on entering fullscreen and exiting fullscreen. 
This can be seen here:
http://www.longtailvideo.com/sites/default/files/advertisement.xml config available here: http://www.longtailvideo.com/support/jw-player/31403/static-vast-xml-tag

To replicate, track network traffic in the Network tab of Developer's tools. When you go to fullscreen, you should see the tracking URL for the fullscreen. When you exit fullscreen, the same event is fired.

"	alex
Backlog Release	1957	HLS stream loses MP3 audio between fragments	general		bug	jeroen	new	2013-04-18T13:13:40-04:00	2013-05-20T17:30:25-04:00	"A publisher has issues with his HLS audio stopping after 10 seconds. This seems to be exactly on the fragment boundary. Something is happening in our HLS framework here that drops the audio. 

The adaptive test suite has two test streams that cut out, both MP3:

 * ''adaptive/out/playlist.m3u8''
 * ''adaptive/red/playlist.m3u8''"	jeroen
Backlog Release	1958	onSeek() always returning position 0 for HLS	streaming		bug	jeroen	new	2013-04-18T13:28:49-04:00	2013-04-18T13:28:49-04:00	"For HLS in Flash mode, the onSeek() API call always returns 0 for the event.position. It should return the location the player is seeking to. The event.offset attribute is correctly set. 

Here's an easy example setup to reproduce:

{{{
jwplayer(""container"").setup({
  file: ""http://playertest.longtailvideo.com/adaptive/bunny/manifest.m3u8"",
});
jwplayer().onSeek(function(event){
  console.log(event);
});
}}}"	jeroen
Backlog Release	1961	LoQ streams play only audio	streaming		bug	jeroen	new	2013-04-18T16:54:12-04:00	2013-05-08T17:37:53-04:00	"We encountered a few HLS test stream that only plays audio - no video. The issue seems related to the videos being low quality/bitrate (Baseline), but the exact cause is unclear. 

The streams are available in our HLS test set under: 

 * ''440k/playlist''
 * ''bartone/playlist''
 * ''sermon	playlist''"	jeroen
Backlog Release	1962	Some scenarios show double divider next to mute button	skinning		bug	jeroen	new	2013-04-18T19:16:07-04:00	2013-05-06T12:26:38-04:00	"There's two issues with double dividers around the mute button:

 1. The HTML5 player nearly always displays a double divider to the left of the volume. When setting HD sources, the issue disappears, so it looks like the divider is not correctly removed together with the HD button. It can be seen e.g. with this setup and a Premium/Ads key:

{{{
jwplayer(""container"").setup({
    file: 'http://content.bitsontherun.com/videos/i8oQD9zd-640.mp4',
    skin: 'five'
});
}}}


 2. Both Flash and HTML5 player show a divider to the right of the mute button in audio only mode. This is likely related to the Fullscreen icon being removed but the divider not. It can be tested like this: 

{{{
jwplayer(""container"").setup({
    file: 'http://content.bitsontherun.com/videos/3XnJSIm4-I3ZmuSFT.m4a',
    skin: 'beelden',
    height: 40
});
}}}"	jeroen
Backlog Release	1965	RTMP stream broken in 6.3	streaming		bug	jeroen	new	2013-04-19T12:56:25-04:00	2013-04-19T12:56:25-04:00	"For some reason, an RTMP stream that looks totally normal works in 6.2 but breaks in 6.3. 

Attached is a test page with the stream."	jeroen
Backlog Release	1967	Video in HLS stream behaves like slide show	streaming		bug	jeroen	new	2013-04-19T13:57:58-04:00	2013-05-13T18:45:51-04:00	"For some streams, HLS in Flash plays back the video like a slide show. It's uncertain what causes this issue. 

A common denominator of these streams is that they're encoded using x264 two-pass. 

Test streams can be found in our adaptive test set under:

 * canvas/playlist
 * gogo/manifest
 * haze/manifest
 * tvy7/playlist
 * pbs/playlist"	jeroen
Backlog Release	1970	Inconsistent onSeek() event properties	general		bug	jeroen	new	2013-04-30T12:15:08-04:00	2013-04-30T12:15:08-04:00	"The onSeek() API call is fired the moment a user initiates a seek and has two properties:

 1.  The current ''position'' the user seeks '''from'''
 2. The ''offset'' the user requests to seek '''to'''

The following behaviour can be seen with attached HTML file:

 * Flash progressive: ''position'' contains the '''from''' value and ''offset'' the '''to''' value (OK)
 * RTMP: ''position'' contains the '''from''' value and ''offset'' the '''to''' value (OK)
 * YouTube: ''position'' contains the '''from''' value and ''offset'' the '''to''' value (OK)

 * HTML5 progressive: both ''position'' and ''offset'' contain the '''to''' property (FAIL)
 * HLS: ''position'' contains always '''0''' value and ''offset'' the '''to''' value (FAIL)"	jeroen
Backlog Release	1972	HTML5 player breaks if skin has no menuTopCC/HD	skinning		bug	jeroen	new	2013-05-03T09:20:27-04:00	2013-05-03T09:20:27-04:00	"The HTML5 player renders an error if a skin has either no menuTopCC or menuTopHD:

{{{
NotFoundError: DOM Exception 8
}}}

The player should work just fine without these elements in the skin. Attached is an example skin.

"	jeroen
Backlog Release	1973	Small volumeProgress/volumeThumb issues in HTML5	skinning		bug	jeroen	new	2013-05-03T09:30:44-04:00	2013-05-03T09:30:44-04:00	"There's two small skinning issues with the volume slider in HTML5 mode:

 * volumeProgress and volumeThumb are not centered horizontally
 * volumeProgress is not stretched vertically

In Flash, both work fine.

See attached screenshot and skin for an example."	jeroen
Backlog Release	1974	Flash player doesn't show divider left of CC button	skinning		bug	jeroen	new	2013-05-03T09:43:55-04:00	2013-05-03T09:43:55-04:00	"If a player has only a CC button and on HD one, the Flash player doesn't show the divider left of the CC button. The HTML5 player does so.

See attached screen and skin for an example."	jeroen
Backlog Release	1975	Play and replay icons stay in hover state in Flash	interface		bug	jeroen	reopened	2013-05-03T09:51:07-04:00	2013-05-23T16:29:12-04:00	"In the Flash player, the (re)play icon stays in hover state once it's triggered. It can be easily seen by mousing over and then out of the flash-primary example player:

http://www.longtailvideo.com/support/jw-player/29239/flash-as-primary"	jeroen
Backlog Release	1976	Display title background doesn't stretch with multiple players	interface		bug	jeroen	new	2013-05-03T11:36:28-04:00	2013-05-03T11:36:28-04:00	"If there's many players on a page, the background of the display-title in HTML5 mode sometimes isn't stretched for the first (few) players. Attached screenshot shows the issue.

The issue can be reproduced with attached HTML file, where it should be happening always on iPad.

"	jeroen
Backlog Release	1977	"Some HLS streams result in ""TS sync byte"" error"	streaming		bug	jeroen	new	2013-05-08T18:21:47-04:00	2013-05-15T14:40:16-04:00	"For some reason, a few of our test streams result in a TS sync byte debug error in our HLS provider:

{{{
Error: Could not parse TS file: sync byte not found.
    at com.longtailvideo.adaptive.muxing::TS/_readPacket()
    at com.longtailvideo.adaptive.muxing::TS/readData()
    at com.longtailvideo.adaptive.streaming::FragmentLoader/_readHandler()
    at com.longtailvideo.adaptive.streaming::FragmentLoader/_completeHandler()
    at com.longtailvideo.adaptive.streaming::FragmentLoader/_progressHandler()
}}}

Unclear exactly why this happens. Maybe the fragments don't start with a TS header, or maybe we have an error in counting TS packets?

We have the following test streams (note the second also has AES):

 * ''journaal/playlist''
 * ''setanta/playlist''
 * ''nationdesign/prog_index''"	jeroen
Backlog Release	1978	Quality changes inside onQualityLevels() break in RTMP	streaming		bug	jeroen	new	2013-05-08T19:37:10-04:00	2013-05-08T19:37:10-04:00	"When using RTMP, setting the quality level inside the onQualityLevels() callback, a debug error is thrown. For some reason, the timing seems broken. 

This event flow is important, since using ''setCurrentQuality()'' inside ''onQualityLevels()'' is a typical use case for setting quality levels with scripting. For now though, the issue can be circumvented by using a small setTimeout().

For progressive (Flash/HTML5) and HLS, this works fine. 

Attached is a test page that can be used to replicate the issue."	jeroen
Backlog Release	1979	playIcon not hiding in HTML5 when removed from skin	skinning		bug	jeroen	new	2013-05-09T12:21:56-04:00	2013-05-09T12:21:56-04:00	"When removing the (re)playIcon assets from a skin, the (re)play icon should be removed from the player. 

 * This works great in Flash
 * However, in HTML5, the edges are still displayed. They should get hidden as well.

Note the buffer and error icon would still show up for this skin, which is indeed the case in both Flash and HTML5."	jeroen
Backlog Release	1980	Controls option + API ignored by inStream	advertising		bug	jeroen	new	2013-05-09T12:41:21-04:00	2013-05-09T12:41:21-04:00	"The instream API ignores the ''controls=false'' configuration option and the ''setControls()'' API call. It should honor these though, showing/hiding the controlbar just like with regular videos. 

Note the banner at the top of the screen doesn't have to be toggled for visibility. We're removing that banner and putting that text in the controlbar for 6.6."	jeroen
Backlog Release	1982	Inconsistencies with onResize() in HTML5	scripting		bug	jeroen	new	2013-05-14T13:33:37-04:00	2013-05-14T13:33:37-04:00	"The onResize() event has a few inconsistencies in the HTML5 player. We should clean them up:

 1. ''onResize()'' gets fired upon page load in HTML5. That should not be the case.
 2. ''onResize()'' has the wrong dimensions when going FS in HTML5 on Chrome.

A simple setup to confirm these issues with is:

{{{
jwplayer(""container"").setup({
    image: ""http://content.bitsontherun.com/thumbs/3XnJSIm4-640.jpg"",
    file: ""http://content.bitsontherun.com/videos/3XnJSIm4-640.mp4""
});
jwplayer().onResize(function(event){
  console.log(event);
});
}}}
"	jeroen
Backlog Release	1983	HLS: seek outside range triggers infinite buffer	streaming		bug	jeroen	new	2013-05-15T11:24:22-04:00	2013-05-15T11:24:22-04:00	"Currently, it's possible to seek outside of the duration of a video with our controlbar. In [http://www.longtailvideo.com/support/jw-player/29393/hls-adaptive-stream our HLS example], one can e.g. seek to 10:04 while the video is 09:56. 

This outside-seek by itself is not a big problem. The resulting ''infinite buffering'' bug is though. Therefore, we should patch the HLS provider: every time a seek beyond the duration happes, the player should seek to the start of the last fragment."	jeroen
Backlog Release	1985	MP3 only HLS streams broken since 6.1	streaming		bug	jeroen	new	2013-05-16T12:01:03-04:00	2013-05-16T12:01:03-04:00	"In 6.0, MP3-only HLS streams worked OK. In 6.1, they broke though. This regression should get fixed, and cases added to tests. We have the following streams:

 * A Sintel MP3 on our WMS / AMS / USP test server
 * A stream on playertest in ''espn/playlist''"	jeroen
Backlog Release	1988	Specific AES HLS stream not played by JW Player	streaming		bug	jeroen	new	2013-05-21T14:16:19-04:00	2013-05-21T14:16:19-04:00	"We encountered an HLS stream, segmented with Apple's tools, that for some reason doesn't play in 6.5. This may be related to the position of #EXT-X-KEY or the custom IV in the playlist. 

The stream is found under ''drone/playlist'' on playertest."	jeroen
Backlog Release	1989	With multibitrate AES HLS, playback breaks on switches	streaming		bug	jeroen	new	2013-05-22T09:33:30-04:00	2013-05-22T09:33:30-04:00	"Steps to reproduce:

 1. Get a multi-bitrate HLS stream in which the various qualities are encoded with different keys
 2. Start the stream, then change the bandwidth / fullscreen to invoke a switch
 3. Playback gets stuck, because the player tries to decrypt the new fragment with the old key

This may also happen with manual switching, but I haven't confirmed. 

"	jeroen
Backlog Release	1991	In HTML5, over/active listbar description colors are not picked up	skinning		bug	jeroen	new	2013-05-23T16:43:50-04:00	2013-05-23T16:43:50-04:00	"... In Flash mode, they do work. 

This can be verified e.g. with Bekle."	jeroen
Backlog Release	1618	Only reload active HLS playlist for live streams	streaming		enhancement	jeroen	new	2012-03-27T08:38:46-04:00	2013-05-15T14:25:30-04:00	For live, all manifests are currently re-fetched during playback. With many quality levels, this leads to a lot of overhead. It's better to only reload the current level and do just-in-time reloads for the new level upon switches.	jeroen
Backlog Release	1738	Support custom quality labels for SMIL/M3U8	streaming		enhancement	jeroen	new	2012-10-17T06:14:37-04:00	2013-04-20T14:25:17-04:00	"Right now, it's only possible to set a quality label using playlists. We should update this, supporting custom labels in all scenarios:

 * SMIL manifests
 * M3U8 manifests

We can do this by supporting:

 * ''NAME='' for M3U8,  per [https://developer.apple.com/library/ios/#technotes/tn2288 this Apple tech note]
 * ''''title='' for SMIL, per the [http://www.w3.org/TR/REC-smil/#media-object SMIL 1.0 spec]

This would not allow publishers to set the labels if they have no control over the manifest rendering. However, it would nicely package the labels along with other quality info.

=== M3U8 Example ===

{{{
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1600000,RESOLUTION=1280x720,NAME=""720P HD""
1280/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=832000,RESOLUTION=640x360,NAME=""360P SD""
640/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=320000,RESOLUTION=320x180,NAME=""180P 3G""
320/prog_index.m3u8
}}}


=== SMIL Example ===

{{{ 
<smil>
  <head>
    <meta base=""rtmp://example.com/vod/"" />
  </head>
  <body>
    <switch>
      <video src=""myVideo-high.mp4"" title=""720P HD"" system-bitrate=""2000000"" width=""1280"" />
      <video src=""myVideo-medium.mp4"" title=""360P SD"" system-bitrate=""800000"" width=""640"" />
      <video src=""myVideo-low.mp4"" title=""180P 3G"" system-bitrate=""300000"" width=""320"" />
    </switch>
  </body>
</smil>
}}}"	jeroen
Backlog Release	1899	Uninterrupted playback of (repeating) videos	general		enhancement	jeroen	new	2013-01-31T09:10:28-05:00	2013-05-23T16:29:54-04:00	"Currently, repeating/advancing videos result in some interruptions around transition moment:

 1. When repeating a video, a black screen is displayed shortly before replay starts. 
 2. When advancing from one playlistItem to the next, the poster image is shortly flashing in between.
 3. (Flash only) The buffer icon is flashing shortly during the advance. It'd be nicer to only fade in the bufferIcon after e.g. 1s.

As a publisher, I would want videos to advance or repeat smoothly, without any poster images, black frames of buffer icons flickering in.
"	jeroen
Backlog Release	1903	Force a switch when going to/from Auto quality	streaming		enhancement	ed	new	2013-02-05T06:21:10-05:00	2013-05-08T19:48:42-04:00	"For both RTMP and HLS, we currently do a smooth switch in response to the following actions:

 * The quality is not set to ''Auto'' and the viewer selects the ''auto'' option.
 * The quality is set to ''Auto'' and the viewer selects the bitrate option that currently happens to be selected by the auto-algorithm. 

Instead of a smooth switch, we should do a ''hard'' switch for these two situations as well. This will result in re-buffering, but:

 * It's then clear to the viewer something happens in response to their selection.
 * The switch in response to the viewer selection won't disrupt the adaptive heuristics (which is the case right now).

Note that, after this update, every quality selection will result in a ''hard'' refresh of the stream. The only ''smooth'' switches occur during playback of the stream in ''auto'' mode.

As part of this, we should also fix the problem that right now, after coming from a cookie, it's not possible to set a stream to Auto. This issue can be checked [http://www.longtailvideo.com/support/jw-player/29393/hls-adaptive-stream on our demopage] with these steps:

 1. set 360p
 2. refresh the page
 3. try to set Auto (fails) 
 4. set 180p or 720p
 5. set Auto (works)
"	jeroen
Backlog Release	1933	Support HLS 302 redirects on M3U8 manifests	streaming		enhancement	ed	new	2013-03-11T08:52:09-04:00	2013-03-11T08:52:09-04:00	"At present, JW Player doesn't support 302 redirects on M3U8 manifests. The issue is that the 302 isn't taken into account when generating the URLs to the TS fragments. Attached screenshot shows what's going wrong.

We should figure out a way to detect the redirects in Flash to create the correct the URLs to the TS fragments."	jeroen
Backlog Release	1935	Ignore 404 HLS playlists instead of error out	streaming		enhancement	ed	new	2013-03-12T10:38:27-04:00	2013-03-12T10:38:27-04:00	"Sometimes (Akamai in particular), several M3U8 playlists in a manifest give a 404 error. The iOS player quietly discards these playlists, but JW Player actually errors out the entire stream.

We should follow what iOS does here and discard the 404 playlists. As long as there's at least 1 playlist in the manifest that does work, the stream can be played. 

See the attached screenshot for more details on the error."	jeroen
Backlog Release	1938	Investigate patch for better RTMP bitrate switching	streaming		enhancement	jeroen	new	2013-03-12T10:47:00-04:00	2013-05-23T16:30:10-04:00	"A publisher sent us a patch to improve bitrate switching for RTMP (attached). We should investigate his changes to see which ones are good to incorporate.

Note RTMP switching in JW6 is definitely more conservative than JW5. Basically, if bandwidth increases, JW6 will still be very reluctant to switch up."	jeroen
Backlog Release	1984	Correct for drifts between playlist and mediastream in HLS	streaming		enhancement	jeroen	new	2013-05-15T18:40:44-04:00	2013-05-15T18:40:44-04:00	"With certain streams, the fragment durations reported in the M3U8 are different from the actual durations of the TS fragments. This can lead to issues on both the vod and live side:

 * For VOD, the timeSlider may over-report or under-report for the duration of the stream. In the first case, the video stops half-way. In the second case, the timeThumb runs beyond the right side of the timeSlider.
 * For Live, the player is slowly but surely under- or overbuffering, leading to an ''infinite buffer'' loop in both cases. 

I created two VOD test playlists to check this issue:

 * ''oceans/toolong.m3u8''
 * ''oceans/tooshort.m3u8''"	jeroen
Backlog Release	1990	Sharing UI: new FB/TW icons and no labels	interface		enhancement	jeroen	new	2013-05-22T17:11:34-04:00	2013-05-22T17:11:34-04:00	"Good feedback from customers on Sharing: 

 * The Facebook and Twitter icons we use are a bit outdated. We should use the latest versions (attached).
 * A small redesign of the input elements allows us to remove the labels (attached)

We should implement both, e.g. with a newt update of the Sharing functionality.



"	jeroen
Backlog Release	1214	Add YouTube support for HTML5	general		feature	jeroen	new	2011-01-25T16:26:43-05:00	2012-10-17T10:01:29-04:00	"I was reading this (http://apiblog.youtube.com/2011/01/introducing-javascript-player-api-for.html) and noticed that there's now an iFrame API:

http://code.google.com/apis/youtube/iframe_api_reference.html

It's missing a bunch of stuff, but I think we could make it work assuming we a.) stick with the native controls on iOS and b.) the player resizes to fill the iFrame.

They don't guarantee all of the functions work, but perhaps enough do?"	zach
Backlog Release	1644	"Support ""sliding window"" DVR in HLS"	streaming		feature	jeroen	new	2012-04-27T04:34:41-04:00	2013-05-20T11:32:23-04:00	"With HLS, live streams are implemented using a ''sliding window'' model. If this window is large (e.g. >5min), we could layer additional UX on top of the player to support seeking into this window and jumping back to the ''Live'' playhead. 

 * Attached are screenshots from other DVR interfaces. Note that some of these don't work for us, since the interface presumes knowledge of the start + duration of a DVR stream.
 * Also attached are mockups of the timeslider playback state for different stream types.

In order to implement this correctly, we have to make updates to the providers, API and controlbar.

=== Providers ===

On a provider level, we should ensure that the correct ''onTime()'' and ''getDuration()'' events are fired:

 * For VOD, we do what we do today: ''duration'' is the media duration and onTime() is fired multiple times / second when playing. 
 * For live (RTMP + HLS + HTML5 iOS/Safari), we set  ''duration'' to -1 for live streams and fire a single ''onTime()'' event every time the PLAYING state is entered.
 * For DVR (only HLS in Flash),  HLS, we:
   * Set ''duration'' to -(dvr seeking range), where the DVR seeking range is defined as the duration from the oldest fragment until N-2 (the live head). This because we shouldn't allow users to seek beyond the live head and trigger buffer underruns.
   * Set  ''position'' to -(distance from live head)
   * Fire time ticks every fragment load (not multiple times/second), in both PLAYING and PAUSED state (not just PLAYING).

Note the difference between HLS Live and DVR is the window size. Live playlists that have  > 60s data are DVR, others are live.

=== API ===

On an API level, we can support the different playback states as follows:

 * ''Idle'' (before playback starts): getDuration() returns 0 and no time ticks.
 * ''Ondemand'': getDuration() > 0 and multiple time ticks / second on playing.
 * ''Live'': getDuration() = -1 and only a single time tick on playing.
 * ''DVR'': getDuration() < -60 and time ticks every fragment load on playing AND paused.

Note that components and scripts shouldn't have to listen to the onMeta() call to determine which stream type a playlistItem is. simply listening to the first onTime() tick will tell them enough. 
 
=== Controlbar ===

A mockup of the controlbar for the 4 stream states is attached. The ''live'' and ''dvr'' states are new:

 * For ''live'', we display the text with the same styling as elapsed/duration texts. Note a separate ticket (#1690) is available for this.
 * For ''dvr'', we can re-use all existing skinning elements. Since timing is only updated every fragment load, it should feel like a ''slow'' version of the ''vod'' state.  If the fragments are always the same length, nothing should move during playback and the thumb should jump backward every fragment load when pausing."	jeroen
Backlog Release	1673	Define keyboard focus and shortcuts	general		feature	jeroen	new	2012-07-13T11:51:33-04:00	2012-11-30T06:00:13-05:00	"At present, there's no clear model for managing mouse/keyboard focus in the player. This leads to such issues as:

 * When keyboard tabbing through an idle HTML5 player, the hidden buttons are actually accessible and working, leading to un-anticipated player states.
 * When tabbing in a playing HTML5 player, buttons are disappearing again.
 * When a Flash player with visible controlbar completes, the controlbar stays visible. The logo does hide though.
 * In HTML5, the controls stay visible when hovering them. In Flash the controls hide after a timeout.
 * In both Flash and HTML5, the controls still hide when the mouse hovers the display.
 * In Flash, the ''play'' icon highlights when hovering the controls or sidebar.

We should define and implement an easy to understand model for focus and keyboard control. 

Next, we can implement a set of shortcut keys that are available to the viewer when the player is in focus:

 * Space: play/pause toggle
 * Left/right: seek forward and backward 10 seconds
 * Up/down: raise or lower the volume by 10 percent
"	pablo
Backlog Release	1690	Live streaming controlbar state	general		feature	jeroen	new	2012-08-26T07:49:01-04:00	2013-05-15T14:12:51-04:00	"In the JW6 wireframes, we specced out a state for the controlbar in ''live streaming'' mode, that differs from regular streaming:

 * Elapsed time, time slider and duration are hidden.
 * To the right of the ""play"" icon, the title of the playlist item is displayed.
   * Using exactly the same skinning options (font, color, etc) as the ""elapsed'' time
   * If no title is set in the config, we default to the string '''Live broadcast'''.

Note that live streams are supported for both HLS and RTMP. They can be detected by a duration of ''-1'' that's sent along with ''onTime'' events."	jeroen
Backlog Release	1729	Closed Captions support in HLS	streaming		feature		new	2012-10-10T08:32:08-04:00	2013-05-20T09:25:55-04:00	"iOS supports closed captions in HLS, as 708/608 data packed in AVC SEI RBSP units:

    HTTP Live Streaming supports adding closed captions to streams. If you are using the stream segmenter, you need to add CEA-608 closed captions to the MPEG-2 transport stream (in the main video elementary stream) as specified in ATSC A/72.

We should investigate support in Flash for these. Some references:
 
 * http://en.wikipedia.org/wiki/CEA-708
 * http://en.wikipedia.org/wiki/EIA-608
 * http://www.atsc.org/cms/index.php/standards/standards/57-atsc-a72-standard

Here's some constraints for the initial round of support:

 * Only one track needs parsing (like RTMP), since we target CC and not multi-language.
 * All text positioning and styling date can be ignored (again like RTMP). Only the textcues + timing are needed.

We have one example stream (''captions/playlist''), plus [http://content.bitsontherun.com/videos/D9rygobt-eE9soefF.mp4 an example stream] containing 608 data (to load into Wowza)."	jeroen
Backlog Release	1992	Support elementary audio streams for HLS	streaming		feature	jeroen	new	2013-05-23T17:34:13-04:00	2013-05-23T17:34:13-04:00	"Currently, our HLS provider solely supports MP3 or AAC audio inside TS. Elementary audio is more efficient though, plus fairly frequently used. According to Wowza, supporting this shouldn't be a big deal:

    It is pretty simple. ID3 tag at the beginning with the starting timecode for the chunk. That is followed by the raw samples. The AAC samples have ADTS headers:

    http://wiki.multimedia.cx/index.php?title=ADTS

    You can get the packet size from the header. For MP3 they are MP3 (4-byte headers) one after another. So no big deal.

We have an example raw AAC stream (''guitar/prog_index''), plus the ability to stream raw MP3/AAC with our Wowza testserver."	jeroen
Backlog Release	1793	Disable 'max-width' setting in audio mode	general		bug		new	2012-11-15T11:55:33-05:00	2012-11-15T11:55:33-05:00	The controlbar's max-width skin setting is useful for large video players, but for audio players, where the non-controlbar space is blank, this setting should be disabled.	pablo
Backlog Release	1862	Captions extend beyond video screen	interface		bug		new	2012-12-18T09:58:07-05:00	2012-12-21T17:14:37-05:00	"See this example:

http://courses.mindedgeonline.com/jwplayerexample.html

I think what's needed to correct this is a removal of some of the ""auto scaling"" logic that's part of the captions now. Instead, we should adhere to the FCC requirements around this. Needs some defining first."	jeroen
Backlog Release	1661	Clear timeouts and intervals on destroy	html5		enhancement	pablo	new	2012-05-31T13:15:13-04:00	2012-10-17T09:46:17-04:00	If the player is destroyed, the internal intervals and timeouts are not automatically cleared.  This can cause problems with event listeners and other integrations.	pablo
Backlog Release	1731	Related links target frame should be configurable	general		enhancement		new	2012-10-12T06:38:46-04:00	2012-10-17T11:24:53-04:00	At present, related videos that are linked open in ''_top''. There are good use cases for other targets though (like ''_self'' for iframes). We cannot change the default (this would break setups), so we have to add an option '''related.linktarget''' to the plugin. Both Flash and HTML5, docs and tests. Default is ''_top''. 	jeroen
Backlog Release	1849	"Use ""heading"" for sharing/related dock button tooltip"	interface		enhancement		new	2012-12-14T16:48:14-05:00	2012-12-14T16:48:14-05:00	"Right now, the sharing/related dock buttonlabels are hardcoded. We should however re-use the ""heading"" texts for these labels. It would make the labels configurable."	jeroen
Backlog Release	1857	HLS: extract aspect ratio from VUI parameters	streaming		enhancement		new	2012-12-15T17:18:14-05:00	2012-12-15T17:18:14-05:00	"The H264 SPS VUI parameters store the dimensions of a stream. Currently, we don't read those in our HLS provider, using the manifest RESOLUTION tag instead. Parsing the VUI would remove that dependency.

Note the VUI parameters are [http://en.wikipedia.org/wiki/Exponential-Golomb_coding Exp-Golomb encoded]. Fun!"	jeroen
Backlog Release	1422	WebVTT cue positioning / tags CSS	general		feature	jeroen	new	2011-08-04T08:26:43-04:00	2013-01-18T11:31:11-05:00	"WebVTT is an rich timed text format that builds upon the SRT format. In addition to the latter, WebVTT supports: 

 * A file header ( WEBVTT FILE)
 * Cue positioning options (D/L/A/T/S)
 * In-cue:
   * timestamps (one<00:02:37.000>two<00:02:38.000>three)
   * CSS class definitions (<c.highlight>wow!</c>)
   * Voice declarations (<v.Henry>Hi!</v>)

More info: http://www.delphiki.com/webvtt/

For now, we only support the basic set (cues, <i>, <b>, <u>, <font>).

In case anyone cares -- more info on ruby characters for Chinese/japanese languages -  http://en.wikipedia.org/wiki/Ruby_character"	jeroen
Backlog Release	1695	Display chapter markers in controlbar	general		feature	jeroen	new	2012-08-30T05:12:21-04:00	2012-10-17T11:14:44-04:00	"Splitting up long-form media in chapters improves its discovery and navigation. We should support this in JW Player:

 * VTT is used as a metadata format. It already describes a specific ''chapters'' function.
   * We solely support chapter titles in the cues.
 * Chapter points are marked on the controlbar with a distinct ''dot''.
   * When hovering these dots, the chapter title can be displayed.
 * When clicking a dot, the media seeks to that chapter start position.

=== Future considerations ===

 * A distinct chapter API can be exposed to open up this functionality for player-page interaction.
 * We can provide an option to display the chapters in the listbar."	jeroen
Player 6.6 Release	1687	"Add ""basic"" listbar layout option"	general		enhancement	jeroen	new	2012-08-23T08:29:39-04:00	2013-05-23T16:35:43-04:00	"This option allows publishers to easily set a more nimble playlist. Fits more items per pixel and doesn't require publishers to provide images/descriptions. Requirements:

 * New ""listbar { layout:'basic|extended' }"" configuration option.
   * Default is the 6.0 state (""extended"")
   * New is ""basic"" state

 * In ""extended"" state, items are 76px high
   * Change from 6.0, where height of the ""item"" element was used
     * Works with all LT skins though, plus with spot-checked 3rd party skins
   * So instead, the ''item'' elements are vertically stretched.
     * Allows for lower bytesize ""item"" elements (1px high)
   * Thumb element is still placed on left, with same values for top/left/bottom margin.
   * Title and description elements are placed with 10px margin.
   * Title is always 1 line, the text baseline is y-positioned at 24px from top.
   * Description is always 2 lines, with line-height of 18.  The first line text baseline is y-positioned at 44px from top.

 * In ""basic"" state, listbar items are 32px high
   * Only the title is displayed, image and description are not
   * Title is vertically centered (e.g. line-height:32)  and left-aligned with 10px left-margin.
   * The ''item'' elements are again vertically stretched to 32px."	jeroen
Player 6.6 Release	1805	Display dock buttons in IDLE state	interface		enhancement		new	2012-11-21T07:52:16-05:00	2013-05-23T16:34:17-04:00	"In the IDLE state, dock buttons should be visible 100% of the time (just like in the COMPLETED state). This because:

 1. Many dock button features should be available before playback. Examples: 
   * Resize the player
   * See related videos
   * Select rendering mode
 2. On mobile, the dock functionality is now very much hidden (only on COMPLETE). 
 3. Javascript developers don't immediately see the dock buttons they insert, so they think the API is broken. 
"	jeroen
Player 6.6 Release	1818	Playlist cannot be scrolled on tablets	interface		enhancement		new	2012-11-30T04:52:30-05:00	2013-05-23T16:35:23-04:00	"On tablets (iPad, Android), the playlist cannot be scrolled by ""swiping"" across it. The only way to scroll the playlist is by clicking the slider (which is not obvious).

Additionally, the iScroller library we supported with JW5 is broken in JW6. This lib added scroll support to iOS (but not Android).

We must implement a fix that enables playlist scrolling by swiping a single finger for iPad and Android 4+."	jeroen
Player 6.6 Release	1154	Skinning for Touch devices	general		feature	jeroen	new	2010-12-13T14:44:53-05:00	2013-05-23T16:35:07-04:00	"With the latest iOS release for iPad, it's now possible to visual elements on top of the <video> tag. Additionally, the webkit fullscreen API has been exposed. This means we could switch over to our skinned controls from native controls.

On iPads, this would have the benefit of being able to add clickable overlay elements into the video area, including dock icons.

In order to keep the UX model good, we'd then have to start supporting certain Touch gestures:

 * Initial tab to show controls
 * Sliding over the controlbar time slider for seeking
 * Sliding over the playlist for 1 finger scrolling"	zach
Player 6.6 Release	1713	Clean up instream Ad UX	interface		feature	jeroen	new	2012-09-26T17:28:18-04:00	2013-05-23T16:36:01-04:00	"The UX for linear VAST ads is a little messy at present, with a bar at the top of the screen and a non-responsive timeSlider in the controlbar. We can tidy this up nicely by adding the ''admessage'' to the controlbar, having it replace the elapsed/duration and timeSlider elements. See the attached mockup.

Note that #1690 describes a similar controlbar state, but then for HLS/RTMP live streaming."	jeroen
Player 6.6 Release	1716	Support skinning for retina displays	skinning		feature		new	2012-09-27T11:29:17-04:00	2013-05-23T16:34:05-04:00	"At present, we only support standard resolution skinning elements, but across player skinning and premium skins. This results in fairly blurry elements on retina displays. 

Supporting retina screens in itself should not be a problem, but we need to investigate:

 * Extending the skinning model to accomodate
 * Not extending the player files size - or not extend it by much (only external skins?)"	jeroen
