mirror of
https://github.com/videolan/vlc.git
synced 2025-01-07 16:28:29 +08:00
451 lines
17 KiB
Plaintext
451 lines
17 KiB
Plaintext
This file documents the ``Extended'' VLC CD-DA Plugin
|
|
|
|
Copyright (C) 2003, 2004 Rocky Bernstein (rocky@panix.com)
|
|
|
|
Permission is granted to copy, distribute and/or modify this document
|
|
under the terms of the GNU Free Documentation License, Version 1.1 or
|
|
any later version published by the Free Software Foundation; with the
|
|
Invariant Sections being ``Free Software'' and ``Free Software Needs
|
|
Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,''
|
|
and with the Back-Cover Texts as in (a) below.
|
|
|
|
(a) The Free Software Foundation's Back-Cover Text is: ``You have
|
|
freedom to copy and modify this GNU Manual, like GNU software. Copies
|
|
published by the Free Software Foundation raise funds for GNU
|
|
development.''
|
|
|
|
- - - - - -
|
|
|
|
Features over the older VLC CD-DA plugin
|
|
|
|
Internally I think this is much much cleaner. It uses the
|
|
libcdio for disk reading and libcddb to get CDDB information.
|
|
|
|
MRL handling:
|
|
- Can specify device as well as track.
|
|
- Because we use the libcdio library, the "device" can be a disk image
|
|
to be burned (e.g. a cdrdao bin/cue pair and some primitive Nero
|
|
support)
|
|
|
|
Features:
|
|
- Can customize the what to show in the play-list title and author.
|
|
- Duration of each track is shown
|
|
- Media information is shown using CDDB
|
|
- Dynamic debugging
|
|
- Will scan for a CD-ROM drive with a CD-DA loaded in it.
|
|
|
|
-----------------------------------------------------------------
|
|
General Info
|
|
-----------------------------------------------------------------
|
|
|
|
Much of what I write in this section can be found elsewhere. See for
|
|
example http://www.pctechguide.com/08cd-rom.htm, or the libcdio
|
|
documentation.
|
|
|
|
The Sony and Philips Corporations invented and Compact Disc (CD) in
|
|
the early 1980s. The specifications for the layout is often referred
|
|
to by the color of the cover on the specification.
|
|
|
|
The first type of CD specification that was produced was the Compact
|
|
Disc Digital Audio (CD-DA) or just plain ``audio CD'' and is commonly
|
|
called the ``Red Book''. Music CD's are recorded in this format which
|
|
basically allows for around 74 minutes of audio per disc and for that
|
|
information to be split up into *tracks*. Tracks are broken up into
|
|
"sectors" and each sector contains 2,352 bytes. To play one 44.1 kHz
|
|
CD-DA sampled audio second, 75 sectors are used.
|
|
|
|
A CD can hold at most 99 such tracks. Between the tracks CD
|
|
specifications require a ``2 second'' in gap (called a @term{lead-in
|
|
gap}. This is unused space with no ``data'' similar to the space
|
|
between tracks on an old phonograph. The word ``second'' here really
|
|
refers to a measure of space and not really necessarily an amount of
|
|
time. However in the special case here where you have an audio CD, the
|
|
amount of time to play a gap of this size will take 2 seconds. Note
|
|
this is independent of how fast your CD drive can read a sector.
|
|
|
|
The beginning (or inner edge) of the CD is supposed to have a ``2
|
|
second'' lead-in gap and there is supposed to be another ``2 second''
|
|
*lead-out* gap at the end (or outer edge) of the CD.
|
|
|
|
CD-DA ``Red Book'' Specification
|
|
|
|
One can create and then write or "burn" a CD in the CD-DA format
|
|
and in this process sometimes one writes the bytes that will appear as
|
|
a file on a hard disk. This is called a "CD disk image". This
|
|
plugin may be able to play this file just the same as if it were
|
|
burned onto a CD.
|
|
|
|
As there are a number of CD-burning programs, there are a number of
|
|
CD-image formats. This plugin uses libcdio which currently understands
|
|
the BIN/CUE disk-image format used by a popular DOS/Window mastering
|
|
tool and a limited subset of the proprietary and unpublished form at
|
|
used by the Nero burning software. Over time however perhaps more
|
|
disk-image formats will be recognized.
|
|
|
|
Audio CD Identification Information (CDDB)
|
|
|
|
The Philips Red-Book specification allows for a Compact Disc to have a
|
|
Media Catalog Number or MCN written on it, and probably this
|
|
was how they CD's would be identified. Alas, very few audio discs
|
|
actually have a Medium Catalog Number on the box, and the way the code
|
|
is written on CD is *not* uniform across all discs!
|
|
|
|
However the listening community wanted a way to identify an audio CD,
|
|
so a database of CD information was gathered by basically making a
|
|
``signature'' or hash from the number of tracks on a disk and a
|
|
checksum of the bytes of the tracks. This is referred to as CDDB
|
|
information. Using the hash the database gives information about the
|
|
titles of the tracks, the CD album name, year it was published and so
|
|
on. This plugin has the ability to show this information courtesy of
|
|
libcddb written by Kris Verbeeck.
|
|
|
|
|
|
-----------------------------------------------------------------
|
|
MRLS:
|
|
-----------------------------------------------------------------
|
|
|
|
the vlc CD-DA plugin, identifies itself in the vlc GUI as CDDAX. It
|
|
also registers itelf to handle a class of MRL's that start with
|
|
cddax://.
|
|
|
|
The CDDAX MRL takes the following form:
|
|
|
|
cddax://[path to file or CD-DA device][@[Tt]number]]
|
|
|
|
A simple cddax:// runs the default item: track 1 using the default CD
|
|
device (perhaps /dev/cdrom). The default default device is
|
|
user-configurable.
|
|
|
|
It is however also possible to specify both Compact Disc device/filename
|
|
and item explicitly in the MRL.
|
|
|
|
For example cddax://dev/cdrom2 specifies using device /dev/cdrom2 which
|
|
might useful if as I have /dev/cdrom is a burner and the /dev/cdrom2
|
|
is a read-only device. And cddax://test_cdda.cue specifies the
|
|
"cuesheet" file for a CD-DA image on disk created say with cdrdao.
|
|
(test_cdda.bin is the corresponding bin file, but using that won't
|
|
work.)
|
|
|
|
After the optional device name or file name, you can name the track
|
|
number unit which preceded by a @ or an @ and T in either case. A MRL
|
|
which ends in an @ is like not adding it at all.
|
|
|
|
Some examples of MRLS are given below. In the examples, we assume the
|
|
following configuration setting:
|
|
|
|
cdda.default_device:/dev/cdrom
|
|
|
|
cddax:// - track 1 of device: /dev/cdrom
|
|
cddax://@ - same as above
|
|
cddax:///dev/cdrom - probably same as above
|
|
cddax:///dev/cdrom2 - track 1 of /dev/cdrom2
|
|
cddax:///dev/cdrom2@ - same as above
|
|
cddax://dev/cdrom2@53 - track 53 from /dev/cdrom2
|
|
cddax://dev/cdrom2@T53 - Same as above
|
|
cddax://dev/cdrom2@t53 - Same as above
|
|
cddax://@2 - track 2 from default device
|
|
cddax://3 - track 3 from default device
|
|
cddax:///tmp/ntsc.cue - track 1 from /tmp/ntsc.bin, (a bin/cue
|
|
disk image)
|
|
cddax:///tmp/ntsc.cue@ - same as above
|
|
cddax://tmp/ntsc.cue@ - track 1 of tmp/ntsc.bin. NOT the
|
|
the same as above unless the cwd is /.
|
|
cddax://ntsc.nrg - track 1 of ntsc.nrg (a nero disk image)
|
|
cddax://tmp/ntsc.nrg@5 - track 5 of /tmp/ntsc.nrg
|
|
|
|
Bad MRL's
|
|
cddax://@x - x is not a number
|
|
cddax/tmp - no colon
|
|
cddax:/ - must start cddax://
|
|
|
|
-----------------------------------------------------------------
|
|
Configuration settings:
|
|
-----------------------------------------------------------------
|
|
|
|
Configuration settings in vlc are generally put in ~/.vlc/vlcrc. A
|
|
description of the ones specific to CDDAX are listed below.
|
|
|
|
- -
|
|
cddax-cddb-title-format
|
|
|
|
This gives a format used in the playlist title string when CDDB is consulted.
|
|
Similar to the Unix date command, there are format specifiers
|
|
that start with a percent sign for which various information is filled
|
|
in dynamically. The control specifiers are given as below
|
|
|
|
%a : The album artist
|
|
%A : The album information
|
|
%C : Category
|
|
%I : CDDB disk ID
|
|
%G : Genre
|
|
%M : The current MRL
|
|
%m : The CD-DA Media Catalog Number (MCN)
|
|
%n : The number of tracks on the CD
|
|
%p : The artist/performer/composer in the track
|
|
%T : The track number
|
|
%s : Number of seconds in this track
|
|
%t : The name
|
|
%Y : The year 19xx or 20xx
|
|
%% : a %
|
|
|
|
The default is
|
|
Track %T. %t - %p
|
|
|
|
- -
|
|
cddax-title-format
|
|
|
|
This gives a format used in the playlist title string when CDDB is
|
|
*NOT* consulted. Similar to the Unix date command, there are format
|
|
specifiers that start with a percent sign for which various
|
|
information is filled in dynamically. The control specifiers are
|
|
given as below
|
|
|
|
%M : The current MRL
|
|
%m : The CD-DA Media Catalog Number (MCN)
|
|
%n : The number of tracks on the CD
|
|
%T : The track number
|
|
%s : Number of seconds in this track
|
|
%% : a %
|
|
|
|
The default is
|
|
%T %M
|
|
|
|
- -
|
|
cddax-cddb-email
|
|
|
|
# email given on cddb requests
|
|
# string, default: me@home
|
|
|
|
- -
|
|
cddax-cddb-enabled
|
|
|
|
# Do we use CDDB to retrieve CD information?
|
|
# bool, default: 1
|
|
|
|
- -
|
|
cddax-cddb-http
|
|
|
|
# Contact CDDB via the HTTP protocol?
|
|
# bool, default: 0
|
|
|
|
- -
|
|
cddax-cddb-port
|
|
|
|
# numeric, default: 8880
|
|
|
|
- -
|
|
cddax-cddb-server
|
|
|
|
# The server CDDB contacts to get CD info
|
|
# string, default: freedb.freedb.org
|
|
|
|
- -
|
|
cddax-debug
|
|
|
|
An integer (interpreted as a bit mask) which shows additional
|
|
debugging information see the section below on debugging for more
|
|
information about the bits that can be set.
|
|
|
|
- -
|
|
cddax-device
|
|
|
|
What to use if no drive specified. If null, we'll scan for CD
|
|
drives with a CD-DA loaded in it.
|
|
|
|
# string, default:
|
|
|
|
-----------------------------------------------------------------
|
|
Troubleshooting Guide
|
|
-----------------------------------------------------------------
|
|
|
|
This gives higher-level troubleshooting. More detailed and
|
|
lower-level information is given in the next section DEBUGGING.
|
|
|
|
Problem: something doesn't work. Start at step -1.
|
|
|
|
Problem: The program gets a SEGFAULT or gives core dump. Start at step
|
|
0.
|
|
|
|
Problem: I don't get anything playing. I can't even get a playlist of
|
|
the CD.
|
|
Determination: start at step 1.
|
|
|
|
Problem: Okay, I something plays menu now. But I don't see information
|
|
about the CD in the playlist.
|
|
Determination: start at step 5.
|
|
|
|
-1. (Something doesn't work.)
|
|
|
|
A lot of what is put here really is applicable to reporting
|
|
problems and troubleshooting in vlc and the concepts really
|
|
apply to any sort of bug reporting.
|
|
|
|
When reporting a problem it's helpful to have facts:
|
|
|
|
a) the version of vlc) you are using
|
|
|
|
b) the OS you are running on
|
|
|
|
c) the version of libcdio and/or libcddb you are using
|
|
versions of libcdio and libcddb can be obtained by running
|
|
pkg-config --modversion libcdio
|
|
pkg-config --modversion libcddb
|
|
|
|
d) what you input or requested (e.g. the full command line entered -
|
|
if it is possible to reproduce the problem by giving a
|
|
commandline that is desirable since it is probably the simplest
|
|
way to convey exactly what was requested)
|
|
|
|
People often give (some part) of an error message neglecting
|
|
to also include what was requested or entered that led to the
|
|
output.
|
|
|
|
e) The setting for this plugin. That is the values of the
|
|
variables that start cddax- listed above. On Unix this can
|
|
generally be found in ~/.vlc/vlcrc
|
|
|
|
f) Exactly the messages that were what given. You can turn
|
|
increase the verbosity level by setting "verbosity=2" in the
|
|
vlc preferences files. On Unix the preferences file is
|
|
generally in ~/vlc/.vlcrc but there are GUI ways to set this
|
|
too. Give everything that is in the message log.
|
|
|
|
0. (The program gets a SEGFAULT or gives core dump.)
|
|
|
|
Get and send a stack trace.
|
|
|
|
In addition to -1. Make sure the program has been compiled with
|
|
debugging symbols put into the code. This is usually done by having
|
|
the "-g" flag set when compiling the program.
|
|
|
|
You can get a strack trace the GNU debugger using the "where"
|
|
command. For example on this might work:
|
|
|
|
gdb vlc *name-of-corefile*
|
|
where
|
|
|
|
|
|
1. (I don't get anything playing. I can't even get a playlist of
|
|
the CD.)
|
|
|
|
Do you even have the plugin loaded?
|
|
|
|
When you run the vlc GUI, under Settings/Preferences you should see
|
|
a "plugins" expandable list and under that another "access" list do
|
|
you see a expandable entry under "access" labeled "cddax"? If so,
|
|
skip on to step 2.
|
|
|
|
a) If no "cddax" expandable list, then the CDDAX plugin isn't
|
|
loaded. Does a shared object exist? The plugin shared object is
|
|
called "libcddax_plugin.so" It should be in the directory that has
|
|
...vlc/access. If this isn't around you need to build and install
|
|
the CDDAX plugin.
|
|
|
|
b) if libcddax_plugin.so is in the filesystem, there might be a
|
|
loader error; perhaps libcdio is not installed or
|
|
are the wrong version. Use ldd on the file to see that it has all
|
|
of the libraries dependencies satisfied. Also you might be able
|
|
check if there was an attempt to load it by tracking system
|
|
calls. On Linux and other OS's) "strace" can be used to see if the
|
|
file gets accessed. On Solaris use "truss".
|
|
|
|
For example on Linux, among the many line of output when I run
|
|
"strace -e trace=file vlc" I see this along with a lot of other
|
|
output:
|
|
|
|
...
|
|
stat64("/usr/local/lib/vlc/access/libcddax_plugin.so", {st_mode=S_IFREG|0755, st_size=238921, ...}) = 0
|
|
open("/usr/local/lib/vlc/access/libcddax_plugin.so", O_RDONLY) = 5
|
|
|
|
The parameters inside the calls may be different depending on where
|
|
vlc is installed and what release is installed. If the the file is
|
|
found and "opened",
|
|
|
|
There may also be a message may under "setup/logs".
|
|
|
|
2. (There plugin was loaded and preferences found.) In the "cddax" tab
|
|
of preference. An important selection is "cddax-device." If this is
|
|
set to the empty string, CDDAX will try to scan your drives for a
|
|
suitable device if the driver has the capability to scan for
|
|
drives. However you can set the device to something of your
|
|
choosing. On GNU/Linux, this may be "/dev/cdrom" and on Solaris it
|
|
may be "/vol/dev/aliases/cdrom0". If you set this field, make sure
|
|
these are correct for your particular setup. For example, I
|
|
generally play out of the DVD device and this is called /dev/dvd
|
|
rather than /dev/cdrom.
|
|
|
|
3. (CD-DA Setup devices seems correct and there is a CD in the
|
|
drive.) Bring up the playlist. If you specified only a drive and
|
|
no track, you should see in the playlist a list of tracks on the CD.
|
|
|
|
a. If not something's wrong like step 2. Another tack may be to try
|
|
to read a disk image of a CD and thus eliminate any problems with
|
|
hardware. If this works, then this is a hardware problem.
|
|
|
|
4. (You have a list of entries describing the CD-DA or disk-file of
|
|
a CD-DA image.)
|
|
|
|
There should be at least one "track" listed for the CD-DA and track
|
|
1 will end with the digit 1. If there are NO tracks listed then
|
|
there may be a problem with the that particular medium. So as in
|
|
step 3 you can try a known good sample and perhaps burn a CD from
|
|
that.
|
|
|
|
5. <<Fill in info about CDDB hacking>>
|
|
|
|
-----------------------------------------------------------------
|
|
Debugging
|
|
-----------------------------------------------------------------
|
|
|
|
**General vlc debugging...
|
|
|
|
Before delving to things specific to this plugin, some preparation may
|
|
be in order. You'll probably want to configure vlc with "--enable-debug".
|
|
plugin with debug information. Instead of "make'ing" with "make", use
|
|
"make debug" and instead of installing using "make install" use "make
|
|
install-debug".
|
|
|
|
I use gdb to debug. Debugging vlc with the entire suite of plugins
|
|
under gdb is slow because it has to read in symbol tables from all the
|
|
plugins. There are two ways to make loading faster when debugging. The
|
|
simplest is just to go to the plugin directory and remove unused
|
|
plugins. Another approach is create a new directory and make
|
|
(symbolic) links into the complete plugin directory. Another way to
|
|
speed up gdb loading is to attach the debugger after vlc has started up
|
|
via a command like:
|
|
|
|
gdb -p *pid-of-vlc-process*
|
|
|
|
**cddax debugging...
|
|
|
|
It's a fact of life that this plugin may be in an incomplete state
|
|
and/or will have bugs. So to facilitate tracking down problems we let
|
|
you see what's going on dynamically. Various debugging settings will
|
|
cause output to appear on vlc's plugin log and/or "standard error"
|
|
(assuming you've run vlc in a way that you can capture this).
|
|
|
|
You think of debug switches as a bit mask, that you specify as an
|
|
integers the various "bit" values (given in decimal) are listed below.
|
|
|
|
name value description
|
|
---------- ----- -----------
|
|
META 1 Meta information
|
|
EVENT 2 Trace keyboard events
|
|
MRL 4 MRL debugging
|
|
EXT 8 Calls from external routines
|
|
CALL 16 all calls
|
|
LSN 32 LSN changes
|
|
SEEK 64 Seeks to set location
|
|
CDIO 128 Debugging from CDIO library routines
|
|
CDDB 256 debugging from CDDB library routines
|
|
|
|
**CD debugging...
|
|
|
|
The tool cd-info from libcdio can be used to show the contents and
|
|
analyze the contents of a CD.
|
|
|
|
The tool cd-read from libcdio can be used to show the sectors of
|
|
the CD or CD image or extract sectors.
|
|
|
|
$Id$
|