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

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

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

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「_STOREOUT_OF_MEMORY」

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

The content store is out of memory.

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

エラー:「認証情報は有効なリージョンにスコープする必要があります。」

このエラーは、署名リージョンがエンドポイントリージョンと一致しない場合に発生します。

例えば、 を署名リージョンus-west-2として指定し、 kinesisvideo.us-east-1.amazonaws.com (us-east-1) エンドポイントに接続しようとすると、このエラーが発生します。

kvssink などの一部のアプリケーションでは、リージョンのフォールバックチェーンはデフォルトで になりますus-west-2。使用しているアプリケーションに従ってリージョンを正しく設定していることを確認します。

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。

プロデューサーライブラリの問題

このセクションでは、Kinesis Video Streams へのアップロード を使用するときに発生する可能性がある問題について説明します。

プロデューサーをコンパイルできません 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)

    CPD (コーデックプライベートデータ) は、H.264 が SPSおよび としてストリームにある場合PPS、AvCC 形式に適応できます。メディアパイプラインが をCPD個別に提供しない限り、アプリケーションは最初の Idr フレーム ( SPSと を含む必要がありますPPS) を検索してフレームCPDから を抽出し、2 つの NALUs (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 Video Client を作成するときに、「ヒープの割り当てに失敗しました」

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

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

エラー: Raspberry Pi でGStreamerデモを実行するときの「Illegal Instruction」

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 デモアプリケーションの実行時のカールエラー

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 サービスを停止し、アプリケーションを再起動します。

STATUSAndroid での _MKVINVALID_ANNEXBNALU__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/AmazonKinesisVideoDemoApp/src/main/java/com/amazonaws/kinesisvideo/demoapp/fragment/StreamConfigurationFragment.java#L169

フラグメントの最大期間に達したエラー

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

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

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

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

    • キーフレームベースのフラグメント化を使用しない場合は、 でストリームを定義するときにコードを記述して調べる、フラグメントの最大期間制限を 10 秒未満の値に設定します。

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

  • RPI カメラを使用している場合は、keyframe-interval 属性を 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 つのフレームにアクセスできない

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

コーデックのプライベートデータを使用してフレームにアクセスする方法については、 GitHub ウェブサイトの「.KinesisVideoRendererExampleTestjava」のテストファイルを参照してください。

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

フラグメントが 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 形式を使用してフレームデータをエンコードしている。

ネットワークの問題

「接続タイムアウト」や「接続失敗」などの接続エラーが表示された場合、Kinesis Video Streams に接続しようとすると、ネットワーク設定の IP アドレス範囲の制限が原因である可能性があります。

セットアップに Kinesis Video Streams の IP アドレス範囲の制限がある場合は、ネットワーク設定を更新して Kinesis Video Streams IP アドレス範囲 を許可リストに登録します。

重要

IP 範囲リストは、Kinesis Video Streams IP アドレスの完全なリストではありません。表示される IP アドレス範囲を含め、IP アドレスは時間の経過とともに変化する場合があることに注意してください。

詳細については、AWS 「IP 範囲」を参照してください。IP 範囲が変更されたときに通知を受け取るには、サブスクリプション手順 に従います。