View a markdown version of this page

Memecahkan Masalah Streaming Video Kinesis - Amazon Kinesis Video Streams

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Memecahkan Masalah Streaming Video Kinesis

Gunakan informasi berikut untuk memecahkan masalah umum yang dihadapi dengan Amazon Kinesis Video Streams.

Masalah umum

Bagian ini menjelaskan masalah umum yang mungkin Anda temui saat bekerja dengan Kinesis Video Streams.

Latensi terlalu tinggi

Latensi mungkin disebabkan oleh durasi fragmen yang dikirim ke layanan Kinesis Video Streams. Salah satu cara untuk mengurangi latensi antara produsen dan layanan adalah dengan mengkonfigurasi pipa media untuk menghasilkan durasi fragmen yang lebih pendek.

Untuk mengurangi jumlah frame yang dikirim di setiap fragmen, kurangi nilai berikut dikinesis_video_gstreamer_sample_app.cpp:

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

Latensi lebih tinggi di browser Mozilla Firefox karena implementasi internal rendering video.

Masalah API

Bagian ini menjelaskan masalah API yang mungkin Anda temui saat bekerja dengan Kinesis Video Streams.

Kesalahan: “Opsi tidak dikenal”

GetMediadan GetMediaForFragmentList dapat gagal dengan kesalahan berikut:

Unknown options: <filename>.mkv

Kesalahan ini terjadi jika Anda mengon AWS CLI figurasi dengan output jenisjson. Konfigurasikan ulang AWS CLI dengan tipe keluaran default (none). Untuk informasi tentang mengkonfigurasi AWS CLI, lihat konfigurasi di Referensi AWS CLI Perintah.

Kesalahan: “Tidak dapat menentukan service/operation nama yang akan diotorisasi”

GetMediadapat gagal dengan kesalahan berikut:

Unable to determine service/operation name to be authorized

Kesalahan ini mungkin terjadi jika titik akhir tidak ditentukan dengan benar. Saat Anda mendapatkan titik akhir, pastikan untuk menyertakan parameter berikut dalam GetDataEndpoint panggilan, tergantung pada API yang akan dipanggil:

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

Kesalahan: “Gagal menempatkan bingkai di aliran”

PutMediadapat gagal dengan kesalahan berikut:

Failed to put a frame in the stream

Kesalahan ini mungkin terjadi jika konektivitas atau izin tidak tersedia untuk layanan. Jalankan yang berikut ini di AWS CLI, dan verifikasi bahwa informasi aliran dapat diambil:

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

Jika panggilan gagal, lihat Memecahkan Masalah Kes AWS CLI alahan untuk informasi selengkapnya.

Kesalahan: “Layanan menutup koneksi sebelum final AckEvent diterima”

PutMediadapat gagal dengan kesalahan berikut:

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

Kesalahan ini mungkin terjadi jika PushbackInputStream diterapkan secara tidak benar. Pastikan unread() metode diimplementasikan dengan benar.

Kesalahan: “STATUS_STORE_OUT_OF_MEMORY”

PutMediadapat gagal dengan kesalahan berikut:

The content store is out of memory.

Kesalahan ini terjadi ketika penyimpanan konten tidak dialokasikan dengan ukuran yang cukup. Untuk meningkatkan ukuran penyimpanan konten, tingkatkan nilainyaStorageInfo.storageSize. Untuk informasi selengkapnya, lihat StorageInfo.

Kesalahan: “Kredensi harus dicakup ke wilayah yang valid.”

Kesalahan ini terjadi jika wilayah penandatanganan tidak cocok dengan wilayah titik akhir.

Misalnya, jika Anda menentukan us-west-2 sebagai wilayah penandatanganan, tetapi mencoba menyambung ke titik akhir kinesisvideo.us-east-1.amazonaws.com (us-east-1), Anda akan menerima kesalahan ini.

Dalam beberapa aplikasi, seperti kvssink, rantai fallback wilayah defaultnya adalah. us-west-2 Pastikan Anda mengatur wilayah Anda dengan benar sesuai dengan aplikasi yang Anda gunakan.

Masalah HLS

Jika streaming video Anda tidak diputar dengan benar, lihatMemecahkan masalah HLS.

Masalah Java

Bagian ini menjelaskan cara memecahkan masalah Java umum yang dihadapi saat bekerja dengan Kinesis Video Streams.

Mengaktifkan log Java

Untuk memecahkan masalah dengan sampel dan pustaka Java, akan sangat membantu untuk mengaktifkan dan memeriksa log debug. Untuk mengaktifkan log debug, lakukan hal berikut:

  1. Tambahkan log4j ke pom.xml file, di dependencies node:

    <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
  2. Di target/classes direktori, buat file bernama log4j.properties dengan konten berikut:

    # 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

Log debug kemudian dicetak ke konsol IDE.

Masalah perpustakaan produser

Bagian ini menjelaskan masalah yang mungkin Anda temui saat menggunakanUnggah ke Kinesis Video Streams.

Tidak dapat mengkompilasi SDK produsen

Pastikan pustaka yang diperlukan ada di jalur Anda. Untuk memverifikasi ini, gunakan perintah berikut:

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

Streaming video tidak muncul di konsol

Untuk menampilkan aliran video Anda di konsol, itu harus dikodekan menggunakan format H.264 aVCC. Jika streaming Anda tidak ditampilkan, verifikasi hal berikut:

  • Anda Bendera adaptasi NAL diatur ke NAL_ADAPTATION_ANNEXB_NALS | NAL_ADAPTATION_ANNEXB_CPD_NALS jika streaming asli dalam Annex-B format. Ini adalah nilai default dalam StreamDefinition konstruktor.

  • Anda menyediakan data pribadi codec dengan benar. Untuk H.264, ini adalah set parameter urutan (SPS) dan set parameter gambar (PPS). Tergantung pada sumber media Anda, data ini dapat diambil dari sumber media secara terpisah atau dikodekan ke dalam bingkai.

    Banyak aliran dasar dalam format berikut, di Ab mana kode Annex-B awal (001 atau 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 (Codec Private Data), jika H.264 ada dalam aliran sebagai SPS dan PPS, dapat disesuaikan dengan format aVCC. Kecuali jika pipa media memberikan CPD secara terpisah, aplikasi dapat mengekstrak CPD dari frame dengan mencari frame Idr pertama (yang seharusnya berisi SPS dan PPS), mengekstrak dua NALU (yang akan menjadi Ab (Sps) Ab (Pps)) dan mengaturnya di CPD di. StreamDefinition

Kesalahan: “Token keamanan yang disertakan dalam permintaan tidak valid” saat streaming data menggunakan aplikasi demo GStreamer

Jika kesalahan ini terjadi, ada masalah dengan kredenSIAL Anda. Verifikasi hal berikut:

  • Jika Anda menggunakan kredenSIAL sementara, Anda harus menentukan token sesi.

  • Verifikasi bahwa kredensi sementara Anda tidak kedaluwarsa.

  • Pastikan Anda telah mengatur hak yang tepat.

  • Di macOS, verifikasi bahwa Anda tidak memiliki kredenSIAL yang di-cache di Gantungan Kunci.

Kesalahan: “Gagal mengirimkan bingkai ke klien Kinesis Video”

Jika kesalahan ini terjadi, stempel waktu tidak diatur dengan benar di aliran sumber. Coba tindakan berikut ini:

  • Gunakan contoh SDK terbaru, yang mungkin memiliki pembaruan yang memperbaiki masalah Anda.

  • Atur aliran berkualitas tinggi ke bitrate yang lebih tinggi, dan perbaiki jitter apa pun di aliran sumber jika kamera mendukung melakukannya.

Aplikasi GStreamer berhenti dengan pesan “streaming dihentikan, alasan tidak dinegosiasikan” di OS X

Streaming dapat berhenti di OS X dengan pesan berikut:

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)

Solusi yang mungkin untuk ini adalah menghapus parameter frame rate dari gst_caps_new_simple panggilan di: 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);

Kesalahan: “Gagal mengalokasikan heap” saat membuat Kinesis Video Client di demo GStreamer di Raspberry Pi

Aplikasi sampel GStreamer mencoba mengalokasikan 512 MB RAM, yang mungkin tidak tersedia di sistem Anda. Anda dapat mengurangi alokasi ini dengan mengurangi nilai berikut diKinesisVideoProducer.cpp:

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

Kesalahan: “Instruksi Ilegal” saat menjalankan demo GStreamer di Raspberry Pi

Jika Anda mengalami kesalahan berikut saat menjalankan demo GStreamer, verifikasi bahwa Anda telah mengkompilasi aplikasi untuk versi perangkat yang benar. (Misalnya, verifikasi bahwa Anda tidak mengkompilasi untuk Raspberry Pi 3 saat Anda menjalankan Raspberry Pi 2.)

INFO - Initializing curl. Illegal instruction

Kamera gagal memuat pada Raspberry Pi

Untuk memeriksa apakah kamera dimuat, jalankan yang berikut ini:

ls /dev/video*

Jika tidak ada yang ditemukan, jalankan yang berikut ini:

vcgencmd get_camera

Outputnya akan serupa dengan yang berikut ini:

supported=1 detected=1

Jika driver tidak mendeteksi kamera, lakukan hal berikut:

  1. Periksa pengaturan kamera fisik dan verifikasi bahwa kamera tersambung dengan benar.

  2. Jalankan yang berikut ini untuk meng-upgrade firmware:

    sudo rpi-update
  3. Mulai ulang perangkat.

  4. Jalankan yang berikut untuk memuat driver:

    sudo modprobe bcm2835-v4l2
  5. Pastikan kamera terdeteksi:

    ls /dev/video*

Kamera tidak dapat ditemukan di macOS High Sierra

Di macOS High Sierra, aplikasi demo tidak dapat menemukan kamera jika lebih dari satu kamera tersedia.

file jni.h tidak ditemukan saat mengkompilasi di macOS High Sierra

Untuk mengatasi kesalahan ini, perbarui instalasi Xcode Anda ke versi terbaru.

Kesalahan curl saat menjalankan aplikasi demo GStreamer

Untuk mengatasi kesalahan curl saat Anda menjalankan aplikasi demo GStreamer, salin file sertifikat ini ke. /etc/ssl/cert.pem

Timestamp/range pernyataan saat runtime pada Raspberry Pi

Jika pernyataan rentang stempel waktu terjadi saat runtime, perbarui firmware dan mulai ulang perangkat:

sudo rpi-update $ sudo reboot

Penegasan pada gst_value_set_fraction_range_full pada Raspberry Pi

Pernyataan berikut muncul jika uv4l layanan sedang berjalan:

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

Jika ini terjadi, hentikan uv4l layanan dan mulai ulang aplikasi.

Kesalahan STATUS_MKV_INVALID_ANNEXB_NALU_IN_FRAME_DATA (0x3200000d) di Android

Kesalahan berikut muncul Bendera adaptasi NAL jika salah untuk aliran media:

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

Jika kesalahan ini terjadi, berikan tanda .withNalAdaptationFlags yang benar untuk media Anda (misalnya,NAL_ADAPTATION_ANNEXB_CPD_NALS). Berikan bendera ini di baris berikutAndroid:

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

Durasi fragmen maksimum tercapai kesalahan

Kesalahan ini terjadi ketika fragmen media dalam aliran melebihi batas durasi fragmen maksimum. Lihat batas durasi fragmen maksimum di Kuota layanan API media dan media arsip bagian ini.

Untuk mengatasi masalah ini, coba yang berikut ini:

  • Jika Anda menggunakan webcam/USB kamera, lakukan salah satu hal berikut:

    • Jika Anda menggunakan fragmentasi berbasis bingkai kunci, maka atur encoder untuk menyediakan bingkai kunci dalam waktu 10 detik.

    • Jika Anda tidak menggunakan fragmentasi berbasis bingkai utama, maka saat menentukan aliran masukTulis dan periksa kode, tetapkan batas durasi fragmen maksimum ke nilai kurang dari 10 detik.

    • Jika Anda menggunakan encoder perangkat lunak (seperti x264) di pipeline GStreamer, Anda dapat mengatur atribut key-int-max ke nilai dalam waktu 10 detik. Misalnya, atur key-int-max ke 60, dengan fps disetel ke 30, untuk mengaktifkan frame kunci setiap 2 detik.

  • Jika Anda menggunakan kamera RPI, atur atribut keyframe-interval menjadi kurang dari 10 detik.

  • Jika Anda menggunakan kamera IP (RTSP), atur ukuran GOP ke 60.

Kesalahan “Nama benda tidak valid diteruskan” saat menggunakan otorisasi IoT

Untuk menghindari kesalahan ini (HTTP Error 403: Response: {"message":"Invalid thing name passed"}) saat Anda menggunakan kredenSIAL IoT untuk otorisasi, pastikan bahwa nilai stream-name (parameter kvssink elemen yang diperlukan) identik dengan nilaiiot-thingname. Untuk informasi selengkapnya, lihat Referensi parameter elemen GStreamer.

Masalah perpustakaan parser streaming

Bagian ini menjelaskan masalah yang mungkin Anda temui saat menggunakanStreaming menggunakan pustaka parser.

Tidak dapat mengakses satu frame dari streaming

Untuk mengakses satu frame dari sumber streaming di aplikasi konsumen Anda, verifikasi bahwa streaming Anda berisi data pribadi codec yang benar. Untuk informasi tentang format data dalam aliran, lihatModel Data.

Untuk mempelajari cara menggunakan data pribadi codec untuk mengakses bingkai, lihat file pengujian berikut di GitHub situs web: KinesisVideoRendererExampleTest.java

Kesalahan decoding fragmen

Jika fragmen Anda tidak dikodekan dengan benar dalam H.264 format dan level yang didukung browser, Anda mungkin melihat kesalahan berikut saat memutar streaming di konsol:

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

Jika ini terjadi, verifikasi hal berikut:

  • Resolusi frame cocok dengan resolusi yang ditentukan dalam Data Pribadi Codec.

  • H.264 Profil dan level frame yang dikodekan cocok dengan profil dan level yang ditentukan dalam Data Pribadi Codec.

  • Browser mendukung profile/level kombinasi tersebut. Sebagian besar browser saat ini mendukung semua kombinasi profil dan level.

  • Stempel waktu akurat dan dalam urutan yang benar, dan tidak ada cap waktu duplikat yang dibuat.

  • Aplikasi Anda mengkodekan data bingkai menggunakan H.264 format.

Masalah jaringan

Jika Anda melihat kesalahan koneksi, seperti “Batas Waktu Koneksi” atau “Koneksi Gagal”, saat mencoba menyambung ke Kinesis Video Streams, itu mungkin karena pembatasan rentang alamat IP dalam pengaturan jaringan Anda.

Jika pengaturan Anda memiliki batasan rentang alamat IP untuk Streams Video Kinesis, perbarui konfigurasi jaringan Anda untuk mengizinkan daftar rentang alamat IP Kinesis Video Streams.

penting

Daftar rentang IP bukanlah daftar lengkap alamat IP Streaming Video Kinesis. Sertakan rentang alamat IP yang Anda lihat dan ketahuilah bahwa alamat IP dapat berubah seiring waktu.

Untuk informasi selengkapnya, lihat AWS Rentang IP. Untuk diberitahu ketika rentang IP berubah, ikuti prosedur berlangganan.