Kinesis Video Streams 疑難排解 - Amazon Kinesis Video Streams

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Kinesis Video Streams 疑難排解

使用下列資訊對 Amazon Kinesis Video Streams 遇到的常見問題進行疑難排解。

一般問題

本節說明使用 Kinesis Video Streams 時可能會遇到的一般問題。

延遲過高

延遲可能是因為傳送至 Kinesis 影片串流服務的片段持續時間所造成。減少生產者和服務之間延遲的方法之一是,設定媒體管道以產生較短的片段持續期間。

若要減少每個片段中傳送的影格數,請在中減少下列值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。 AWS CLI 使用預設輸出類型 (none) 重新配置。若要取得有關規劃的資訊 AWS CLI,請參AWS CLI 指令參考》中的規劃。

錯誤:「無法判斷要授權的服務/操作名稱」

GetMedia 可能會因為下列錯誤而失敗:

Unable to determine service/operation name to be authorized

若未正確指定端點,可能會發生此錯誤。當您取得端點時,請務必在GetDataEndpoint呼叫中包含下列參數,具體取決於API要呼叫的參數:

--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 _」MEMORY

PutMedia 可能會因為下列錯誤而失敗:

The content store is out of memory.

當內容存放區未分配足夠的大小時,將會發生此錯誤。若要提高內容存放區的大小,請提高 StorageInfo.storageSize 的值。如需詳細資訊,請參閱 StorageInfo

HLS問題

如果您的視訊串流無法正確播放,請參閱疑難排解 HLS 問題

爪哇問題

本節說明如何疑難排解使用 Kinesis Video Streams 時遇到的常見 Java 問題。

啟用 Java 日誌

若要疑難排解 Java 範例和程式庫的問題,啟用和檢查偵錯記錄檔會很有幫助。若要啟用偵錯日誌,請依下列步驟執行:

  1. log4j 新增至 pom.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控制台。

製作人庫問題

本節說明使用 Producer 資料庫 時可能遇到的問題。

無法編譯生產者 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

影片串流不會顯示在主控台

若要在主控台顯示您的視訊串流,必須使用 AvCC 格式中的 H.264 編碼。如果您的串流不會顯示,請確認以下資訊:

  • 如果原始串流為 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 在流中 SPSPPS,則可以適應 AVCC 格式。除非媒體管道CPD單獨提供,否則應用程序可以通過查找第一個 Itr 框架(其中應包含SPS和PPS)CPD從框架中提取,然後將兩個NALUs(將是 Ab(Sps)Ab(Ps)))提取並將其設置在CPD中StreamDefinition

使用GStreamer示範應用程式串流資料時發生錯誤:「要求中包含的安全性權杖無效」

如果發生此錯誤,表示您的登入資料有問題。請確認下列內容:

  • 如果您使用臨時的登入資料,必須指定工作階段字符。

  • 確認您的臨時登入資料並未過期。

  • 確認您已設定適當的權利。

  • 在 macOS 上,確認您沒有在鑰匙圈中快取登入資料。

錯誤:「無法將影格提交到 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);

錯誤:「無法分配堆」創建 Kinesis 視頻客戶端在GStreamer演示樹莓派

GStreamer範例應用程式會嘗試配置 512 MB 的RAM,這可能無法在您的系統上使用。您可以降低以下 KinesisVideoProducer.cpp 中的值以降低此配置:

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

錯誤:在樹莓派上運行GStreamer演示時出現「非法指令」

如果您在執行GStreamer示範時遇到下列錯誤,請確認您已針對裝置的正確版本編譯應用程式。(例如, 確認你不編譯樹莓派 3 當你在樹莓派上運行 2。)

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示範應用程式時的 curl 錯誤,請將此憑證檔案複製到/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 服務並重新啟動應用程式。

STATUS_ _ _ MKV _ _ INVALID _ _ ANNEXB _ _ NALU FRAME _ DATA (0x3200000d) 在安卓系統上出現錯誤

如果媒體串流的 NAL 適應性旗標​ 不正確,則會顯示以下錯誤:

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

如果發生此錯誤,請提供媒體的正確 .withNalAdaptationFlags​ 旗標 (例如,NAL_ADAPTATION_ANNEXB_CPD_NALS​)。在以下 Android Producer Library 一行中提供此旗標:

https://github.com/awslabs/aws-sdk-android-samples//主/src/主/java/com /亞馬遜/動力視頻/演示/碎片/.java #L169 AmazonKinesisVideoDemoApp StreamConfigurationFragment

到達片段持續時間上限錯誤

此錯誤會在串流中的媒體片段超過片段持續時間上限時發生。請參閱本媒體和封存媒體 API 服務配額節中的最大片段持續時間限制。

請嘗試下列方法解決此問題:

  • 如果您使用的是網路USB攝影機/相機,請執行下列其中一項操作:

    • 如果您使用的是基於關鍵幀的碎片,請將編碼器設置為在 10 秒內提供關鍵幀。

    • 如果您沒有使用以索引鍵影格為基礎的片段,則在中定義串流時步驟 2:編寫並檢查代碼,請將片段持續時間上限設定為小於 10 秒的值。

    • 如果您在GStreamer管道中使用軟件編碼器(例如 x264),則可以在 10 秒內將 key-int-max 屬性設置為值。例如,設定 key-int-max 為 60,且 fps 設定為 30,則每 2 秒啟用一次關鍵影格。

  • 如果您使用的是RPI攝影機,請將關鍵影格間隔屬性設定為少於 10 秒。

  • 如果您使用的是 IP (RTSP) 攝影機,請將GOP大小設定為 60。

使用 IoT 授權時的「傳遞的物件名稱無效」錯誤

若要在使用 IoT 認證進行授權時避免此錯誤 (HTTP Error 403: Response: {"message":"Invalid thing name passed"}),請確定的值 stream-name (kvssink元素的必要參數) 與的值相同iot-thingname。如需詳細資訊,請參閱 元素參數參數

流解析器庫問題

本節說明使用 串流剖析器程式庫 時可能遇到的問題。

無法從串流存取單一影格

若要從消費者應用程式中的串流來源存取單一畫面,請確認您的串流包含正確的轉碼器私人資料。如需有關串流資料格式的詳細資訊,請參閱 資料模型

要了解如何使用編解碼器私人數據訪問框架,請參閱 GitHub 網站上的以下測試文件:KinesisVideoRendererExampleTest. java

片段解碼錯誤

如果您的片段未以瀏覽器支援的 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 範圍變更時收到通知,請遵循訂閱程序