intf-cdda.txt
上传用户:riyaled888
上传日期:2009-03-27
资源大小:7338k
文件大小:17k
源码类别:

多媒体

开发平台:

MultiPlatform

  1. This file documents the ``Extended'' VLC CD-DA Plugin
  2. Copyright (C) 2003, 2004 Rocky Bernstein (rocky@panix.com)
  3. Permission is granted to copy, distribute and/or modify this document
  4. under the terms of the GNU Free Documentation License, Version 1.1 or
  5. any later version published by the Free Software Foundation; with the
  6. Invariant Sections being ``Free Software'' and ``Free Software Needs
  7. Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,''
  8. and with the Back-Cover Texts as in (a) below.
  9. (a) The Free Software Foundation's Back-Cover Text is: ``You have
  10. freedom to copy and modify this GNU Manual, like GNU software.  Copies
  11. published by the Free Software Foundation raise funds for GNU
  12. development.''
  13. - - - - - -
  14. Features over the older VLC CD-DA plugin
  15. Internally I think this is much much cleaner. It uses the 
  16. libcdio for disk reading and libcddb to get CDDB information.
  17. MRL handling: 
  18. -  Can specify device as well as track.
  19. -  Because we use the libcdio library, the "device" can be a disk image
  20.    to be burned (e.g. a cdrdao bin/cue pair and some primitive Nero
  21.    support)
  22. Features:
  23. -  Can customize the what to show in the play-list title and author. 
  24. -  Duration of each track is shown
  25. -  Media information is shown using CDDB
  26. -  Dynamic debugging
  27. -  Will scan for a CD-ROM drive with a CD-DA loaded in it.
  28. -----------------------------------------------------------------
  29. General Info
  30. -----------------------------------------------------------------
  31. Much of what I write in this section can be found elsewhere. See for
  32. example http://www.pctechguide.com/08cd-rom.htm, or the libcdio
  33. documentation.
  34. The Sony and Philips Corporations invented and Compact Disc (CD) in
  35. the early 1980s. The specifications for the layout is often referred
  36. to by the color of the cover on the specification. 
  37. The first type of CD specification that was produced was the Compact
  38. Disc Digital Audio (CD-DA) or just plain ``audio CD'' and is commonly
  39. called the ``Red Book''. Music CD's are recorded in this format which
  40. basically allows for around 74 minutes of audio per disc and for that
  41. information to be split up into *tracks*. Tracks are broken up into
  42. "sectors" and each sector contains 2,352 bytes. To play one 44.1 kHz
  43. CD-DA sampled audio second, 75 sectors are used.
  44. A CD can hold at most 99 such tracks. Between the tracks CD
  45. specifications require a ``2 second'' in gap (called a @term{lead-in
  46. gap}. This is unused space with no ``data'' similar to the space
  47. between tracks on an old phonograph. The word ``second'' here really
  48. refers to a measure of space and not really necessarily an amount of
  49. time. However in the special case here where you have an audio CD, the
  50. amount of time to play a gap of this size will take 2 seconds. Note
  51. this is independent of how fast your CD drive can read a sector.
  52. The beginning (or inner edge) of the CD is supposed to have a ``2
  53. second'' lead-in gap and there is supposed to be another ``2 second''
  54. *lead-out* gap at the end (or outer edge) of the CD.
  55. CD-DA ``Red Book'' Specification
  56. One can create and then write or "burn" a CD in the CD-DA format
  57. and in this process sometimes one writes the bytes that will appear as
  58. a file on a hard disk. This is called a "CD disk image". This
  59. plugin may be able to play this file just the same as if it were
  60. burned onto a CD.
  61. As there are a number of CD-burning programs, there are a number of
  62. CD-image formats. This plugin uses libcdio which currently understands
  63. the BIN/CUE disk-image format used by a popular DOS/Window mastering
  64. tool and a limited subset of the proprietary and unpublished form at
  65. used by the Nero burning software. Over time however perhaps more
  66. disk-image formats will be recognized.
  67. Audio CD Identification Information (CDDB)
  68. The Philips Red-Book specification allows for a Compact Disc to have a
  69. Media Catalog Number or MCN written on it, and probably this
  70. was how they CD's would be identified. Alas, very few audio discs
  71. actually have a Medium Catalog Number on the box, and the way the code
  72. is written on CD is *not* uniform across all discs!
  73. However the listening community wanted a way to identify an audio CD,
  74. so a database of CD information was gathered by basically making a
  75. ``signature'' or hash from the number of tracks on a disk and a
  76. checksum of the bytes of the tracks. This is referred to as CDDB
  77. information. Using the hash the database gives information about the
  78. titles of the tracks, the CD album name, year it was published and so
  79. on. This plugin has the ability to show this information courtesy of
  80. libcddb written by Kris Verbeeck.
  81. -----------------------------------------------------------------
  82. MRLS:
  83. -----------------------------------------------------------------
  84. the vlc CD-DA plugin, identifies itself in the vlc GUI as CDDAX. It
  85. also registers itelf to handle a class of MRL's that start with
  86. cddax://.
  87. The CDDAX MRL takes the following form:
  88.   cddax://[path to file or CD-DA device][@[Tt]number]]
  89. A simple cddax:// runs the default item: track 1 using the default CD
  90. device (perhaps /dev/cdrom). The default default device is
  91. user-configurable.
  92. It is however also possible to specify both Compact Disc device/filename
  93. and item explicitly in the MRL.
  94. For example cddax://dev/cdrom2 specifies using device /dev/cdrom2 which
  95. might useful if as I have /dev/cdrom is a burner and the /dev/cdrom2
  96. is a read-only device. And cddax://test_cdda.cue specifies the
  97. "cuesheet" file for a CD-DA image on disk created say with cdrdao.
  98. (test_cdda.bin is the corresponding bin file, but using that won't
  99. work.)
  100. After the optional device name or file name, you can name the track
  101. number unit which preceded by a @ or an @ and T in either case. A MRL
  102. which ends in an @ is like not adding it at all.
  103. Some examples of MRLS are given below. In the examples, we assume the
  104. following configuration setting:
  105. cdda.default_device:/dev/cdrom
  106.     cddax://                   - track 1 of device: /dev/cdrom
  107.     cddax://@                  - same as above
  108.     cddax:///dev/cdrom         - probably same as above
  109.     cddax:///dev/cdrom2        - track 1 of /dev/cdrom2
  110.     cddax:///dev/cdrom2@       - same as above
  111.     cddax://dev/cdrom2@53      - track 53 from /dev/cdrom2
  112.     cddax://dev/cdrom2@T53     - Same as above
  113.     cddax://dev/cdrom2@t53     - Same as above
  114.     cddax://@2                 - track 2 from default device
  115.     cddax://3                  - track 3 from default device
  116.     cddax:///tmp/ntsc.cue      - track 1 from /tmp/ntsc.bin, (a bin/cue
  117.                                  disk image)
  118.     cddax:///tmp/ntsc.cue@     - same as above
  119.     cddax://tmp/ntsc.cue@      - track 1 of tmp/ntsc.bin. NOT the
  120.                                  the same as above unless the cwd is /.
  121.     cddax://ntsc.nrg           - track 1 of ntsc.nrg (a nero disk image)
  122.     cddax://tmp/ntsc.nrg@5     - track 5 of /tmp/ntsc.nrg
  123.   Bad MRL's
  124.     cddax://@x                  - x is not a number
  125.     cddax/tmp                   - no colon
  126.     cddax:/                     - must start cddax://
  127. -----------------------------------------------------------------
  128. Configuration settings:
  129. -----------------------------------------------------------------
  130. Configuration settings in vlc are generally put in ~/.vlc/vlcrc. A
  131. description of the ones specific to CDDAX are listed below.
  132. - -
  133. cddax-cddb-title-format
  134. This gives a format used in the playlist title string when CDDB is consulted.
  135. Similar to the Unix date command, there are format specifiers
  136. that start with a percent sign for which various information is filled
  137. in dynamically.  The control specifiers are given as below
  138.    %a : The album artist
  139.    %A : The album information
  140.    %C : Category
  141.    %I : CDDB disk ID
  142.    %G : Genre
  143.    %M : The current MRL
  144.    %m : The CD-DA Media Catalog Number (MCN)
  145.    %n : The number of tracks on the CD
  146.    %p : The artist/performer/composer in the track
  147.    %T : The track number
  148.    %s : Number of seconds in this track
  149.    %t : The name
  150.    %Y : The year 19xx or 20xx
  151.    %% : a %
  152. The default is
  153.   Track %T. %t - %p 
  154. - -
  155. cddax-title-format
  156. This gives a format used in the playlist title string when CDDB is
  157. *NOT* consulted.  Similar to the Unix date command, there are format
  158. specifiers that start with a percent sign for which various
  159. information is filled in dynamically.  The control specifiers are
  160. given as below
  161.    %M : The current MRL
  162.    %m : The CD-DA Media Catalog Number (MCN)
  163.    %n : The number of tracks on the CD
  164.    %T : The track number
  165.    %s : Number of seconds in this track
  166.    %% : a %
  167. The default is 
  168.   %T %M 
  169. - -
  170. cddax-cddb-email
  171. # email given on cddb requests
  172. # string, default: me@home
  173. - -
  174. cddax-cddb-enabled
  175. # Do we use CDDB to retrieve CD information?
  176. # bool, default: 1
  177. - -
  178. cddax-cddb-http
  179. # Contact CDDB via the HTTP protocol?
  180. # bool, default: 0
  181. - -
  182. cddax-cddb-port
  183. # numeric, default: 8880
  184. - -
  185. cddax-cddb-server
  186. # The server CDDB contacts to get CD info
  187. # string, default: freedb.freedb.org
  188. - -
  189. cddax-debug
  190. An integer (interpreted as a bit mask) which shows additional
  191. debugging information see the section below on debugging for more
  192. information about the bits that can be set.
  193. - - 
  194. cddax-device
  195. What to use if no drive specified. If null, we'll scan for CD
  196. drives with a CD-DA loaded in it.
  197. # string, default: 
  198. -----------------------------------------------------------------
  199. Troubleshooting Guide
  200. -----------------------------------------------------------------
  201. This gives higher-level troubleshooting. More detailed and
  202. lower-level information is given in the next section DEBUGGING. 
  203. Problem: something doesn't work. Start at step -1.
  204. Problem: The program gets a SEGFAULT or gives core dump. Start at step
  205. 0.
  206. Problem: I don't get anything playing. I can't even get a playlist of
  207. the CD.
  208. Determination: start at step 1.
  209. Problem: Okay, I something plays menu now. But I don't see information
  210. about the CD in the playlist.
  211. Determination: start at step 5.
  212. -1. (Something doesn't work.)
  213.    A lot of what is put here really is applicable to reporting
  214.    problems and troubleshooting in vlc and the concepts really
  215.    apply to any sort of bug reporting. 
  216.    When reporting a problem it's helpful to have facts:
  217.      a) the version of vlc) you are using
  218.      b) the OS you are running on 
  219.      c) the version of libcdio and/or libcddb you are using 
  220.         versions of libcdio and libcddb can be obtained by running 
  221.           pkg-config --modversion libcdio
  222.           pkg-config --modversion libcddb
  223.      d) what you input or requested (e.g. the full command line entered -
  224.         if it is possible to reproduce the problem by giving a
  225.         commandline that is desirable since it is probably the simplest
  226.         way to convey exactly what was requested)
  227.    
  228.         People often give (some part) of an error message neglecting
  229.         to also include what was requested or entered that led to the
  230.         output.
  231.      e) The setting for this plugin. That is the values of the
  232.         variables that start cddax- listed above. On Unix this can
  233. generally be found in ~/.vlc/vlcrc
  234.   
  235.      f) Exactly the messages that were what given. You can turn
  236.         increase the verbosity level by setting "verbosity=2" in the
  237.         vlc preferences files. On Unix the preferences file is
  238.         generally in ~/vlc/.vlcrc but there are GUI ways to set this
  239.         too. Give everything that is in the message log.
  240. 0. (The program gets a SEGFAULT or gives core dump.)
  241.    Get and send a stack trace. 
  242.    In addition to -1. Make sure the program has been compiled with
  243.    debugging symbols put into the code. This is usually done by having
  244.    the "-g" flag set when compiling the program.
  245.    You can get a strack trace the GNU debugger using the "where"
  246.    command. For example on this might work:
  247.      gdb vlc *name-of-corefile*
  248.      where
  249. 1. (I don't get anything playing. I can't even get a playlist of
  250.     the CD.)
  251.    Do you even have the plugin loaded? 
  252.    When you run the vlc GUI, under Settings/Preferences you should see
  253.    a "plugins" expandable list and under that another "access" list do
  254.    you see a expandable entry under "access" labeled "cddax"? If so,
  255.    skip on to step 2.
  256.    a) If no "cddax" expandable list, then the CDDAX plugin isn't
  257.    loaded. Does a shared object exist?  The plugin shared object is
  258.    called "libcddax_plugin.so" It should be in the directory that has
  259.    ...vlc/access. If this isn't around you need to build and install
  260.    the CDDAX plugin.
  261.    b) if libcddax_plugin.so is in the filesystem, there might be a
  262.    loader error; perhaps libcdio is not installed or
  263.    are the wrong version. Use ldd on the file to see that it has all
  264.    of the libraries dependencies satisfied. Also you might be able
  265.    check if there was an attempt to load it by tracking system
  266.    calls. On Linux and other OS's) "strace" can be used to see if the
  267.    file gets accessed. On Solaris use "truss". 
  268.    For example on Linux, among the many line of output when I run
  269.    "strace -e trace=file vlc" I see this along with a lot of other
  270.    output:
  271.    ...
  272.    stat64("/usr/local/lib/vlc/access/libcddax_plugin.so", {st_mode=S_IFREG|0755, st_size=238921, ...}) = 0
  273.    open("/usr/local/lib/vlc/access/libcddax_plugin.so", O_RDONLY) = 5
  274.    The parameters inside the calls may be different depending on where
  275.    vlc is installed and what release is installed. If the the file is
  276.    found and "opened", 
  277.   
  278.    There may also be a message may under "setup/logs".
  279. 2. (There plugin was loaded and preferences found.)  In the "cddax" tab
  280.    of preference. An important selection is "cddax-device."  If this is
  281.    set to the empty string, CDDAX will try to scan your drives for a
  282.    suitable device if the driver has the capability to scan for
  283.    drives. However you can set the device to something of your
  284.    choosing. On GNU/Linux, this may be "/dev/cdrom" and on Solaris it
  285.    may be "/vol/dev/aliases/cdrom0".  If you set this field, make sure
  286.    these are correct for your particular setup. For example, I
  287.    generally play out of the DVD device and this is called /dev/dvd
  288.    rather than /dev/cdrom.
  289. 3. (CD-DA Setup devices seems correct and there is a CD in the
  290.    drive.)  Bring up the playlist. If you specified only a drive and
  291.    no track, you should see in the playlist a list of tracks on the CD.
  292.    
  293.    a. If not something's wrong like step 2. Another tack may be to try
  294.    to read a disk image of a CD and thus eliminate any problems with
  295.    hardware. If this works, then this is a hardware problem. 
  296. 4. (You have a list of entries describing the CD-DA or disk-file of
  297.    a CD-DA image.)
  298.    There should be at least one "track" listed for the CD-DA and track
  299.    1 will end with the digit 1.  If there are NO tracks listed then
  300.    there may be a problem with the that particular medium. So as in
  301.    step 3 you can try a known good sample and perhaps burn a CD from
  302.    that. 
  303. 5. <<Fill in info about CDDB hacking>>
  304. -----------------------------------------------------------------
  305. Debugging
  306. -----------------------------------------------------------------
  307. **General vlc debugging...
  308. Before delving to things specific to this plugin, some preparation may
  309. be in order. You'll probably want to configure vlc with "--enable-debug".
  310. plugin with debug information. Instead of "make'ing" with "make", use
  311. "make debug" and instead of installing using "make install" use "make
  312. install-debug". 
  313. I use gdb to debug. Debugging vlc with the entire suite of plugins
  314. under gdb is slow because it has to read in symbol tables from all the
  315. plugins. There are two ways to make loading faster when debugging. The
  316. simplest is just to go to the plugin directory and remove unused
  317. plugins. Another approach is create a new directory and make
  318. (symbolic) links into the complete plugin directory. Another way to
  319. speed up gdb loading is to attach the debugger after vlc has started up
  320. via a command like:
  321.   gdb -p *pid-of-vlc-process*
  322. **cddax debugging...
  323. It's a fact of life that this plugin may be in an incomplete state
  324. and/or will have bugs. So to facilitate tracking down problems we let
  325. you see what's going on dynamically. Various debugging settings will
  326. cause output to appear on vlc's plugin log and/or "standard error"
  327. (assuming you've run vlc in a way that you can capture this).
  328. You think of debug switches as a bit mask, that you specify as an
  329. integers the various "bit" values (given in decimal) are listed below.
  330.    name    value  description
  331. ---------- -----  -----------
  332.    META        1  Meta information
  333.    EVENT       2  Trace keyboard events
  334.    MRL         4  MRL debugging
  335.    EXT         8  Calls from external routines
  336.    CALL       16  all calls
  337.    LSN        32  LSN changes
  338.    SEEK       64  Seeks to set location
  339.    CDIO      128  Debugging from CDIO library routines
  340.    CDDB      256  debugging from CDDB library routines
  341. **CD debugging...
  342. The tool cd-info from libcdio can be used to show the contents and
  343. analyze the contents of a CD.
  344. The tool cd-read from libcdio can be used to show the sectors of 
  345. the CD or CD image or extract sectors. 
  346. $Id: intf-cdda.txt 6961 2004-03-05 17:34:23Z sam $