New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Comparison between SHAKA player and dash.js player #1351

Closed
subhranshudas opened this Issue Mar 12, 2018 · 9 comments

Comments

Projects
None yet
8 participants
@subhranshudas
Copy link

subhranshudas commented Mar 12, 2018

Hi All,

I am kind of new to the Streaming world. I was exploring various players. Till now this is what i have found out except the browser/platform matrix so far between shaka & dash.js player

SHAKA - supports DASH, HLS
dash.js - supports DASH, MSS

Apart from this, are there any other significant differences.

Would appreciate your inputs. Thanks.

Regards,
Subhranshu

@TheModMaker

This comment has been minimized.

Copy link
Member

TheModMaker commented Mar 13, 2018

First, dash.js is implemented by the DASH IF as their reference player, so I severely doubt it implements SmoothStreaming.

But here are some differences:

  • dash.js is built as a reference player, we are built as a production-ready player.
  • We support complex network filters for authentication.
  • We have a plugin interface to easily add new features.
  • We support smooth multi-Period transitions.
  • We can automatically jump gaps in content.
  • We support some technically bad content that dash.js doesn't.
  • We have built-in support for storing content offline, including protected content.
  • We have built-in Chromecast support, including a proxy for the sender.
  • We actively test on 11 different browsers and platforms. I'm not sure how cross-platform dash.js is. We highly emphasize a consistent cross-platform streaming experience.

We also implement HLS. Which you listed, but is really an important feature since you can use the same player and setup for multiple manifest types. There are no differences between a DASH stream and an HLS stream from our API.

Also, here are some important features we want to add:

  • SmoothStreaming support #703.
  • src= for HLS on iOS #997.
  • Single-file playback using src= #816.
  • Fairplay support #382.
  • Playing multiple VOD clips sequentially #764.
@subhranshudas

This comment has been minimized.

Copy link
Author

subhranshudas commented Mar 13, 2018

@TheModMaker Thanks for the extensive reply.
But I believe MSS is supported in dash.js https://github.com/Dash-Industry-Forum/dash.js/tree/development/src/mss

@joeyparrish

This comment has been minimized.

Copy link
Member

joeyparrish commented Mar 13, 2018

To be completely fair to dash.js, there are several things they support which we don't:

  • DASH manifests with no segment index information
  • codec-switching across periods
  • SmoothStreaming support
  • typescript definitions
  • thumbnails for seeking
  • probably other DASH features we are missing

@TobbeEdgeware, do you have anything to add? Can you recommend any other dash.js contributors/committers who may want to speak for its advantages? I'm all for a fair comparison, as I'm sure Shaka Player isn't the best tool for every situation.

@epiclabsDASH

This comment has been minimized.

Copy link

epiclabsDASH commented Mar 13, 2018

Hey, @TheModMaker, you have been so hard with dash.js... :). Just kidding.

Some notes from my side that hope are useful. Regarding @TheModMaker comments:

  • In dash.js there is something similar to what shaka-player calls network filters although shaka-player approach is more complete. For example, dash.js has a mechanism similar to shaka-player RequestFilters but it doesn't have ResponseFilters. We are working on it.

  • We are not calling it plugins, and they are not plugins in the strict meaning of the word, but dash.js has a mechanism that allows to extend any of its controller classes so you can implement your own behaviors. Additionally, dash.js also allows to define your own ABR algorithm as shaka-player does.

  • dash.js new version (to be released tomorrow) also includes a new feature for jumping gaps. We are also working on some changes to increase the stability when playing technically bad content although, honestly, not at the same level than shaka-player. Our main priority is building a reference player of MPEG-DASH and follow MPEG-DASH standard and IOP guidelines, although having in mind we create something useful for the industry.

  • Regarding browser and platforms we, at dash.js, also give a lot of importance to the idea of having a consistent streaming experience across different devices/platforms and run automated and manual test in difference devices/platforms.

  • Shaka-player supports a cache layer based on ServiceWorkers. Dash.js doesn't have that kind of mechanism.

Regarding @joeyparrish comments, don't have too much information to add. He covered pretty much everything. Just a few points:

  • Pre-Load feature. Possibility of start loading the manifest and chunks before having a <video> element.
  • Support for Inband and inline events and the management of special events that force Manifest updates. This enables, for example, ads insertion solutions for MPEG-DASH based streams.
  • ABR algorithm complexity. Probably I am wrong but as far as I know ABR algorithm of shaka-player is only throughput driven. it takes throughput measures and, using a EWMA based algorithm, takes the decision about the best bitrate to play. ABR algorithm of dash.js is a bit more complex. We are taking into account different parameters: EWMA of throughput measures, drop frames, recent history of bitrate switches, and buffer level. In fact, by default, in dash.js once we have enough buffer, ABR decisions are buffer level driven and throughput lose importance. That gives us good results when trying to keep high qualities as much as possible while avoiding rebuffering events.

Probably I missed something for either Shaka-player or Dash.js but this is pretty much what I have in the top of my head.

By the way, it is great that users have these two high quality open source players to choose.

@TobbeEdgeware

This comment has been minimized.

Copy link
Contributor

TobbeEdgeware commented Mar 14, 2018

What comest to my mind is that dash.js has support for more subtitles/captions formats than shaka, namely:

*) embedded CEA-608 captions
*) IMSC-1 image subtitles as separate representations

@dsparacio and @wilaw, do you want to add some features to the comparison list?

@wilaw

This comment has been minimized.

Copy link

wilaw commented Mar 14, 2018

I can comment that dash.js is intended to be a performant production player and it is used by many companies in that role. It happens also to fulfill the function as the reference player for DASH IF, but that is an ancillary purpose and not the original reason I started the project. Support for MSS playback is evidence of this as it was a community requested feature. Support for HLS/CMAF would equally not be out of the question for dash.js :) If someone wants that, please go ahead and file and issue against our project. Jesus and Torbjorn have commented well on the latest feature set. I would only add

  1. That IMSC1-text subtitle support is now reasonably robust and with the adoption of IMSC1-text by CMAF and Apple, I have good hopes that we can finally coalesce around a single caption format.
  2. Low latency support using CMAF chunked encoding combined with chunked transfer delivery is in the oven and should be done in a sprint or two.

For those in Europe, we'll be holding a face-to-face meeting on dash.js in Berlin on Monday May 14th. It's free and kicks of Fraunhofer's week of Media . Lunch is included as well as dinner. It's open to any developer who works on MSE/EME. Even if shaka player is your focus, come by and meet a like-minded group of developers.

Cheers
Will

@joeyparrish

This comment has been minimized.

Copy link
Member

joeyparrish commented Mar 14, 2018

I'll try to summarize everything so far, and add a few links to ongoing work in Shaka that might be relevant. We had a few misconceptions about dash.js which @epiclabsDASH, @TobbeEdgeware, and @wilaw were kind enough to correct for us. Thanks!

  • DASH: supported by both players
  • HLS: supported in Shaka; dash.js is open to this in the future
  • MSS: supported in dash.js; Shaka community is working on this (#703)
  • Network request filters: supported by both players
  • Network response filters: supported by Shaka; work in progress for dash.js
  • Customization/plugins: both players allow for customization of behavior, but with different mechanisms
  • Gap jumping: now supported in both players as of the next dash.js release (v2.6.7?)
  • Multi-period: single presentation in Shaka Player, so codecs may not change; period transitions work differently in dash.js, which allows for codec changes
  • Tolerance for bad content: both players tolerate certain non-compliant content, but with different specifics
  • Offline storage and playback: Shaka Player only
  • Cast support: built into Shaka Player for sender and receiver; sample code provided by dash.js for sender and receiver
  • Production-ready: both players are production-ready and used in by many people in both commercial and non-commercial projects
  • Cross-browser: both players are tested on various browsers and intend to provide a consistent cross-browser experience
  • iOS support: work in progress for Shaka Player (#997); no support in dash.js
  • src= support: work in progress for Shaka Player (#816); no support in dash.js
  • FairPlay support: work in progress for Shaka Player (#382); on the dash.js backlog (Dash-Industry-Forum/dash.js#855)
  • DASH manifests with no segment index information: dash.js only
  • Typescript definitions: supported in dash.js; Shaka community is working on this (#1273)
  • Thumbnails for seeking: supported in dash.js; Shaka has this on the backlog (#559)
  • PWAs & service workers: demo provided by Shaka; no support in dash.js
  • Preload: supported in dash.js; work in progress for Shaka Player (#880)
  • Inband events, emsg boxes: supported by both players
  • ABR: Shaka Player's default is throughput-based; dash.js incorporates dropped frames and buffer fullness
  • CEA 608 captions: supported by both players as of Shaka's upcoming v2.4
  • Image-based subtitles: supported by dash.js; Shaka has this on the backlog (#1089)

By the way, it is great that users have these two high quality open source players to choose.

Hear, hear! It's a good time to be in video.

@subhranshudas, does this answer your question? (Possibly in more detail than you cared for. 😁)

@subhranshudas

This comment has been minimized.

Copy link
Author

subhranshudas commented Mar 14, 2018

Thank you @joeyparrish @TheModMaker @epiclabsDASH @TobbeEdgeware @wilaw for the exhaustive list. This will serve as a reference point for beginners like me.

@subhranshudas

This comment has been minimized.

Copy link
Author

subhranshudas commented Mar 23, 2018

@epiclabsDASH regarding https://github.com/google/shaka-player/issues/1351#issuecomment-372849390 how does dash.js implement network filters (request/response)?
This is in reference to my question in https://github.com/Dash-Industry-Forum/dash.js/issues/2478#issuecomment-374995457

@shaka-bot shaka-bot added the archived label May 13, 2018

@google google locked and limited conversation to collaborators May 13, 2018

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.