Difference between revisions of "Development/Tutorials/Debugging/Phonon"

Jump to: navigation, search
(add backend_debug used in pgst 4.6 and pvlc 0.6)
(Replaced content with "{{Moved To Community | Guidelines_and_HOWTOs/Debugging }}")
 
(2 intermediate revisions by 2 users not shown)
Line 1: Line 1:
= Environment Variables =
+
{{Moved To Community | Guidelines_and_HOWTOs/Debugging }}
 
+
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:
+
<syntaxhighlight lang="bash">
+
$ export PHONON_DEBUG=5
+
$ export PHONON_BACKEND_DEBUG=5
+
$ export PHONON_PULSEAUDIO_DEBUG=5
+
$ export PHONON_VLC_DEBUG=5
+
$ export PHONON_GST_DEBUG=5
+
</syntaxhighlight>
+
 
+
Then run your program. The terminal will fill up with gobs of debugging output.
+
 
+
== Phonon-GStreamer debugging ==
+
 
+
=== Drawing a dot diagram ===
+
 
+
<syntaxhighlight lang="bash">
+
$ export GST_DEBUG_DUMP_DOT_DIR=/tmp
+
$ # run your program
+
$ dot -Tpng -oimage.png < /tmp/one-of-the-dot-files.dot
+
</syntaxhighlight>
+
 
+
=== 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.
+
 
+
<syntaxhighlight lang="bash">
+
$ 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
+
</syntaxhighlight>
+
 
+
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:
+
<syntaxhighlight lang="bash">
+
$ gst-launch filesrc location=/path/to/video ! decdebin2 name=dec ! audioresample ! audioconvert ! pulsesink \
+
    dec. ! ffmpegcolorspace ! xvimagesink
+
</syntaxhighlight>
+
 
+
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:
+
<syntaxhighlight lang="bash">
+
$ gst-launch rsndvdbin ! dvdspu ! ffmpegcolorspace ! queue ! xvimagesink \
+
    rsndvdbin0 ! dvdspu0.subpicture \
+
    rsndvdbin0 ! queue ! audioresample ! audioconvert ! pulsesink
+
</syntaxhighlight>
+
 
+
= Building Phonon from source =
+
 
+
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 <tt>$HOME/.bashrc</tt>:
+
<syntaxhighlight lang="bash">
+
export PATH=$HOME/kde/bin:$PATH
+
export PATH=/usr/lib/ccache:$PATH
+
export LD_LIBRARY_PATH=$HOME/kde/lib:$LD_LIBRARY_PATH
+
</syntaxhighlight>
+
 
+
Reload your edited .bashrc:
+
<syntaxhighlight lang="bash">
+
source $HOME/.bashrc
+
</syntaxhighlight>
+
NOTE: if you are not using the bash shell, edit your proper shell config file (<tt>~/.zshrc</tt> or <tt>~/.tcshrc</tt> or whatever it may be).
+
 
+
== Make KDE aware of Phonon’s location ==
+
<syntaxhighlight lang="bash">
+
echo 'export KDEDIR=$HOME/kde' >> $HOME/.kde/env/myenv.sh
+
echo 'export KDEDIRS=$KDEDIR' >> $HOME/.kde/env/myenv.sh
+
</syntaxhighlight>
+
Some distributions call the above folder <tt>$HOME/.kde4/</tt>, such as OpenSuSE.
+
 
+
== Install locally==
+
 
+
Install in your $HOME dir):
+
<syntaxhighlight lang="bash">
+
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
+
</syntaxhighlight>
+
 
+
To update your build, it's even easier:
+
<syntaxhighlight lang="bash">
+
cd ~/kde/src/phonon
+
git pull
+
cd build && sudo make install
+
</syntaxhighlight>
+
 
+
== Build locally from a tarball ==
+
 
+
This is 4.4.4 for example:
+
<syntaxhighlight lang="bash">
+
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
+
</syntaxhighlight>
+

Latest revision as of 09:14, 5 August 2016

This page is now on the community wiki.


This page was last modified on 5 August 2016, at 09:14. Content is available under Creative Commons License SA 3.0 as well as the GNU Free Documentation License 1.2 unless otherwise noted.