Kinesis Video Streams のトラブルシューティング - Amazon Kinesis Video Streams

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Kinesis Video Streams のトラブルシューティング

次の情報を使用して、Amazon Kinesis Video Streams で発生する一般的な問題をトラブルシューティングします。

一般的な問題のトラブルシューティング

このセクションでは、Kinesis Video Streams を操作するときに発生する可能性がある一般的な問題について説明します。

レイテンシーが高すぎる

レイテンシーは、Kinesis Video Streams サービスに送信されるフラグメント継続時間が原因で発生する場合があります。プロデューサーとサービスの間のレイテンシーを減らす方法の 1 つとして、より短いフラグメント継続時間を作成するようにメディアパイプラインを設定します。

各フラグメントで送信されるフレーム数を減らすには、以下の値を減らします。kinesis_video_gstreamer_sample_app.cpp

g_object_set(G_OBJECT (data.encoder), "bframes", 0, "key-int-max", 45, "bitrate", 512, NULL);
注記

Mozilla Firefox ブラウザではビデオレンダリングを内部実装しているため、レイテンシーが高くなります。

API の問題のトラブルシューティング

このセクションでは、Kinesis Video Streams を操作するときに発生する可能性がある API の問題について説明します。

エラー:「未知のオプション」

GetMediaGetMediaForFragmentList は、次のエラーで失敗する場合があります。

Unknown options: <filename>.mkv

このエラーは、 AWS CLI outputをタイプで設定した場合に発生しますjson。をデフォルトの出力タイプ (none) AWS CLI で再設定します。の設定方法については AWS CLI、『AWS CLI コマンドリファレンスの「configure」を参照してください。

エラー: "承認するサービス/オペレーション名を特定できませんでした"

GetMedia は、次のエラーで失敗する場合があります。

Unable to determine service/operation name to be authorized

このエラーが発生する可能性があるのは、エンドポイントが適切に指定されていない場合です。エンドポイントを取得するときは、呼び出す API に応じて、GetDataEndpoint必ず次のパラメータを呼び出しに含めてください。

--api-name GET_MEDIA --api-name PUT_MEDIA --api-name GET_MEDIA_FOR_FRAGMENT_LIST --api-name LIST_FRAGMENTS

エラー: "ストリームにフレームを配置できませんでした"

PutMedia は、次のエラーで失敗する場合があります。

Failed to put a frame in the stream

このエラーが発生する可能性があるのは、サービスで接続またはアクセス許可が利用できない場合です。で以下を実行し AWS CLI、ストリーム情報を取得できることを確認します。

aws kinesisvideo describe-stream --stream-name StreamName --endpoint https://ServiceEndpoint.kinesisvideo.region.amazonaws.com

コールが失敗した場合、詳細については「AWS CLI エラーのトラブルシューティング」を参照してください。

エラー:「 AckEvent 最終通知を受信する前にサービスが接続を終了しました」

PutMedia は、次のエラーで失敗する場合があります。

com.amazonaws.SdkClientException: Service closed connection before final AckEvent was received

このエラーが発生する可能性があるのは、PushbackInputStream が不適切に実装されている場合です。unread()メソッドが正しく実装されていることを確認してください。

エラー: 「STATUS_STORE_OUT_OF_MEMORY」

PutMedia は、次のエラーで失敗する場合があります。

The content store is out of memory.

コンテンツストアに十分なサイズが割り当てられていない場合、このエラーが発生します。コンテンツストアのサイズを増やすには、StorageInfo.storageSize の値を増やします。詳細については、「StorageInfo」を参照してください。

HLS 問題のトラブルシューティング

ビデオストリームが正しく再生されない場合は、を参照してくださいHLS 問題のトラブルシューティング

Java の問題のトラブルシューティング

このセクションでは、Kinesis Video Streams を操作するときに発生する一般的な Java の問題のトラブルシューティング方法について説明します。

Java ログの有効化

Java サンプルやライブラリに関する問題をトラブルシューティングするには、デバッグログを有効にして調べると便利です。デバッグログを有効にするには、次の操作を行います。

  1. log4jpom.xml ノードの dependencies ファイルに追加します。

    <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
  2. target/classes ディレクトリで、次の内容で log4j.properties というファイルを作成します。

    # Root logger option log4j.rootLogger=DEBUG, stdout # Redirect log messages to console log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n log4j.logger.org.apache.http.wire=DEBUG

デバッグログが、IDE コンソールに出力されます。

プロデューサーライブラリの問題のトラブルシューティング

このセクションでは、プロデューサーライブラリ を使用するときに発生する可能性がある問題について説明します。

問題

プロデューサー SDK をコンパイルできない

パスに必要なライブラリがあることを確認します。これを確認するには、次のコマンドを使用します。

$ env | grep LD_LIBRARY_PATH LD_LIBRARY_PATH=/home/local/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/lib

ビデオストリームはコンソールには表示されません。

コンソールでビデオストリームを表示するには、H.264 を使用して AvCC 形式でエンコードする必要があります。ストリームが表示されない場合は、以下の点を確認してください。

  • 元のストリームが Annex-B 形式である場合、NAL 適応フラグNAL_ADAPTATION_ANNEXB_NALS | NAL_ADAPTATION_ANNEXB_CPD_NALS に設定されている。これは StreamDefinition コンストラクタのデフォルト値です。

  • コーデックのプライベートデータを正しく提供しています。H.264 では、これはシーケンスパラメータセット (SPS) とピクチャパラメータセット (PPS) です。メディアソースに応じて、このデータはメディアソースから個別に取得されるか、フレームにエンコードされています。

    多くの基本ストリームの形式は次のとおりです。ここで、Ab は Annex-B の開始コード (001 または 0001) です。

    Ab(Sps)Ab(Pps)Ab(I-frame)Ab(P/B-frame) Ab(P/B-frame)…. Ab(Sps)Ab(Pps)Ab(I-frame)Ab(P/B-frame) Ab(P/B-frame)

    H.264 が SPS および PPS としてストリームに含まれている場合は、CPD (コーデックプライベートデータ) を aVCC 形式に適合させることができます。メディアパイプラインが個別に CPD を提供しない限り、アプリケーションは最初の Idrフレーム(SPSとPPSを含むはずです)を探してフレームからCPDを抽出し、2つのNALU(Ab(Sps)Ab(Pps)))を抽出し、それをCPDに設定できますStreamDefinition

エラー: GStreamer デモアプリケーションを使用したデータのストリーミング時の "リクエストに含まれているセキュリティトークンが無効です"

このエラーが発生した場合は、認証情報に問題があります。以下について確認します。

  • 一時的なセキュリティ認証情報を使用している場合は、セッショントークンを指定する必要があります。

  • 一時的な認証情報が失効していないことを確認します。

  • 適切な権限が設定されていることを確認します。

  • macOS では、Keychain にキャッシュされた認証情報がないことを確認します。

エラー: 「Kinesis Video クライアントにフレームを送信できませんでした」

このエラーが発生した場合、タイムスタンプはソースストリームに正しく設定されません。次の操作を試してください:

  • この問題を解決する最新の SDK サンプルを使用してください。

  • 高品質のストリームをより高いビットレートに設定し、カメラがサポートしている場合はソースストリームのジッターを修正します。

GStreamer アプリケーションが、OS X で "ストリーミングが中止されました。ネゴシエーションされていないという理由です" というメッセージで停止する

OS X では、ストリーミングが停止し、次のメッセージが表示される場合があります。

Debugging information: gstbasesrc.c(2939): void gst_base_src_loop(GstPad *) (): /GstPipeline:test-pipeline/GstAutoVideoSrc:source/GstAVFVideoSrc:source-actual-src-avfvide: streaming stopped, reason not-negotiated (-4)

これを回避するには、コールインからフレームレートパラメータを削除することが考えられます。gst_caps_new_simple kinesis_video_gstreamer_sample_app.cpp

GstCaps *h264_caps = gst_caps_new_simple("video/x-h264", "profile", G_TYPE_STRING, "baseline", "stream-format", G_TYPE_STRING, "avc", "alignment", G_TYPE_STRING, "au", "width", GST_TYPE_INT_RANGE, 320, 1920, "height", GST_TYPE_INT_RANGE, 240, 1080, "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 30, 1, NULL);

エラー: Raspberry Pi の GStreamer デモで Kinesis ビデオクライアントを作成するときの "ヒープを割り当てできませんでした"

GStreamer サンプルアプリケーションは、512 MB の RAM を割り当てようとしますが、これがシステムで使用できない場合があります。KinesisVideoProducer.cpp で次の値を減らすことによって、この割り当てを減らすことができます。

device_info.storageInfo.storageSize = 512 * 1024 * 1024;

エラー: Raspberry Pi での GStreamer デモの実行時の "無効な命令"

GStreamer デモの実行中に次のエラーが発生した場合は、アプリケーションを正しいバージョンのデバイス用にコンパイルしたかどうかを確認してください。(たとえば、Raspberry Pi 2 で実行しているときは、Raspberry Pi 3 用にコンパイルしていないことを確認してください)。

INFO - Initializing curl. Illegal instruction

カメラで Raspberry Pi のロードに失敗する

カメラがロード済みかどうか確認するには、次のコマンドを実行します。

$ ls /dev/video*

何も見つからない場合は、次のコマンドを実行します。

$ vcgencmd get_camera

出力は次の例に類似したものになります:

supported=1 detected=1

ドライバでカメラが検出されない場合は、次のコマンドを実行します。

  1. 物理的なカメラの設定を確認し、適切に接続されていることを確認します。

  2. 以下を実行してファームウェアをアップグレードします。

    $ sudo rpi-update
  3. デバイスを再起動します。

  4. 以下を実行してドライバをロードします。

    $ sudo modprobe bcm2835-v4l2
  5. カメラが検出されたことを確認します。

    $ ls /dev/video*

カメラが macOS High Sierra で見つからない

macOS High Sierra で複数のカメラが利用できる場合、デモアプリケーションはカメラを見つけることができません。

macOS High Sierra でコンパイルするときに、jni.h ファイルが見つかりません

このエラーを解決するには、Xcode のインストールを最新バージョンに更新してください。

GStreamer デモアプリケーションを実行中の Curl エラー

エラーを解決するには、GStreamer デモアプリケーションを実行するとき、この証明書ファイル/etc/ssl/cert.pem にコピーします。

Raspberry Pi での実行時のタイムスタンプ/範囲アサーション

実行時にタイムスタンプの範囲アサーションが発生した場合は、ファームウェアを更新し、デバイスを再起動します。

$ sudo rpi-update $ sudo reboot

Raspberry Pi の gst_value_set_fraction_range_full でのアサーション

uv4l サービスが実行中の場合は、次のアサーションが表示されます。

gst_util_fraction_compare (numerator_start, denominator_start, numerator_end, denominator_end) < 0' failed

これが発生した場合は、uv4l サービスを停止し、アプリケーションを再起動します。

Android での STATUS_MKV_INVALID_ANNEXB_NALU_IN_FRAME_DATA(0x3200000d) エラー

メディア・ストリームの NAL 適応フラグ が間違っている場合、次のエラーが表示されます。​

putKinesisVideoFrame(): Failed to put a frame with status code 0x3200000d

このエラーが発生した場合は、メディアの .withNalAdaptationFlags フラグを正しく入力します (例 : NAL_ADAPTATION_ANNEXB_CPD_NALS)。このフラグを Android プロデューサーライブラリ​ の次の行に入力します。

https://github.com/awslabs/ aws-sdk-android-samples /blob/master/ /src/main/java/com/amazonaws/kinesisvideo/demoapp/fragment/ .java #L169 AmazonKinesisVideoDemoApp StreamConfigurationFragment

「フラグメントの最大持続時間に達しました」というエラー

このエラーは、ストリーム内のメディアフラグメントが最大フラグメント継続期間の制限を超えると発生します。セクションの最大フラグメント期間の制限を参照してください。メディアおよびアーカイブメディア API サービスクォータ

この問題を解決するには、以下の手順を実行します。

  • ウェブカメラ/USB カメラを使用している場合は、次のいずれかの操作を行います。

    • キーフレームベースのフラグメンテーションを使用している場合は、10 秒以内にキーフレームを提供するようにエンコーダーを設定します。

    • キーフレームベースのフラグメンテーションを使用していない場合は、ストリームを定義するときに、フラグメントの最大継続時間制限を 10 秒未満の値に設定します。ステップ 2: コードを記述し、コードを実行する

    • GStreamer パイプラインでソフトウェアエンコーダー (x264 など) を使用している場合は、属性を 10 秒以内の値に設定できます。 key-int-max たとえば、60 key-int-max に設定し、fps を 30 に設定すると、2 秒ごとにキーフレームが有効になります。

  • RPI カメラを使用している場合は、キーフレーム間隔属性を 10 秒未満に設定します。

  • IP (RTSP) カメラを使用している場合は、GOP サイズを 60 に設定します。

IoT 認証の使用中に "無効なモノの名前が渡されました (Invalid thing name passed)" エラーが発生

認証に IoT 認証情報を使用しているときにこのエラー (HTTP Error 403: Response: {"message":"Invalid thing name passed"}) が発生しないようにするには、stream-name (kvssink要素の必須パラメーター) の値がの値と同じであることを確認してくださいiot-thingname。詳細については、「GStreamer 要素パラメータリファレンス」を参照してください。

ストリーム・パーサー・ライブラリの問題のトラブルシューティング

このセクションでは、ストリームパーサーライブラリ を使用するときに発生する可能性がある問題について説明します。

ストリームから 1 つのフレームにアクセスできない

コンシューマーアプリケーションのストリーミングソースから 1 つのフレームにアクセスするには、ストリームに正しいコーデックプライベートデータが含まれていることを確認してください。ストリームのデータの形式の詳細については、「データモデル」を参照してください。

コーデックのプライベートデータを使用してフレームにアクセスする方法については、 GitHub Web サイトにある次のテストファイル (.java) を参照してください。KinesisVideoRendererExampleTest

フラグメントのデコードエラー

フラグメントが H.264 フォーマットで適切にエンコードされておらず、ブラウザがサポートしているレベルである場合、コンソールでストリームを再生するときに次のエラーが表示されることがあります。

Fragment Decoding Error There was an error decoding the video data. Verify that the stream contains valid H.264 content

このような場合は、次の点を確認してください。

  • フレームの解像度が、コーデックのプライベートデータで指定された解像度に一致している。

  • エンコードされたフレームの H.264 プロファイルとレベルが、コーデックのプライベートデータで指定されたプロファイルとレベルに一致している。

  • ブラウザがプロファイル/レベルの組み合わせをサポートしている。現在のほとんどのブラウザは、すべてのプロファイルとレベルの組み合わせをサポートしています。

  • タイムスタンプは正確で正しい順序であり、重複するタイムスタンプは作成されない。

  • お使いのアプリケーションが H.264 形式を使用してフレームデータをエンコードしている。