First DASH Demo Builds: Non-Adaptive WebM On Demand Video

Steve Workman <[email protected]>
Newsgroups gmane.comp.mozilla.devel.media,gmane.comp.mozilla.devel.netlib
Message-ID <[email protected]>
Hi all,

Cross posting to dev-media and dev-tech-network.  I've uploaded new patches to Bug 734546 with the following comment:

Patches for non-adaptive, DASH/WebM On Demand Demo Build:
-- Please patch and build the complete diff or run try builds (https://ftp.mozilla.org/pub/mozilla.org/firefox/try-builds/[email protected]/) and point your browser to http://people.mozilla.com/~sworkman/Elephants_Dream.html
Notes: 
1)  I've tested this on Mac, Android and Windows - let me know if your system doesn't work.
2)  please add/set media.dash.enabled=true in your prefs.


What's working:
-- Current patches parse MPD according to WebM On Demand profile, pick a video and audio stream and mix them to a single decoder to play them non-adaptively
-- Seeking
-- Refreshing the page without issue

What's not working/not right:
-- no adaption/stream switching yet; initial work done on this, but not reflected in this code
-- Seeking far enough from the current offset adds a buffering icon on the video, which does not go away
-- some URLs are leaking in the MPD files
-- stats are not correct - some data only pertains to the video stream, not both - to be examined/fixed.

Patches:
1)  Decoder files 
*** Description of interaction in nsDASHDecoder.cpp at top of file. ***
-- Muxes multiple resources through multiple readers to a single decoder and state machine. Proxy classes distribute/aggregate calls as need be.
-- Note: I said in an email earlier on dev-media that I was going to stick with multiple decoders for now, but I quickly discovered that audio and video do not sync easily like this. Hence the change to a single decoder and multiple readers/resources :)
-- includes minor changes to existing files.
-- aiming for abstract - less work when adding DASH profiles/decoders later - to be improved.
-- used nsIByteBuffer in a hacky way to store the downloaded MPD data; to be cleaned up.
-- some #ifdef DASH_IGNORES are present. The ignored code is to be reviewed for inclusion.

2) WebMOnDemand, MPD files
-- files to parse MPD into classes, and report MPD contents to DASHMediaResource
-- based on WebM On Demand profile: http://wiki.webmproject.org/adaptive-streaming/webm-dash-specification

Other patches include changes to nsHTMLMediaElement and build files.

General Patch notes:
-- Makefile/config note - I've hardcoded MOZ_DASH something similar to MOZ_WEBM, but not to the extent of having a "--disable-dash" just yet.
-- The complete patch file includes some Adaptation files from libdash (ITEC) but these are not included in the build yet.

TODO:
-- Stream switching and Adaptation
-- rate limiting video
-- Other decoder/DASH profile types

Although there's not a lot to see yet demo-wise, this is a milestone and I'd appreciate any and all constructive feedback.

Thanks,
Steve.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.