2005-02-27, 01:46
dvd-video player core/library (alpha!
as you may have heard, the initial version of our new dvd-player core code with menu and navigation support has now been put into the public cvs on sourceforge, it's still in an very early alpha stage and thus is not enabled by default, please note and respect that we will not yet accept any bug-reports from non-developers for this core at this stage, (as for now there is still plenty of things still to be worked out and enough bugs left which we know of to keep us busy for a good while), in fact; we do not recommend you even try to use it at this point if you are an end-user, (we will let you know when that time comes). the only reason we moved it to public cvs now is that we feel it's time to get more developers involved in this sub-project, we hope that with your assistance the development may progress and mature more quickly. so please, get stuck in there and give it a go, please submit patches the usual way. by the way recomend you read iso138181 if you like to help on on the video-playback part.
some technical-info on this new dvd-player core:
the core is made for the directx api and is framework dependent, it's currently based on libmpeg2 (for mpeg-1/2 video decoding), liba52 (for ac3 audio decoding), libdts/libdca (for dts audio decoding), libmad (for mpeg audio decoding, ported from madxlib), and libavcodec (ffmpeg) (for other audio formats decoding), plus libavformat (ffmpeg) for all file/media-container demuxing/splitting. css-decryption is done with libdvdcss, and the menu/navigation is handled by a ported version of libdvdnav and dvdread (which is part of libdvdnav, but was originally ported/forked by them from libdvdread), (libdvdnav is available as a stand-alone library from dvd.sourceforge.net which is what we used, however keep in mind that it is also available as integrated into xine which is libdvdnav's reference player). (if you've been following the xbmc/xbmp project from the beginning you might remember that grompf back in the summer of 2003 already partially ported libdvdnav from xine to xbmp, however grompf never finished libdvdnav for xbmp because it was too hard to hook it up to the mplayer-core in xbmp, which is partially why we now created a new core from scatch for dvd-video playback in xbmc). the only other open source projects we know of that have native dvd-menu/navigation support are xine, vlc, tcvp and ogle so it might be a good idea to look at those for reference if you get stuck or need ideas. another good idea (on the decoding side) might be to also look at libmpeg2 derivatives (like the ones in xine, mplayer, and vcl) as many other projects which use libmpeg2 may have improved on its code but not actively feed those improvements back to the original libmpeg2 project. by the way the reason libmpeg2 was chosen over ffmpeg's mpeg-decoders is that libmpeg2 currently have better support for anamophic resolutions and aspect-ratios, plus is a little bit faster in decoding mpeg-2 video.
overview of what this core currently features:
- video demuxing and decoding (working, but demuxing needs work/replacing as currently using ffmpeg to demux mpeg which isn't optimal)
- audio demuxing and decoding (working, but ffmpeg needs more dvd audio codecs/formats)
- video output (working, but needs work and aspect-ratio is not always correct)
- audio output (working, but needs work, currently only analog-stereo-output is supported)
- selectable subtitles without the need for a restart (working)
- selectable audio streams without the need for a restart (working)
- synchronised video / audio playback (buggy)
- dvd menus (buggy)
- menu overlay's (working, but needs work)
- dvd playback from harddrive and samba-shares (working, but needs work)
developers; specs, docs, source code, and other resources for dvd-playback:
- mpeg software simulation group's mpeg-2 faq v3.4 (v3.8 is newer, but that information is a bit mis-formatted).
- mpucoder.com, very updated and precise dvd information (specs and how-to).
- dvd.sourceforge.net, the home of libdvdnav and dvd info.
- technical notes on dvd-video (by billy biggs).
- dvd.wwwdotorg.org some information on the dvd vm command structure, (plus an interactive disassembler).
- dvd-replica.com, site with a lot of dvd technical information.
- dvd demystified (home of the dvd faq)
- mpeg.org dvd technical notes
- alain bismuth's paper on dvd navigation issues (trick plays)
- joe clark's accessible dvds (talking dvd menus)
- xine, libdvdnav reference player (more up-to-date?)
- mplayer, keep in mind that mplayer has libmpdvdkit & libmpdvdkit2 (for reference).
- vlc/videolan-client, also supports dvd menus (via plugin).
- ogle, a open-source (gpl) dvd player with menu support.
- tcvp, audio and video player with experimental dvd menu support.
- dvdpreview/vobblanker, open source (c/c++) dvd vob tools.
- videohelp.com simple dvd-video technical info explained
...many more links to other dvd resources can be found here:
http://www.mpeg.org/mpeg/dvd.html
http://www.robertsdvd.com
technical inoformation video/audio decoding and processing:
- neuron2.net technical library (development documentations).
projects we know of that contains libmpeg2 derivatives (but no one looked at yet for our new dvdlayer):
- xine, (two forked variations; "xine-lib/src/libmpeg2/" and "xine-lib/src/libmpeg2new/").
- mplayer.
- vemp (via enhanced mplayer), (also contain via hardware-specific mpeg-2 decoding acceleration).
- vexp (via enhanced xine player), (also contain via hardware-specific mpeg-2 decoding acceleration).
- ffmpeg (libavcodec/libavformat), (yes ffmpeg do contain mpeg1/mpeg2 code derivitive from libmpeg2).
- mpc (media player classic).
- vlc (videolan-client).
- tcvp, (also has experimental dvd menu support).
- dscaler deinterlacer/scaler(deinterlace)
information on most other xbmc/xbox development resources that could be of help for this project can be found over here.
though not required we would appreciate if you try to document (with doxygen tags/comments) any patches that you submit for this core, (thanks in advance).
compiling dvdplayer-core is similar to how you compile (configure/make) mplayer.dll for xbmc with mingw/msys, (btw, ffmpeg is under 'docs\sources\dvdplayer').
ps! @non-developers; please do not clog up this developer discussion with feature or functions suggestions/requests, instead keep posting them over here.
and again, please respect that we will not accept any bug-reports at this stage, only developers may discuss coding issues and how to solve them so far), tia all)
as you may have heard, the initial version of our new dvd-player core code with menu and navigation support has now been put into the public cvs on sourceforge, it's still in an very early alpha stage and thus is not enabled by default, please note and respect that we will not yet accept any bug-reports from non-developers for this core at this stage, (as for now there is still plenty of things still to be worked out and enough bugs left which we know of to keep us busy for a good while), in fact; we do not recommend you even try to use it at this point if you are an end-user, (we will let you know when that time comes). the only reason we moved it to public cvs now is that we feel it's time to get more developers involved in this sub-project, we hope that with your assistance the development may progress and mature more quickly. so please, get stuck in there and give it a go, please submit patches the usual way. by the way recomend you read iso138181 if you like to help on on the video-playback part.
some technical-info on this new dvd-player core:
the core is made for the directx api and is framework dependent, it's currently based on libmpeg2 (for mpeg-1/2 video decoding), liba52 (for ac3 audio decoding), libdts/libdca (for dts audio decoding), libmad (for mpeg audio decoding, ported from madxlib), and libavcodec (ffmpeg) (for other audio formats decoding), plus libavformat (ffmpeg) for all file/media-container demuxing/splitting. css-decryption is done with libdvdcss, and the menu/navigation is handled by a ported version of libdvdnav and dvdread (which is part of libdvdnav, but was originally ported/forked by them from libdvdread), (libdvdnav is available as a stand-alone library from dvd.sourceforge.net which is what we used, however keep in mind that it is also available as integrated into xine which is libdvdnav's reference player). (if you've been following the xbmc/xbmp project from the beginning you might remember that grompf back in the summer of 2003 already partially ported libdvdnav from xine to xbmp, however grompf never finished libdvdnav for xbmp because it was too hard to hook it up to the mplayer-core in xbmp, which is partially why we now created a new core from scatch for dvd-video playback in xbmc). the only other open source projects we know of that have native dvd-menu/navigation support are xine, vlc, tcvp and ogle so it might be a good idea to look at those for reference if you get stuck or need ideas. another good idea (on the decoding side) might be to also look at libmpeg2 derivatives (like the ones in xine, mplayer, and vcl) as many other projects which use libmpeg2 may have improved on its code but not actively feed those improvements back to the original libmpeg2 project. by the way the reason libmpeg2 was chosen over ffmpeg's mpeg-decoders is that libmpeg2 currently have better support for anamophic resolutions and aspect-ratios, plus is a little bit faster in decoding mpeg-2 video.
overview of what this core currently features:
- video demuxing and decoding (working, but demuxing needs work/replacing as currently using ffmpeg to demux mpeg which isn't optimal)
- audio demuxing and decoding (working, but ffmpeg needs more dvd audio codecs/formats)
- video output (working, but needs work and aspect-ratio is not always correct)
- audio output (working, but needs work, currently only analog-stereo-output is supported)
- selectable subtitles without the need for a restart (working)
- selectable audio streams without the need for a restart (working)
- synchronised video / audio playback (buggy)
- dvd menus (buggy)
- menu overlay's (working, but needs work)
- dvd playback from harddrive and samba-shares (working, but needs work)
Quote:===== classes =====and since the core has the option to use ffmpeg for audio / video decoding, it should be able to play most formats that ffmpeg supports too, (though using ffmpeg demuxer 'as is' is probebly not optimal as it has much we not need for dvd-video, better would be to make our own, especially for mpeg2-video based materials).
* ""inputstreams""
* ""factoryinputstream"", creates an inputstream based on the filename
* ""file"", general file access (hd, cdrom, samba)
* ""http""
* ""navigator"", for accessing dvd
* ""demuxers""
* ""factorydemuxer"", creates a demuxer based on inputstream information
* ""ffmpeg"", ffmpeg demuxer wrapper (supports all ffmpeg demuxers)
* ""shoutcast"", for demuxing shoutcast streams
* ""codecs""
* ""factorycodec"", creates audio and video codecs based upon demuxer information
* audio
* ""ffmpeg"", ffmpeg audio decoder wrapper
* ""liba52"", liba52 wrapper
* ""libdts"", libdca wrapper
* ""libfaad"", libfaad wrapper
* ""libmad"", libmad wrapper (for mp1, mp2, mp3 decoding)
* ""lpcm"", lpcm decoding
* ""passthrough"", for digital passthrough
* video
* ""libmpeg2""
* ""ffmpeg"", ffmpeg video decoder wrapper
* ""subtitles""
===== modules =====
the player is devided up into a few modules
====== main module ======
runs in a seperate thread
reads data from one of the input streams and sends it over to one of the other modules listed below
handle dvd events (such as audio / subtitle / video stream changes)
handle events from xbmc (such as audio / subtitle changes)
====== audio module ======
runs in a seperate thread.
decodes audio data and outputs it to the xbox video audio renderer
====== video module ======
runs in a seperate thread.
decodes raw video data into video frames and outputs them to the xbox video renderer
====== --subtitle module-- ======
process subtitles
==== building libraries (audio / video codecs) ====
the dvdplayer depends on other libraries to function. these libraries are included in cvs by default as dll's in (//[xbmcfolder]/system/players/dvdplayer subfolder//). all sources of these libraries can be found in //""/cvs/xbmc/docs/sources/dvdplayer/""//
to build these dll's youself you need to have the following installed.
1. ""mingw""
1. ""msys""
1. unrar
all dll's can be build the following way.
startup msys and browse to the extracted sources. make sure you are in the root of these sources (a directory xbox resides in it) and give the follwing commands.
1. xbox/configure.sh
1. xbox/compile.sh
configure.sh ocnfigures the library with its needed options
compile.sh issues a make command, strips the dll's of unnessecary information which makes them smaller and copy's the dll to the xbox
developers; specs, docs, source code, and other resources for dvd-playback:
- mpeg software simulation group's mpeg-2 faq v3.4 (v3.8 is newer, but that information is a bit mis-formatted).
- mpucoder.com, very updated and precise dvd information (specs and how-to).
- dvd.sourceforge.net, the home of libdvdnav and dvd info.
- technical notes on dvd-video (by billy biggs).
- dvd.wwwdotorg.org some information on the dvd vm command structure, (plus an interactive disassembler).
- dvd-replica.com, site with a lot of dvd technical information.
- dvd demystified (home of the dvd faq)
- mpeg.org dvd technical notes
- alain bismuth's paper on dvd navigation issues (trick plays)
- joe clark's accessible dvds (talking dvd menus)
- xine, libdvdnav reference player (more up-to-date?)
- mplayer, keep in mind that mplayer has libmpdvdkit & libmpdvdkit2 (for reference).
- vlc/videolan-client, also supports dvd menus (via plugin).
- ogle, a open-source (gpl) dvd player with menu support.
- tcvp, audio and video player with experimental dvd menu support.
- dvdpreview/vobblanker, open source (c/c++) dvd vob tools.
- videohelp.com simple dvd-video technical info explained
...many more links to other dvd resources can be found here:
http://www.mpeg.org/mpeg/dvd.html
http://www.robertsdvd.com
technical inoformation video/audio decoding and processing:
- neuron2.net technical library (development documentations).
projects we know of that contains libmpeg2 derivatives (but no one looked at yet for our new dvdlayer):
- xine, (two forked variations; "xine-lib/src/libmpeg2/" and "xine-lib/src/libmpeg2new/").
- mplayer.
- vemp (via enhanced mplayer), (also contain via hardware-specific mpeg-2 decoding acceleration).
- vexp (via enhanced xine player), (also contain via hardware-specific mpeg-2 decoding acceleration).
- ffmpeg (libavcodec/libavformat), (yes ffmpeg do contain mpeg1/mpeg2 code derivitive from libmpeg2).
- mpc (media player classic).
- vlc (videolan-client).
- tcvp, (also has experimental dvd menu support).
- dscaler deinterlacer/scaler(deinterlace)
information on most other xbmc/xbox development resources that could be of help for this project can be found over here.
though not required we would appreciate if you try to document (with doxygen tags/comments) any patches that you submit for this core, (thanks in advance).
compiling dvdplayer-core is similar to how you compile (configure/make) mplayer.dll for xbmc with mingw/msys, (btw, ffmpeg is under 'docs\sources\dvdplayer').
ps! @non-developers; please do not clog up this developer discussion with feature or functions suggestions/requests, instead keep posting them over here.
and again, please respect that we will not accept any bug-reports at this stage, only developers may discuss coding issues and how to solve them so far), tia all)