libdvdnav
|
Below is a simple libdvdnav
program. Type/copy it and save it into the file 'dvdtest.c'.
#include <stdio.h> #include <dvdnav/dvdnav.h> #include <dvdnav/dvdnav_events.h> #include <sys/types.h> int main(int argc, char **argv) { dvdnav_t *dvdnav; int finished, len, event; uint8_t buf[2050]; /* Open the DVD */ dvdnav_open(&dvdnav, "/dev/dvd"); fprintf(stderr, "Reading...\n"); finished = 0; while(!finished) { int result = dvdnav_get_next_block(dvdnav, buf, &event, &len); if(result == DVDNAV_STATUS_ERR) { fprintf(stderr, "Error getting next block (%s)\n", dvdnav_err_to_string(dvdnav)); exit(1); } switch(event) { case DVDNAV_BLOCK_OK: /* Write output to stdout */ fwrite(buf, len, 1, stdout); break; case DVDNAV_STILL_FRAME: { fprintf(stderr, "Skipping still frame\n"); dvdnav_still_skip(dvdnav); } break; case DVDNAV_STOP: { finished = 1; } default: fprintf(stderr, "Unhandled event (%i)\n", event); finished = 1; break; } } dvdnav_close(dvdnav); return 0; }
If you have correctly installled libdvdnav
, you should have the command 'dvdnav-config' in your path. If so you can compile this program with
gcc -o dvdtest dvdtest.c `dvdnav-config --cflags --libs`
If all goes well, this should generate the 'dvdtest' program in your current working directory. You can now start saving a MPEG 2 stream directly off your DVD with
./dvdtest 2>error.log >out.mpeg
If the command fails, check the error.log file for details.
include <stdio.h> include <dvdnav/dvdnav.h> include <dvdnav/dvdnav_events.h> include <sys/types.h>
These lines include the necessary headers. Almost all libdvdnav
programs will only need to include the dvdnav.h and dvdnav_events.h header files from the dvdnav directory.
dvdnav_open(&dvdnav, "/dev/dvd");
The libdvdnav
uses libdvdread
for its DVD I/O. libdvdread
accesses the DVD-device directly so dvdnav_open() needs to be passed the location of the DVD device. libdvdread
can also open DVD images/mounted DVDs. Read the libdvdread
documentation for more information.
int result = dvdnav_get_next_block(dvdnav, buf, &event, &len);
Return to A libdvdnav Tutorial.