|
|
(8 intermediate revisions by 7 users not shown) |
Line 1: |
Line 1: |
| = Building Phonon from source =
| | {{Moved To Community | Guidelines_and_HOWTOs/Debugging/Phonon }} |
| | |
| If you want to have a newer Phonon build than 4.4.3 which is currently shipped by most distributions in KDE 4.6, you can build from source (git). Phonon is now located on git.kde.org.
| |
| | |
| == Get Dependencies ==
| |
| | |
| Deb-based distros, run <pre>sudo apt-get build-dep phonon</pre>to be sure you have all dependencies installed.
| |
| <br>
| |
| OpenSuSE:<pre>sudo zypper si -d phonon</pre>
| |
| | |
| == Install git ==
| |
| | |
| In Kubuntu, Debian, etc.:<pre>sudo apt-get install git-core</pre>
| |
| In Archlinux:<pre>sudo pacman -Sy git</pre>
| |
| In Gentoo:<pre>sudo emerge -av dev-util/git</pre>
| |
| In OpenSuSE:<pre>sudo zypper install git</pre>
| |
| | |
| == Install ccache to speed up compilation ==
| |
| | |
| Install the package from your distribution and set the size of the cache to 2 GB with the command<pre>ccache -M 2G</pre>
| |
| This will take 2Gb of space in your local directory. Enable the use of ccache by adding it to your local .bashrc, described below.
| |
| | |
| == Define the PATH and local environment ==
| |
| | |
| Append the following to $HOME/.bashrc:<pre>
| |
| export PATH=$HOME/kde/bin:$PATH
| |
| export PATH=/usr/lib/ccache:$PATH
| |
| export LD_LIBRARY_PATH=$HOME/kde/lib:$LD_LIBRARY_PATH</pre>
| |
| | |
| Reload your edited .bashrc:<pre>
| |
| source $HOME/.bashrc</pre>
| |
| NOTE: if you are not using the bash shell, edit your proper shell config file (~/.zshrc or ~/.tcshrc or whatever it may be).
| |
| | |
| == Make KDE aware of Phonon’s location ==
| |
| <pre>
| |
| echo 'export KDEDIR=$HOME/kde' >> $HOME/.kde/env/myenv.sh
| |
| echo 'export KDEDIRS=$KDEDIR' >> $HOME/.kde/env/myenv.sh</pre>
| |
| Some distributions call the above folder $HOME/.kde4/ , such as OpenSuSE.
| |
| | |
| == Install locally==
| |
| | |
| Install in your $HOME dir):<pre>
| |
| mkdir $HOME/kde && cd kde && mkdir src && cd src
| |
| | |
| git clone git://anongit.kde.org/phonon
| |
| | |
| cd phonon && mkdir build && cd build
| |
| | |
| cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=debugfull $HOME/kde/src/phonon
| |
| | |
| sudo make install</pre>
| |
| | |
| To update your build, it's even easier: <pre> | |
| cd ~/kde/src/phonon
| |
| | |
| git pull
| |
| | |
| cd build && sudo make install</pre>
| |
| | |
| == Build locally from a tarball ==
| |
| | |
| This is 4.4.4 for example:<pre>
| |
| cd ~/kde/src/
| |
| | |
| wget http://download.kde.org/download.php?url=stable/phonon/4.4.4/src/phonon-4.4.4.tar.bz2
| |
| | |
| tar xf phonon-4.4.4.tar.bz2
| |
| | |
| cd phonon-4.4.4 && mkdir build && cd build
| |
| | |
| cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=debugfull $HOME/kde/src/phonon-4.4.4
| |
| | |
| sudo make install</pre>
| |
| | |
| = Environment Variables =
| |
| | |
| In general, there is one easy way to give Phonon devs all the information they need to help fix your problem.
| |
| | |
| Set these environment variables:
| |
| <pre>
| |
| $ export PHONON_DEBUG=5
| |
| $ export PHONON_PULSEAUDIO_DEBUG=5
| |
| $ export PHONON_VLC_DEBUG=5
| |
| $ export PHONON_GST_DEBUG=5
| |
| $ export PHONON_XINE_DEBUG=5
| |
| </pre>
| |
| | |
| Then run your program. The terminal will fill up with gobs of debugging output.
| |
| | |
| == Phonon-GStreamer debugging ==
| |
| | |
| === Even more verbose output ===
| |
| | |
| Phonon-gst has some fancier debug options available. In addition to PHONON_GST_DEBUG, there is PHONON_GST_GST_DEBUG. Setting it to 8 or so will cause the gstreamer libraries to produce ''copious'' quantities of debug output. We're talking thousands of lines of what seems to be useless noise. Roughly 1% of it is useful, but the phonon-gst devs can easily decipher it and drill down to the important bits.
| |
| | |
| === Pulseaudio ===
| |
| | |
| Pulseaudio and phonon try their hardest to get along. Sometimes, it doesn't work. Luckily, there is a way to test gstreamer and pulseaudio to see who is at fault.
| |
| | |
| <pre>
| |
| $ gst-launch filesrc location=/usr/share/sounds/KDE-Sys-Log-In.ogg ! decodebin2 ! audioresample ! audioconvert ! pulsesink
| |
| $ gst-launch filesrc location=/usr/share/sounds/KDE-Sys-Log-In.ogg ! decodebin2 ! audioresample ! audioconvert ! alsasink
| |
| </pre>
| |
| | |
| If they both work flawlessly, blame Phonon-GStreamer.
| |
| | |
| If the first works but the second doesn't, you might have an exotic sound setup that involves tweaking the alsasink parameters to reflect what pulseaudio does to alsa.
| |
| | |
| If the second works but the first doesn't, you can blame pulseaudio.
| |
| | |
| Another way to confirm this is by setting the PHONON_GST_AUDIOSINK environment variable. Setting it to e.g. "pulsesink" uses the pulseaudio sink.
| |
| | |
| === Recreating the phonon-gst pipeline ===
| |
| | |
| Phonon-GStreamer creates predicable pipelines. In general, they look like this:
| |
| | |
| <!-- FIXME: We need a nice diagram -->
| |
| | |
| <pre>
| |
| filesrc -> decodebin2 -> queue -> audioresample -> audioconvert -> pulsesink
| |
| \
| |
| -> ffmpegcolorspace -> queue -> xvimagesink
| |
| </pre>
| |
| | |
| If the input stream isn't coming from a file, it is likely coming in via KIO which pipes it into an abstractmediastream. If pulseaudio isn't used, then replace pulsesink with something of alsasink, osssink, or somesuch.
| |
| | |
| Recreating the playback stream of some video file can be done as such:
| |
| <pre>
| |
| $ gst-launch filesrc location=/path/to/video ! decdebin2 name=dec ! audioresample ! audioconvert ! pulsesink \
| |
| dec. ! ffmpegcolorspace ! xvimagesink
| |
| </pre>
| |
| | |
| DVD playback is a bit different:
| |
| <pre>
| |
| (subpicture stream)
| |
| /--->---\
| |
| rsndvdbin -> dvdspu -> ffmpegcolorspace -> queue -> xvimagesink
| |
| \-> queue -> audioresample -> audioconvert -> pulsesink
| |
| </pre>
| |
| | |
| This is built with the following:
| |
| <pre>
| |
| $ gst-launch rsndvdbin ! dvdspu ! ffmpegcolorspace ! queue ! xvimagesink \
| |
| rsndvdbin0 ! dvdspu0.subpicture \
| |
| rsndvdbin0 ! queue ! audioresample ! audioconvert ! pulsesink
| |
| </pre>
| |