1
0
mirror of https://github.com/mpv-player/mpv synced 2025-02-20 23:07:02 +00:00
Command line video player
Go to file
wm4 dd3260185a demux_lavf: add support for libavdevice
libavdevice supports various "special" video and audio inputs, such
as screen-capture or libavfilter filter graphs.

libavdevice inputs are implemented as demuxers. They don't use the
custom stream callbacks (in AVFormatContext.pb). Instead, input
parameters are passed as filename. This means the mpv stream layer has
to be disabled. Do this by adding the pseudo stream handler avdevice://,
whose only purpose is passing the filename to demux_lavf, without
actually doing anything.

Change the logic how the filename is passed to libavformat. Remove
handling of the filename from demux_open_lavf() and move it to
lavf_check_file(). (This also fixes a possible bug when skipping the
"lavf://" prefix.)

libavdevice now can be invoked by specifying demuxer and args as in:

    mpv avdevice://demuxer:args

The args are passed as filename to libavformat. When using libavdevice
demuxers, their actual meaning is highly implementation specific. They
don't refer to actual filenames.

Note:

libavdevice is disabled by default. There is one problem: libavdevice
pulls in libavfilter, which in turn causes symbol clashes with mpv
internals. The problem is that libavfilter includes a mplayer filter
bridge, which is used to interface with a set of nearly unmodified
mplayer filters copied into libavfilter. This filter bridge uses the
same symbol names as mplayer/mpv's filter chain, which results in symbol
clashes at link-time.

This can be prevented by building ffmpeg with --disable-filter=mp, but
unfortunately this is not the default.

This means linking to libavdevice (which in turn forces linking with
libavfilter by default) must be disabled. We try doing this by compiling
a test file that defines one of the clashing symbols (vf_mpi_clear).

To enable libavdevice input, ffmpeg should be built with the options:

    --disable-filter=mp

and mpv with:

    --enable-libavdevice

Originally, I tried to auto-detect it. But the resulting complications
in configure did't seem worth the trouble.
2012-12-03 21:08:51 +01:00
audio ao_pcm: fix references to -novideo 2012-12-03 21:08:48 +01:00
compat Improve compatibility with Libav 0.8.4 and ffmpeg 0.11.2 2012-11-14 11:45:52 +01:00
core demux_lavf: add support for libavdevice 2012-12-03 21:08:51 +01:00
demux demux_lavf: add support for libavdevice 2012-12-03 21:08:51 +01:00
DOCS demux_lavf: add support for libavdevice 2012-12-03 21:08:51 +01:00
etc configure: don't check for inttypes.h, it always exists 2012-12-03 21:08:51 +01:00
osdep Rename directories, move files (step 2 of 2) 2012-11-12 20:08:18 +01:00
stream demux_lavf: add support for libavdevice 2012-12-03 21:08:51 +01:00
sub subassconverter: correctly handle RRGGBB and unknow formats 2012-11-25 23:47:57 +01:00
TOOLS TOOLS: remove checktree.sh 2012-11-14 11:26:43 +01:00
video vo_xv: try harder to get correctly aligned pointers/strides 2012-12-03 21:08:51 +01:00
.gitignore build: remove doc/locale language auto-detection, simplify 2012-11-14 11:26:43 +01:00
AUTHORS documentation: remove Changelog, rewrite README 2011-02-15 12:04:32 +02:00
configure demux_lavf: add support for libavdevice 2012-12-03 21:08:51 +01:00
Copyright Rename to "mpv" 2012-10-12 10:14:32 +02:00
LICENSE Copyright, LICENSE: change binary license to GPL 3 2011-03-24 23:40:29 +02:00
Makefile demux_lavf: add support for libavdevice 2012-12-03 21:08:51 +01:00
README osd: remove freetype font rendering code 2012-07-28 23:36:08 +02:00
talloc.c talloc: fix strndup group of functions 2012-10-12 10:10:32 +02:00
talloc.h clang: fix all warnings except deprecations 2012-11-13 22:19:18 +01:00
version.sh Change version string 2012-07-29 00:04:17 +02:00

Compiling with full features requires development files for several
external libraries. Below is a list of some important requirements. For
more information see the output of './configure --help' for a list of options,
or look at the list of enabled and disabled features printed after running
'./configure'. If you think you have support for some feature installed
but configure fails to detect it, the file config.log may contain information
about the reasons for the failure.

Libraries specific to particular video output methods
(you'll want at least one of VDPAU, GL or Xv):
 - libvdpau (for VDPAU output, best choice for NVIDIA cards)
 - libGL (OpenGL output)
 - libXv (XVideo output)
general:
 - libasound   (ALSA audio output)
 - various general X development libraries
 - libfreetype (for libass)
 - libfontconfig (for libass)
 - libass
 - FFmpeg libraries (libavutil libavcodec libavformat libswscale libpostproc)

Most of the above libraries are available in suitable versions on normal
Linux distributions. However FFmpeg is an exception (distro versions may be
too old to work at all or work well). For that reason you may want to use
the separately available build wrapper that first compiles FFmpeg libraries
and libass, and then compiles the player statically linked against those.