enum pa_stream_state_t | ストリームの状態 |
---|---|
struct pa_buffer_attr | バッファ属性構造体 |
struct pa_timing_info | タイミング情報 |
コールバック関数 | |
pa_stream_success_cb_t | 成功時 |
pa_stream_request_cb_t | 要求 |
pa_stream_notify_cb_t | 通知 |
pa_stream_event_cb_t | イベント |
enum pa_stream_state_t
ストリームの状態。
PA_STREAM_UNCONNECTED | ストリームはまだ、シンクまたはソースに接続されていない |
---|---|
PA_STREAM_CREATING | ストリームを作成中 |
PA_STREAM_READY | ストリームが準備できた。オーディオデータを渡すことができる。 |
PA_STREAM_FAILED | ストリームが無効になるエラーが発生した |
PA_STREAM_TERMINATED | ストリームは正常に終了した |
typedef struct pa_buffer_attr { uint32_t maxlength; uint32_t tlength; uint32_t prebuf; uint32_t minreq; uint32_t fragsize; } pa_buffer_attr;
バッファ属性構造体
maxlength
バッファの最大バイト数。
(uint32_t)-1 に設定すると、サーバーでサポートされている最大値に初期化される(推奨)。
厳密に低遅延で再生したい場合、ストリームで PA_STREAM_ADJUST_LATENCY フラグを指定して、これをより低い値に設定すると、良い場合がある。
これを行うと、レイテンシが、許容できる範囲を超えて増加しないようにすることができるが、レイテンシが、サーバーが確実に処理できる範囲よりも低い場合は、アンダーランが増える。
(uint32_t)-1 に設定すると、サーバーでサポートされている最大値に初期化される(推奨)。
厳密に低遅延で再生したい場合、ストリームで PA_STREAM_ADJUST_LATENCY フラグを指定して、これをより低い値に設定すると、良い場合がある。
これを行うと、レイテンシが、許容できる範囲を超えて増加しないようにすることができるが、レイテンシが、サーバーが確実に処理できる範囲よりも低い場合は、アンダーランが増える。
tlength
(再生のみ)バッファのターゲットのバイト数。
サーバは、ストリームごとのサーバ側の再生バッファで、少なくとも tlength バイトが、常に使用可能であることを保証しようとする。
バッファのデータバイト数が、この数より少ない場合、サーバは追加のデータ要求のみを送信する。
(uint32_t)-1 に設定することが推奨される。これにより、サーバが適切とみなす値に初期化される。
ただし、この値はデフォルトで2秒程度になる。
特定のレイテンシ要件を持つアプリケーションの場合、この値は、アプリケーションが処理できる最大レイテンシに設定する必要がある。
PA_STREAM_ADJUST_LATENCY フラグが設定されていない場合、この値はストリームごとの再生バッファサイズにのみ影響する。
PA_STREAM_ADJUST_LATENCY が設定されている場合、シンクの全体的なレイテンシと、再生バッファサイズが、この値に設定される。
サーバは、ストリームごとのサーバ側の再生バッファで、少なくとも tlength バイトが、常に使用可能であることを保証しようとする。
バッファのデータバイト数が、この数より少ない場合、サーバは追加のデータ要求のみを送信する。
(uint32_t)-1 に設定することが推奨される。これにより、サーバが適切とみなす値に初期化される。
ただし、この値はデフォルトで2秒程度になる。
特定のレイテンシ要件を持つアプリケーションの場合、この値は、アプリケーションが処理できる最大レイテンシに設定する必要がある。
PA_STREAM_ADJUST_LATENCY フラグが設定されていない場合、この値はストリームごとの再生バッファサイズにのみ影響する。
PA_STREAM_ADJUST_LATENCY が設定されている場合、シンクの全体的なレイテンシと、再生バッファサイズが、この値に設定される。
prebuf
(再生のみ)プリバッファリングのバイト数。
バッファで、少なくとも prebuf バイト数が使用可能になるまで、サーバーは再生を開始しない。
(uint32_t)-1 に設定することが推奨される。これにより、tlength と同じ値に初期化される (tlength が何であれ)。
ストリームを手動で開始/停止させるには、0 に初期化する。
その場合、ストリームの接続時に PA_STREAM_START_CORKED を設定して、停止状態にすること。
アンダーラン時は、自動で再生が停止せず、自動的に開始もされないので、pa_stream_cork() を明示的に呼び出す必要がある。
アンダーランが発生すると、出力バッファの読み取り位置が書き込み位置を追い越し、バッファのフィルレベルが負になる。
pa_stream_trigger() を使用した場合、プリバッファのサイズに達していなくても、再生を強制的に開始できる。
なお、バッファアンダーランが発生した場合は、プリバッファリングが再び有効になる。
バッファで、少なくとも prebuf バイト数が使用可能になるまで、サーバーは再生を開始しない。
(uint32_t)-1 に設定することが推奨される。これにより、tlength と同じ値に初期化される (tlength が何であれ)。
ストリームを手動で開始/停止させるには、0 に初期化する。
その場合、ストリームの接続時に PA_STREAM_START_CORKED を設定して、停止状態にすること。
アンダーラン時は、自動で再生が停止せず、自動的に開始もされないので、pa_stream_cork() を明示的に呼び出す必要がある。
アンダーランが発生すると、出力バッファの読み取り位置が書き込み位置を追い越し、バッファのフィルレベルが負になる。
pa_stream_trigger() を使用した場合、プリバッファのサイズに達していなくても、再生を強制的に開始できる。
なお、バッファアンダーランが発生した場合は、プリバッファリングが再び有効になる。
minreq
(再生のみ)最小要求。
サーバーは、クライアントから minreq バイト未満のデータ要求は行わず、バッファが十分に空いて、一度に多くのバイトを要求できるようになるまで、待機する。
(uint32_t) -1 に設定することが推奨される。これにより、サーバーが適切と判断する値に初期化される。
これは、PulseAudio が、ストリームごとの再生バッファから、ハードウェアの再生バッファにデータを移動するのに、十分な時間を与える値に設定する必要がある。
サーバーは、クライアントから minreq バイト未満のデータ要求は行わず、バッファが十分に空いて、一度に多くのバイトを要求できるようになるまで、待機する。
(uint32_t) -1 に設定することが推奨される。これにより、サーバーが適切と判断する値に初期化される。
これは、PulseAudio が、ストリームごとの再生バッファから、ハードウェアの再生バッファにデータを移動するのに、十分な時間を与える値に設定する必要がある。
fragsize
(録音のみ)フラグメントサイズ。
サーバーは、fragsize バイトサイズのブロックでデータを送信する。
値が大きいと、接続コンテキストでの、他の操作との対話性が低下するが、制御オーバーヘッドは減少する。
(uint32_t)-1 に設定することを推奨する。これにより、サーバーが適切と判断する値に初期化される。
ただし、この値は、デフォルトで2秒程度になる。
特定のレイテンシ要件を持つアプリケーションの場合、この値は、アプリケーションが処理できる最大レイテンシに設定する必要がある。
PA_STREAM_ADJUST_LATENCY フラグが設定されている場合、全体的なソースのレイテンシは、この値に従って調整される。
設定されていない場合、ソースのレイテンシは変更されない。
サーバーは、fragsize バイトサイズのブロックでデータを送信する。
値が大きいと、接続コンテキストでの、他の操作との対話性が低下するが、制御オーバーヘッドは減少する。
(uint32_t)-1 に設定することを推奨する。これにより、サーバーが適切と判断する値に初期化される。
ただし、この値は、デフォルトで2秒程度になる。
特定のレイテンシ要件を持つアプリケーションの場合、この値は、アプリケーションが処理できる最大レイテンシに設定する必要がある。
PA_STREAM_ADJUST_LATENCY フラグが設定されている場合、全体的なソースのレイテンシは、この値に従って調整される。
設定されていない場合、ソースのレイテンシは変更されない。
typedef struct pa_timing_info { struct timeval timestamp; int synchronized_clocks; pa_usec_t sink_usec; pa_usec_t source_usec; pa_usec_t transport_usec; int playing; int write_index_corrupt; int64_t write_index; int read_index_corrupt; int64_t read_index; pa_usec_t configured_sink_usec; pa_usec_t configured_source_usec; int64_t since_underrun; } pa_timing_info;
ストリームのタイミング情報。
pa_stream_write() で書き込まれたサンプルが再生されるまでにかかる、合計出力レイテンシは、sink_usec + buffer_usec + transport_usec で計算できる。
(buffer_usec は、pa_bytes_to_usec(write_index - read_index, ss) で、バイト数を時間に変換できる)
buffer_usec が関係する出力バッファは、自由に操作できる。
sink_usec および source_usec が関係するバッファは、先入れ先出し (FIFO) バッファであり、フラッシュしたり操作したりすることはできない。
録音されたサンプルが、アプリケーションに配信されるまでにかかる、合計入力レイテンシは、source_usec + buffer_usec + transport_usec - sink_usec。
モニターソースに接続した場合、sink_usec には、所有シンクのレイテンシが含まれる。
上記のレイテンシの推定は、pa_stream_get_latency() で取得できる。
特に明記されていない限り、すべての時間値は、サウンドカードクロックドメインにある。
サウンドカードクロックは通常、システムクロックとはわずかに異なる速度で動作している。
pa_stream_write() で書き込まれたサンプルが再生されるまでにかかる、合計出力レイテンシは、sink_usec + buffer_usec + transport_usec で計算できる。
(buffer_usec は、pa_bytes_to_usec(write_index - read_index, ss) で、バイト数を時間に変換できる)
buffer_usec が関係する出力バッファは、自由に操作できる。
sink_usec および source_usec が関係するバッファは、先入れ先出し (FIFO) バッファであり、フラッシュしたり操作したりすることはできない。
録音されたサンプルが、アプリケーションに配信されるまでにかかる、合計入力レイテンシは、source_usec + buffer_usec + transport_usec - sink_usec。
モニターソースに接続した場合、sink_usec には、所有シンクのレイテンシが含まれる。
上記のレイテンシの推定は、pa_stream_get_latency() で取得できる。
特に明記されていない限り、すべての時間値は、サウンドカードクロックドメインにある。
サウンドカードクロックは通常、システムクロックとはわずかに異なる速度で動作している。
timestamp
このタイミング情報構造が最新であったときの、システムクロック時間。
synchronized_clocks
ローカルマシンとリモートマシンのクロックが同期している場合は、0 以外。
同期クロックが検出されると、transport_usec の信頼性が大幅に高まる。
ただし、同期クロックを検出するコードは非常に制限されており、それ自体は信頼性がない。
同期クロックが検出されると、transport_usec の信頼性が大幅に高まる。
ただし、同期クロックを検出するコードは非常に制限されており、それ自体は信頼性がない。
sink_usec
シンクでサンプルを再生するのにかかる時間 (マイクロ秒)。
記録ストリーム、および、モニターソースに接続された再生ストリーム用。
記録ストリーム、および、モニターソースに接続された再生ストリーム用。
source_usec
サンプルが録音されてから、アプリケーションに配信されるまでにかかる時間 (マイクロ秒)。
録音ストリームのみ。
録音ストリームのみ。
transport_usec
サンプルがデーモンとの間で転送されるのにかかる推定時間 (マイクロ秒)。
再生ストリームと記録ストリームの両方に適用される。
再生ストリームと記録ストリームの両方に適用される。
playing
ストリームが現在アンダーランしておらず、データがデバイス (シンク/ソース) に渡されている場合は、0 以外。
再生ストリームのみ。
なお、データが実際にすでに再生されているかどうかを示すものではない。
これを判断するには、since_underrun の値をマイクロ秒に変換し、sink_usec より値が大きいかどうかを確認する。
再生ストリームのみ。
なお、データが実際にすでに再生されているかどうかを示すものではない。
これを判断するには、since_underrun の値をマイクロ秒に変換し、sink_usec より値が大きいかどうかを確認する。
write_index_corrupt
この情報が最新になった後に書き込みが行われ、write_index が破損したことにより、write_index が最新でない場合は、0 以外。
SEEK_RELATIVE_ON_READ および SEEK_RELATIVE_END での書き込み時のみ、write_index を破損する可能性がある。
SEEK_RELATIVE_ON_READ および SEEK_RELATIVE_END での書き込み時のみ、write_index を破損する可能性がある。
write_index
再生バッファへの現在の書き込み位置(バイト単位)。
シーク目的で使う場合は、代わりに PA_SEEK_RELATIVE を使用すること。
シーク目的で使う場合は、代わりに PA_SEEK_RELATIVE を使用すること。
read_index_corrupt
この情報が最新になってから、一時停止またはフラッシュ要求が発行されて、read_index が破損したため、read_index が最新でない場合は、0 以外。
read_index
再生バッファへの現在の読み取り位置(バイト単位)。
シーク目的で使う場合は、代わりに PA_SEEK_RELATIVE_ON_READ を使用すること。
シーク目的で使う場合は、代わりに PA_SEEK_RELATIVE_ON_READ を使用すること。
configured_sink_usec
シンクに設定された遅延。
configured_source_usec
ソースに設定された遅延。
since_underrun
最後のアンダーランが発生してから、または、最後のアンダーラン後に再生が再開されてから、シンクに渡されたバイト数。
playing によって、どちらのケースであるかわかる。
playing によって、どちらのケースであるかわかる。
コールバック関数
typedef void (*pa_stream_event_cb_t)(pa_stream *p, const char *name, pa_proplist *pl, void *userdata);
イベントメッセージのコールバック。
よく知られているイベント名は、PA_STREAM_EVENT_REQUEST_CORK と PA_STREAM_EVENT_REQUEST_UNCORK。
定義されたイベントのセットは、いつでも拡張できる。
また、サーバーモジュールによって、追加のメッセージタイプが導入される可能性があるため、コールバック関数が認識していないメッセージは無視するようにすること。
よく知られているイベント名は、PA_STREAM_EVENT_REQUEST_CORK と PA_STREAM_EVENT_REQUEST_UNCORK。
定義されたイベントのセットは、いつでも拡張できる。
また、サーバーモジュールによって、追加のメッセージタイプが導入される可能性があるため、コールバック関数が認識していないメッセージは無視するようにすること。