Qemu audio

參考一
參考二
參考三

最近由于項目需要,研究了一下qemu audio。Guest調用Qemu的虛擬聲卡設備,聲音數據(PCM)傳到Qemu后,Qemu再傳給事先搭建好的后端接口,這些后端接口都是通過一些環境變量設置的,如果VM使用的是spice協議,默認會添加這個環境變量:QEMU_AUDIO_DRV=spice,音頻數據通過spice協議發出。
下面介紹幾個有用的命令:

編譯Qemu時,查看支持的后端驅動的列表,Possible drivers are: oss alsa sdl pa。
./configure --audio-drv-list=?

這個配置會影響編譯后的文件:config-host.h中的CONFIG_AUDIO_DRIVERS,這個宏定義又會被文件:audio/audio.c中的結構體:static struct audio_driver *drvtab[]使用:
/* audio/audio.c */

46 static struct audio_driver *drvtab[] = {
47 #ifdef CONFIG_SPICE
48     &spice_audio_driver,
49 #endif
50     CONFIG_AUDIO_DRIVERS
51     &no_audio_driver,
52     &wav_audio_driver
53 };

虛擬機啟動的時候會調用audio/audio.c:audio_init():
static void audio_init (void)
{
    ...
    drvname = audio_get_conf_str ("QEMU_AUDIO_DRV", NULL, &def);
    ...
    for (i = 0; i < ARRAY_SIZE (drvtab); i++) {
        if (!strcmp (drvname, drvtab[i]->name)) {
            done = !audio_driver_init (s, drvtab[i]);
            found = 1;
            break;
        }
    }
    ...
可以看到根據啟動虛擬機時設置的環境變量QEMU_AUDIO_DRV,確定audio driver的名字,然后遍歷drvtab確定是否支持這個backend driver。若支持調用audio_driver_init,這個就是基本的初始化流程。
qemu-system-x86_64 --audio-help
查看與audio相關的環境變量信息!
qemu-system-x86_64 -device ? 2>&1 | awk '/^Sound devices/,$1 !~ /^Sound|name/'
查看支持的虛擬音頻設備!
-device AC97,id=sound0,bus=pci.0,addr=0x6

Qemu中audio的源碼主要在兩個地方:

audio/*
hw/audio/*

audio/主要是audio的backend driver,audio/audio.c中定義的AUD_系列方法為Qemu的虛擬聲卡和Host backend audio driver的橋梁。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一.聲音參數基本概念: 聲音是連續模擬量,計算機將它離散化之后用數字表示,就有了以下幾個名詞術語。 樣本長度(sa...
    cs1001閱讀 2,785評論 0 2
  • virtio Virtio是IO虛擬化中的一個優化方案,屬于para-virtulization的一種實現,即Gu...
    goldhorn閱讀 9,016評論 2 10
  • 第一章 OpenStack基礎 OpenStack管理的資源及提供的服務OpenStack做為一個操作系統,...
    sgt_tiger閱讀 13,031評論 4 72
  • 教程一:視頻截圖(Tutorial 01: Making Screencaps) 首先我們需要了解視頻文件的一些基...
    90后的思維閱讀 4,749評論 0 3
  • 今天早上起來閨女說不想吃早飯,我就跟她說;“早晨的這頓飯必須吃,吃好啦早飯才能注意力集中,要不然上午9:00就餓啦...
    耿鈺茜媽媽閱讀 104評論 0 0