Като за начало използваш ffmpeg библиотеката за декодиране до удобен RAW вид
http://ffmpeg.org/doxygen/trunk/api-example_8c-source.html . После през ALSA. Не е сложно но е дълго за обяснение. За функциите на ffmpeg се обърни към документацията (ужасна е). За Стрима към АЛСА можеш да стартираш от тука
http://home.roadrunner.com/~jgglatt/tech/linuxapi.htm http://equalarea.com/paul/alsa-audio.html - по сносно е обяснено от документацията и. Има и пример с който аз съм тръгнал и пробвал.
Само ffmpeg не съм пробвал но с повече пот ще тръгне. Апликацията трябва да е като стрим организирана т.е.
Инициализираш ALSA отваряш 2 треда в единят отваряш файла и го подаваш към декодера, изходните данни ги записваш в ALSA устройството, което е 2 рият тред. Декодирането трябва да е с 2-3 блока напред преди да задействаш трансвера на опашката към ALSA. Както и ако опашката се запълни треда на декодера трябва да изчака освобождаването на сегмент. Шернатият ресурс между тредовете, е опашката на декодираният файл. Заключващ е мутекс към декодера.
Друг вариянт е с 2 треда и IPC комуникация между тях. Единят е декодиращ другият е възпроизвеждащ. Така е по лесно на пръв поглед но е много бъгаво и дърводелско. Може на по-слаби компютри да насича или да оставя отворена IPC връзка.
Съжалявам че е толкова объркано обяснението. Реализацията обаче изглежда по-просто.