__group__,ticket,summary,component,version,milestone,type,owner,status,created,_changetime,_description,_reporter
Active Tickets,1807,Support Envivio HLS streams,streaming,,Backlog,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
Active Tickets,1843,VAST mute tracking fired twice,advertising,,Backlog,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
Active Tickets,1878,RTMP SMIL: fullscreen switches triggers lowest quality,general,,Backlog,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
Active Tickets,1889,Chrome issue detecting mouse pointer location,embedding,,Backlog,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
Active Tickets,1897,onPlay event is sent twice in html5 mode,general,,Backlog,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
Active Tickets,1948,Load fragment N-2 for HLS live streams,streaming,,Backlog,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
Active Tickets,1953,HTML5 play icon has generic CSS name,general,,Backlog,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
Active Tickets,1954,Vast Flash > Complete tracking event not fired,advertising,,Backlog,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
Active Tickets,1955,Vast Flash > Fullscreen tracking event is firing incorrectly,advertising,,Backlog,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
Active Tickets,1957,HLS stream loses MP3 audio between fragments,general,,Backlog,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
Active Tickets,1958,onSeek() always returning position 0 for HLS,streaming,,Backlog,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
Active Tickets,1961,LoQ streams play only audio,streaming,,Backlog,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
Active Tickets,1962,Some scenarios show double divider next to mute button,skinning,,Backlog,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
Active Tickets,1965,RTMP stream broken in 6.3,streaming,,Backlog,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
Active Tickets,1967,Video in HLS stream behaves like slide show,streaming,,Backlog,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
Active Tickets,1970,Inconsistent onSeek() event properties,general,,Backlog,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
Active Tickets,1972,HTML5 player breaks if skin has no menuTopCC/HD,skinning,,Backlog,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
Active Tickets,1973,Small volumeProgress/volumeThumb issues in HTML5,skinning,,Backlog,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
Active Tickets,1974,Flash player doesn't show divider left of CC button,skinning,,Backlog,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
Active Tickets,1976,Display title background doesn't stretch with multiple players,interface,,Backlog,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
Active Tickets,1977,"Some HLS streams result in ""TS sync byte"" error",streaming,,Backlog,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
Active Tickets,1978,Quality changes inside onQualityLevels() break in RTMP,streaming,,Backlog,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
Active Tickets,1979,playIcon not hiding in HTML5 when removed from skin,skinning,,Backlog,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
Active Tickets,1980,Controls option + API ignored by inStream,advertising,,Backlog,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
Active Tickets,1982,Inconsistencies with onResize() in HTML5,scripting,,Backlog,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
Active Tickets,1983,HLS: seek outside range triggers infinite buffer,streaming,,Backlog,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
Active Tickets,1985,MP3 only HLS streams broken since 6.1,streaming,,Backlog,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
Active Tickets,1988,Specific AES HLS stream not played by JW Player,streaming,,Backlog,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
Active Tickets,1618,Only reload active HLS playlist for live streams,streaming,,Backlog,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
Active Tickets,1687,"Add ""basic"" listbar layout option",general,,Backlog,enhancement,jeroen,new,2012-08-23T08:29:39-04:00,2013-05-15T14:23:55-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
Active Tickets,1738,Support custom quality labels for SMIL/M3U8,streaming,,Backlog,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
Active Tickets,1805,Display dock buttons in IDLE state,interface,,Backlog,enhancement,,new,2012-11-21T07:52:16-05:00,2012-11-21T07:52:16-05: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
Active Tickets,1818,Playlist cannot be scrolled on tablets,interface,,Backlog,enhancement,,new,2012-11-30T04:52:30-05:00,2013-01-14T18:34:31-05: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
Active Tickets,1899,Uninterrupted playback of (repeating) videos,general,,Backlog,enhancement,ed,new,2013-01-31T09:10:28-05:00,2013-05-08T19:28:37-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
Active Tickets,1903,Force a switch when going to/from Auto quality,streaming,,Backlog,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
Active Tickets,1933,Support HLS 302 redirects on M3U8 manifests,streaming,,Backlog,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
Active Tickets,1935,Ignore 404 HLS playlists instead of error out,streaming,,Backlog,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
Active Tickets,1938,Investigate patch for better RTMP bitrate switching,streaming,,Backlog,enhancement,ed,new,2013-03-12T10:47:00-04:00,2013-03-12T10:47:00-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
Active Tickets,1984,Correct for drifts between playlist and mediastream in HLS,streaming,,Backlog,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
Active Tickets,1154,Skinning for Touch devices,general,,Backlog,feature,jeroen,new,2010-12-13T14:44:53-05:00,2012-11-30T06:07:42-05: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:

 * Pinch out for fullscreen
 * Sliding over the controlbar time slider for seeking
 * Sliding over the playlist for 1 finger scrolling",zach
Active Tickets,1214,Add YouTube support for HTML5,general,,Backlog,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
Active Tickets,1644,"Support ""sliding window"" DVR in HLS",streaming,,Backlog,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
Active Tickets,1673,Define keyboard focus and shortcuts,general,,Backlog,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
Active Tickets,1690,Live streaming controlbar state,general,,Backlog,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
Active Tickets,1713,Clean up instream Ad UX,interface,,Backlog,feature,jeroen,new,2012-09-26T17:28:18-04:00,2013-05-17T17:55:48-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
Active Tickets,1716,Support skinning for retina displays,skinning,,Backlog,feature,,new,2012-09-27T11:29:17-04:00,2012-11-15T10:55:54-05: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
Active Tickets,1729,Closed Captions support in HLS,streaming,,Backlog,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
Active Tickets,1864,Pseudostreaming: reloading when seeking in buffered area,general,,Player 6.5,bug,jeroen,new,2012-12-20T07:22:52-05:00,2013-05-15T14:27:39-04:00,"With Flash pseudo-streaming, the player reloads from server on a seek when seeking into an already buffered area. As a user reported:

  Load an mp4 into the flash player, metadata is loaded, video duration is displayed and it begins playing.

  Seek to a not-yet-loaded segment, a request is placed to the server with a new ?start, the metadata is sent, starts playing and loading.

  Now seek ahead a bit, to a part that is loaded already, and it place a new request to the server with a new ?start even though it is within what is loaded.

  Note: If you start the video and seek to a part that is loaded, it will not exhibit this, only once you seek into an unloaded area for the first time will it now begin to exhibit this behavior.",jeroen
Active Tickets,1975,Play and replay icons stay in hover state in Flash,interface,,Player 6.5,bug,jeroen,new,2013-05-03T09:51:07-04:00,2013-05-03T09:51:07-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
Active Tickets,1450,Fire event if no player can be selected,advertising,,Player 6.5,enhancement,jeroen,new,2011-08-26T03:36:32-04:00,2013-05-15T14:27:02-04:00,"Good idea from the forums: 

    Since we can configure which modes are available (and remove the download option) it would be nice if there could be a way to have an event be called when there are no supported players/formats based on the parameters we have passed in. That way we can give a message to the user telling them to download flash, upgrade their browser, etc.


We should fire an '''onSetupError()''' API call if neither Flash nor HTML5 was selected. The event included with this callback has two attributes:

 * '''message''' (String): the same message as is displayed in the player area (or would be displayed if there was no fallback). See the [http://www.longtailvideo.com/support/jw-player/28840/troubleshooting-your-setup troubleshooting guide] for a list.
 * '''fallback''' (Boolean): whether a fallback is rendered (download to MP4/MP3/AAC file or YT <embed> tag). 

",jeroen
Active Tickets,1936,Pick high-quality thumbnail from YouTube RSS,embedding,,Player 6.5,enhancement,ed,new,2013-03-12T10:41:21-04:00,2013-05-15T14:26:34-04:00,"At present, JW Player picks the last thumbnail from RSS feeds, which results in a very blocky preview (see attached) for YouTube playlists.  Instead, we should pick the first thumb, that's high-quality. 

A quick solution would be to always pick the first thumbnail instead of the last.",jeroen
Active Tickets,1949,Support RSS enclosures,general,,Player 6.5,enhancement,ed,new,2013-03-26T11:54:37-04:00,2013-05-15T14:26:27-04:00,"Some older podcast tools [http://podcastgen.sourceforge.net/ like this one] export RSS feeds with just enclosures. Some JW5 publishers using these feeds ([http://hjcs.org/podgen11/feed.xml like this one]) would like to upgrade to JW6, but JW6 doesn't support the <enclosure> tag at present. 

We should add support for the element in JW6. Here's an example tag:

{{{
<enclosure url=""http://example.com/podcast.mp3"" type=""audio/mpeg"" />
}}}

Publishers should be aware that using plain RSS with enclosures is not an ideal setup, because:

 * RSS does not support poster images or test tracks (captions,thumbnails)
 * The ""enclosure"" element does not support setting a label and default.

",jeroen
Active Tickets,1981,Implement additional getPlaylistIndex() API call,scripting,,Player 6.5,enhancement,jeroen,new,2013-05-09T13:32:28-04:00,2013-05-15T14:26:45-04:00,"For JW5 (and 6 up until 6.3), we had an undocumented ''index'' property within playlistItems. As part of cleaning up the Playlist API, we removed this property.

This hidden prop was quite useful though, to get the index of the currently playing playlistItem. Some users emailed about this and [http://www.longtailvideo.com/support/forums/jw-player/javascript-interaction/32497/ commented on the forums]. 

In order to fixe this, we should implement a ''getPlaylistIndex()'' API call which returns the index of the currently active playlistItem.",jeroen
Active Tickets,1793,Disable 'max-width' setting in audio mode,general,,Backlog,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
Active Tickets,1862,Captions extend beyond video screen,interface,,Backlog,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
Active Tickets,1661,Clear timeouts and intervals on destroy,html5,,Backlog,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
Active Tickets,1731,Related links target frame should be configurable,general,,Backlog,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
Active Tickets,1820,Have HD/CC function as toggle when 2 entries,interface,,Backlog,enhancement,,new,2012-11-30T09:28:34-05:00,2012-11-30T09:28:34-05:00,"If an HD or CC menu has only two entries, the button in the controlbar can act as a toggle for these. That's a nice UX enhancement for the two most common use cases:

 * SD and HD quality levels
 * Single CC track that can be enabled/disabled 

So when a user clicks the button, the active HD or CC entry will toggle. This change must also be immediately reflected in the tooltip menu.

This functionality must not be present when 3 or more entries are available in the menu, since the expected behaviour there is ambiguous. 

",jeroen
Active Tickets,1849,"Use ""heading"" for sharing/related dock button tooltip",interface,,Backlog,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
Active Tickets,1857,HLS: extract aspect ratio from VUI parameters,streaming,,Backlog,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
Active Tickets,1422,WebVTT cue positioning / tags CSS,general,,Backlog,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
Active Tickets,1695,Display chapter markers in controlbar,general,,Backlog,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
Active Tickets,1733,Additional VAST tag replacements,advertising,,Player 6.5,enhancement,alex,reopened,2012-10-12T10:19:58-04:00,2013-05-16T16:53:29-04:00,"We support several replacement variables for VAST tags (''__random_number__'', ''__page_url__'' and ''__timestamp__''). Requests for additional ones popped up though:

 * '''__domain__''': publisher domain name
 * '''__companion-div__''': the ID of the companion div, to allow VPAID ads to talk to companions.

 * '''__player-height__''': height of the player in pixels
 * '''__player-width__''': width of the player in pixels

 * '''__item-property__''': any playlistItem property, for example:
   * '''__item-title__''': the title of the current video
   * '''__item-description__''': the description of the current video
   * '''__item-file__''': the file URL of the first entry in the sources block (when sorted alphabetically), after mode filtering.

We should restrict these properties (notably __video-description__) to 1000 characters, to ensure the total tag URL [http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url does not get too large].

If no data is available for a variable or if the variable is not a string, it is replaced with an empty string.",jeroen
