CRI ADX  Last Updated: 2024-09-25 17:41 p
ストリーミングが動作しているかを確認する

問題の原因を切り分ける

ストリーミング再生の音声で何かしらの問題が発生した際、原因をストリーミングと決め付けず、 まずは問題の原因を切り分けてください。
可能であれば、ストリーミング設定のデータをメモリ再生に切り替えてデータをビルドしなおし、 症状が再現するかを確認してください。
症状が再現すれば、原因はストリーミングではなく、ADXの他の機能が問題の原因だとわかります。 この場合は、メモリ再生に切り替えた状態のまま、トラブルシューティングの内容を確認しなおしてください。
一方、メモリ再生に切り替える事で症状が再現しなくなった場合は、 ストリーミングが問題の原因である可能性が高いです。 以下の内容にしたがって、ストリーミングに問題が無いかを確認してください。

ストリーミングバッファのデータ残量を取得する

何か問題が起きたとき、ストリーミングバッファのデータ残量の動きを調べる事で、原因を特定できる場合があります。 criAtomPlayer_GetInputBufferRemainSize 関数を使うことで、ストリーミングバッファのデータ残量を確認できます。 具体的な使い方の例については バッファリング量の取得 を参照してください。
通常、ストリーミングデータの再生中にストリーミングバッファのデータ残量がゼロになる事はありません。 ストリーミング再生中にストリーミングバッファのデータ残量がゼロになる場合は、 ストリーミング読み込みを何かが阻害しているか、 またはADXのオーディオ処理が定期的に動作できていない可能性があります。

ストリーミング読み込みの阻害

ストリーミング再生では、その時必要な分のデータを記録メディアから逐次読み込んでいます。 再生中に記録メディアへアクセスできない状態が続くと、 データの供給が途絶えてしまい、音声が途切れてしまいます。
ADXが記録メディアへアクセスできなくなる原因は以下の通りです。
  1. 光学メディアの場合、ディスクイジェクトされている。
  2. ネットワークストリーミングの場合、通信が途切れている、サーバーが落ちている。
  3. アプリケーションがCRI File SystemのAPIを使わずに独自にデータ読み込み/データ書き込みを行っている。
  4. ADXのオーディオ処理が動作できていない。
  5. アプリケーションがCRI File SystemのAPIを使ってデータを読み込んだ際に、ロード完了コールバック内でブロックしている。

ディスクイジェクト

ディスクが抜き取られていたり、記録メディアが取り外されている場合は、当然ですがデータの読み込みは途切れてしまいます。 ディスクイジェクト状態でのアプリケーション側のエラーハンドリングについては、各プラットフォームの開発ガイドラインに則ってください。 システムがアプリケーションを強制終了するプラットフォームもありますし、ディスクを再挿入すると自動的に復帰するプラットフォームもあります。

通信切断/サーバーダウン

通信が切断されている、もしくはサーバーダウンしている状況かどうかをADXを経由して判断する事はできません。 通信切断の原因や、サーバー側がダウンしているかどうかは、一般的なネットワーク検証ツールを使って確認してください。

アプリケーション独自のデータ読み込み/書き込み

アプリケーションがCRI File System の APIを使わず、独自にデータの読み込み/書き込みを行っている場合は、 CRI File System のAPIを使うように修正してください。
一般的に、一つの記録メディアに対して一度にアクセス可能なプロセス/スレッドは一つまでです。 同時に複数のリード/ライト要求が一つの記録メディアに発生した場合、システムが要求をシーケンシャルに実行します。
CRI File System の APIを使ってデータの読み込み/書き込みを行う場合、 CRI File System ライブラリは要求に優先度を設定し、さらに要求を一定サイズで分割して実行します。 そのため、アプリケーションがCRI File System の APIを使って大きなサイズのデータ読み込みを要求しても、 ストリーミング読み込みがアプリケーションが要求したデータ読み込みに割り込んで優先的に動作します。
一方、アプリケーションがCRI File System の APIを使わず、独自にデータの読み込み/書き込みを行うと、 読み込み/書き込み要求の優先度付け、要求サイズの分割処理等が働きません。 そのため、アプリケーションが大きなサイズのデータ読み込みを要求した場合、 そのデータ読み込みが完了するまでADXのストリーミング読み込みが長時間待たされてしまい、 データの供給が途切れてしまいます。

ADXのオーディオ処理が動作できない

ADXのオーディオ処理が動作できていない場合、 ストリーミング読み込みの完了確認やストリーミングバッファの状態更新が行われなくなるため、 データの供給が途切れている状態と同じ状態に陥ります。
この場合に該当しているかどうかは、 サーバー処理の実行調査 を参考にして確認してください。

CRI File System のロード完了をコールバックをブロックしている

アプリケーション側から登録したロード完了コールバック関数の実装を確認し、 無限ループやスレッドロック、長時間のスレッドスリープを行うような実装になっていないか確認してください。
CRI File System ライブラリのローダーを使ってデータをロードする際に、ロード完了コールバックを登録しておくことで、 ロード完了をステータスポーリングではなくコールバックで検知する事ができます。
このとき、無限ループしたり、長時間スレッドスリープするような、 処理が終わるまでに時間がかかるような関数をアプリケーションがロード完了コールバックに登録した場合、 その関数が終了するまで、それ以降のロード要求は待たされてしまいます。 待たされるロード要求は、ADXが内部的に発行するストリーミング読み込みのロード要求も例外ではありません。

上記で解決しない場合

上記の調査で解決しない場合は、原因不明ですが、ADXのストリーミング読み込みを阻害している要因があるかもしれません。 その場合は、CRI File Systemライブラリのファイルアクセスログ機能を使い、ファイルアクセスログを取得してください。
ファイルアクセスログの取得方法については、 CRI File System「ファイルマジックPRO」マニュアル内、「チュートリアル5:ファイルアクセスログの出力」と、 「ファイルアクセスログビューア」を参照してください。