2012-10-20 53 views
2

我的hw:1,0是僅播放外部USB卡。錄製應用程序無法捕獲發送到hw:1,0的樣本,如果它嘗試打開hw:1,0進行捕獲。 alsamixer沒有爲hw:1,0提供任何「[Capture]」選項 - 只有「[Playback]」選項卡上的一個音量控制。使用ALSA在播放專用聲卡上捕捉播放

是否有可能創建一些虛擬的「xxx」設備,它將接受來自應用程序的流並通過2個流(副本)發送出去 - 第一個到真正的「hw:1,0」(到我的耳機)第二個到另一個虛擬設備「zzz」,它將提供捕獲能力,將該流提供給可打開「zzz」以捕獲的應用程序?

更新

我加ALSA迴環設備在內核,現在我有迴環設備。然後我發現工作.asoundrc(見下文),但是當我使用ffmpeg捕獲屏幕+聲音時,聲音比視頻更糟糕,這是一個很大的同步問題。因此,使用這個.asoundrc(下面)我可以使用hw:0,0(loopback device,hw:0,0 - play,hw:0,1 - capture)捕獲我發送給「默認」的內容。我也可以通過我的外部USB hw:2,0聽到這些示例。

ffmpeg的命令:

ffmpeg -f alsa -i hw:0,1 -f x11grab -s 854x480 -r 30 -i :0.0 -vcodec libx264 -vb 4000k /tmp/screen_854x480.avi 

.asoundrc:

pcm.!default { 
    type plug 
    slave.pcm "mdev" 
    route_policy "duplicate" 

} 

pcm.mdev { 
    type multi 

    slaves.a.pcm "hw:Loopback,0,0" 
    slaves.a.channels 2 
    slaves.b.pcm "dmixer" 
    slaves.b.channels 2 

    bindings.0.slave a 
    bindings.0.channel 0 
    bindings.1.slave a 
    bindings.1.channel 1 
    bindings.2.slave b 
    bindings.2.channel 0 
    bindings.3.slave b 
    bindings.3.channel 1 
} 

pcm.dmixer { 
    type dmix 
    ipc_key 1024 
    slave { 
      pcm "hw:2,0" 
      period_time 0 
      period_size 1024 
      buffer_size 4096 
      rate 44100 
      channels 2 
      format S16_LE 
    } 
} 

回答

1

,能夠創建一個重新路由回放數據恢復到捕獲裝置回送裝置:
Alsa Loopback Devices for Fun, but not yet profit...
ALSA Loopback for Fun and Profit

也可以創建一個使用multi plugin輸出到多個設備的虛擬設備。

嘗試是這樣的:

pcm.xxx { 
    type plug  # <-- no { here 
    slave.pcm { 
     type multi 
     slaves { 
      a { channels 2 pcm "hw:1,0" } # the real device 
      b { channels 2 pcm "hw:5,0" } # the loopback driver 
     } 
     bindings { 
      0 { slave a channel 0 } 
      1 { slave a channel 1 } 
      2 { slave b channel 0 } 
      3 { slave b channel 1 } 
     } 
    } 
    ttable [ 
     [ 1 0 1 0 ] # left -> a.left, b.left 
     [ 0 1 0 1 ] # right -> a.right, b.right 
    ] 
} 
+0

ALSA lib中conf.c:1686:(snd_config_load1)_toplevel_:4:9:意外的字符 ALSA lib中conf.c:3406:(config_file_open)/家庭/ XX /.asoundrc可能已老化或已損壞:請考慮刪除或修復它 – pavelkolodin

+0

糟糕,'plug'後面有一個多餘的大括號。 –

+0

謝謝!現在我正在努力解決ffmpeg中的同步問題:) – pavelkolodin