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.
Topik
Masalah umum
Bagian ini menjelaskan masalah umum yang mungkin Anda temui saat bekerja dengan Kinesis Video Streams.
Masalah
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.
Masalah
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-nameStreamName--endpointhttps://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.
Masalah
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:
-
Tambahkan
log4jkepom.xmlfile, didependenciesnode:<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> -
Di
target/classesdirektori, buat file bernamalog4j.propertiesdengan 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.
Masalah
Kesalahan: “Gagal mengirimkan bingkai ke klien Kinesis Video”
Aplikasi GStreamer berhenti dengan pesan “streaming dihentikan, alasan tidak dinegosiasikan” di OS X
Kesalahan: “Instruksi Ilegal” saat menjalankan demo GStreamer di Raspberry Pi
file jni.h tidak ditemukan saat mengkompilasi di macOS High Sierra
Penegasan pada gst_value_set_fraction_range_full pada Raspberry Pi
Kesalahan STATUS_MKV_INVALID_ANNEXB_NALU_IN_FRAME_DATA (0x3200000d) di Android
Kesalahan “Nama benda tidak valid diteruskan” saat menggunakan otorisasi IoT
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_NALSjika streaming asli dalam Annex-B format. Ini adalah nilai default dalamStreamDefinitionkonstruktor. -
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
Abmana 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:
-
Periksa pengaturan kamera fisik dan verifikasi bahwa kamera tersambung dengan benar.
-
Jalankan yang berikut ini untuk meng-upgrade firmware:
sudo rpi-update -
Mulai ulang perangkat.
-
Jalankan yang berikut untuk memuat driver:
sudo modprobe bcm2835-v4l2 -
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 /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:
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.