2016-05-11 148 views
0

arm linux 3.10でalsaを使用しています。 3つのワイヤレスデバイスがあります。snd_pcm_readisendmsgを使用し、1つは受信者として、受信したものはsnd_pcm_writeiを使用して2つのキャプチャと送信のpcmがあります。alsa snd_pcm_writeiアンダーランエラー

手順は次のとおりです。 プログラムは1送信者と1受信者の間にうまく機能します。しかし、最初の送信者を停止して2番目の送信者を開始すると、受信者側はエラーを下回りました。各送信者に対して、受信者にはデータを処理するための一意のpcmハンドルがあります。そして、すべての側は同じ設定を使用しています。ただし、送信者ハンドルは名前がdefault[snd_pcm_open(pcm_handle, "default", stream,0)]で開き、受信者ハンドルはplug:dmixです。 [snd_pcm_open(pcm_handle, "plug:dmix", stream,0)]

while(1) 
{ 
    recv_from(); 
    if sender one or two's first packet 
    alsa init handle1 or handle2 
    int err = snd_pcm_writei(handle1 or 2, buffer, 224); 
    if(err == -EPIPE) 
    { 
    fprintf(stderr, "underrun occurred\n"); 
    snd_pcm_prepare(handle); 
    continue; 
    } 
} 

目的は、受信機は、両方の送信者のための混合音を再生することができるようにすることです。誰もがこれで私を助けることができる、私はalsaプログラミングに新しいです。前もって感謝します!

答えて

0

問題が見つかりました。構成のデフォルトの開始しきい値は1です。これを書込みフレームのn倍(n = 4は私が使用したものです)に設定すると、アンダーランの問題によりその発生がなくなります。数分で1回だけアンダーランが発生することがあります。だから私は問題は、サウンドカードは、バッファサイズが1(しきい値)より大きい間にフレームを取得しようとしていると仮定します。

関連する問題