Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Streaming video ke aliran video Kinesis
Untuk menjalankan aplikasi sampel, Anda memerlukan informasi berikut:
-
Nama aliran yang Anda buat di Prasyarat bagian tersebut.
-
KredenSIAL akun (ID kunci akses dan kunci akses rahasia) yang Anda buatBuat pengguna IAM dengan izin untuk menulis ke Kinesis Video Streams.
GStreamer dapat menemukan plugin.
kvssinkUntuk informasi selengkapnya, lihat Unduh dan buat SDK produser Kinesis Video Streams C++.
Tetapkan kredenSIAL dan wilayah.
export AWS_ACCESS_KEY_ID=YourAccessKeyexport AWS_SECRET_ACCESS_KEY=YourSecretKeyexport AWS_DEFAULT_REGION=us-west-2Untuk metode otentikasi lainnya, lihatBerikan kredensi ke kvssink.
catatan
SDK produsen C++ menggunakan Wilayah AS Barat (Oregon) (
us-west-2) secara default. Untuk menggunakan default, Wilayah AWS buat streaming video Kinesis Anda di Wilayah AS Barat (Oregon).Untuk menggunakan Region yang berbeda untuk streaming video Kinesis Anda, setel variabel lingkungan berikut ke Wilayah Anda (misalnya,
us-east-1):export AWS_DEFAULT_REGION=us-east-1Tergantung pada media input Anda, pilih salah satu dari yang berikut ini:
Memanfaatkan perangkat keras
Beberapa model Raspberry Pi hadir dengan encoder yang dipercepat perangkat keras H.264 . Anda dapat menggunakannya sebagai penggantix264enc, yang merupakan encoder perangkat lunak.
-
Pastikan plugin GStreamer diinstal:
sudo apt-get install gstreamer1.0-tools gstreamer1.0-plugins-bad -
Jenis:
gst-inspect-1.0 | grep h264Tentukan apakah elemen-elemen berikut tersedia:
-
omxh264enc
-
v4l2h264enc
Jika tersedia, Anda dapat menggunakannya. Berikut adalah beberapa contoh pipeline menggunakan elemen-elemen tersebut:
omxh264enc:gst-launch-1.0 v4l2src device=/dev/video0 \ ! videoconvert \ ! video/x-raw,format=I420,width=640,height=480 \ !omxh264enccontrol-rate=2 target-bitrate=512000 periodicity-idr=45 inline-header=FALSE \ ! h264parse ! video/x-h264,stream-format=avc,alignment=au,profile=baseline \ ! kvssink stream-name="raspberry"v4l2h264encdanv4l2convert:gst-launch-1.0 libcamerasrc \ ! video/x-raw,width=640,height=480,framerate=30/1,format=I420 \ !v4l2convert\ !v4l2h264encextra-controls="controls,repeat_sequence_header=1" \ ! video/x-h264,level='(string)4' \ ! h264parse \ ! video/x-h264,stream-format=avc,alignment=au,width=640,height=480,framerate=30/1 \ ! kvssink stream-name="test-stream" -
Masalah runtime
Berikut ini adalah beberapa masalah runtime yang sering ditemui, dan cara memecahkannya.
Tidak ada elemen seperti “xxxxxxxxx”
Jika Anda menerima kesalahan seperti berikut, itu berarti Anda kehilangan plugin GStreamer:
WARNING: erroneous pipeline: no element "videoconvert"
Resolusi:
Berdasarkan elemen mana yang hilang, tentukan tindakan yang sesuai:
-
kvssink: LihatUnduh dan buat SDK produser Kinesis Video Streams C++. libcamerasrc: Lihat Kesalahan “Aktivasi kumpulan buffer gagal” untuk menginstal elemenlibcamerasrcGStreamer.omxh264encatauv4l2h264enc:Ikuti Instal prasyarat perangkat lunak untuk menginstal semua pustaka GStreamer. Jika Anda telah menginstal semuanya dan elemen-elemen ini tidak muncul, itu berarti Raspberry Pi Anda tidak memiliki perangkat keras. Gunakan encoder perangkat lunak sebagai
x264encgantinya.Lainnya: Ikuti Instal prasyarat perangkat lunak untuk menginstal semua pustaka GStreamer. Elemen GStreamer yang berbeda ditemukan di berbagai grup plugin GStreamer (baik, buruk, jelek), jadi pastikan untuk menginstal semuanya.
Kesalahan “Aktivasi kumpulan buffer gagal”
Jika Anda menerima kesalahan seperti berikut ini berarti pipa yang digunakan sedang menggunakanv4l2src, tetapi seharusnya digunakan sebagai gant libcamerasrc inya.
ERROR bufferpool gstbufferpool.c:572:gst_buffer_pool_set_active:source:pool0:src start failed
WARN v4l2src gstv4l2src.c:976:gst_v4l2src_decide_allocation: error: Failed to allocate required memory.
WARN v4l2src gstv4l2src.c:976:gst_v4l2src_decide_allocation: error: Buffer pool activation failed
WARN basesrc gstbasesrc.c:3352:gst_base_src_prepare_allocation: Subclass failed to decide allocation
Error received from element source: Failed to allocate required memory.
WARN basesrc gstbasesrc.c:3132:gst_base_src_loop: error: Internal data stream error.
Debugging information: ../sys/v4l2/gstv4l2src.c(976): gst_v4l2src_decide_allocation (): /GstPipeline:live-kinesis-pipeline/GstV4l2Src:source:
Buffer pool activation failed
WARN basesrc gstbasesrc.c:3132:gst_base_src_loop: error: streaming stopped, reason not-negotiated (-4)
Misalnya, jika Anda menggunakan pipeline berikut dengan modul kamera 2 tanpa libcamerasrc diinstal, Anda mungkin mengalami kesalahan ini ketika GStreamer mencoba mendeteksi secara otomatis elemen mana yang akan digunakan.
gst-launch-1.0 autovideosrc ! videoconvert ! autovideosink
Resolusi:
Pastikan libcamerasrc itu diinstal dan gunakan sebagai elemen sumber, bukanv4l2src. Ketik berikut ini untuk menginstal elemen libcamerasrc GStreamer:
sudo apt-get update sudo apt-get install gstreamer1.0-libcamera
Setelah libcamerasrc diinstal, jika Anda menggunakan autovideosrc elemen, GStreamer harus secara otomatis beralih untuk menggunakan sumber yang benar alih- libcamerasrc alih. v4l2src
Kesalahan bus
Jika Anda menerima kesalahan Bus segera setelah memulai kvssink (biasanya, sekitar waktu panggilan HTTP selesai), itu berarti Raspberry Pi Anda tidak mendukung akses memori yang tidak selaras. PutMedia Log akan terlihat seperti berikut:
INFO Camera camera.cpp:1197 configuring streams: (0) 640x480-YUV420
INFO RPI pisp.cpp:1450 Sensor: /base/axi/pcie@120000/rp1/i2c@88000/imx708@1a - Selected sensor format: 1536x864-SBGGR10_1X10 - Selected CFE format: 1536x864-PC1B
[INFO ] kinesisVideoStreamFormatChanged(): Stream format changed.
[DEBUG] setRequestHeader(): Appending header to request: user-agent -> AWS-SDK-KVS-CPP-CLIENT/3.4.2/1.5.3 GCC/12.2.0 Linux/6.6.51+rpt-rpi-v8 aarch64 CPPSDK
[DEBUG] setRequestHeader(): Appending header to request: x-amzn-stream-name -> demo-stream
[DEBUG] setRequestHeader(): Appending header to request: x-amzn-producer-start-timestamp -> 1732012345.678
[DEBUG] setRequestHeader(): Appending header to request: x-amzn-fragment-acknowledgment-required -> 1
[DEBUG] setRequestHeader(): Appending header to request: x-amzn-fragment-timecode-type -> ABSOLUTE
[DEBUG] setRequestHeader(): Appending header to request: transfer-encoding -> chunked
[DEBUG] setRequestHeader(): Appending header to request: connection -> keep-alive
[INFO ] putStreamResultEvent(): Put stream result event. New upload handle 0
[WARN ] notifyDataAvailable(): [demo-stream] Failed to un-pause curl with error: 43. Curl object 0xe2f6f418
Bus error
Kinesis Video Streams PIC menggunakan akses memori yang tidak selaras untuk mengoptimalkan penggunaan memori, yang tidak didukung oleh semua perangkat.
Resolusi:
Untuk menggunakan SDK dalam mode akses memori yang selaras, Anda perlu secara eksplisit mengatur flag CM ALIGNED_MEMORY_MODEL ake ke ON saat mengkompilasikvssink, karena defaultnya adalah. OFF Lihat Unduh dan buat SDK produser Kinesis Video Streams C++ untuk instruksi lebih rinci.
Stempel waktu membeku dan pipa terhenti
Saat menggunakan x264enc dalam pipeline GStreamer, Anda mungkin menghadapi situasi di mana timeline pipeline melambat secara signifikan atau benar-benar terhenti dalam beberapa detik.
Hal ini terjadi karena pengaturan x264enc default dapat memperkenalkan latensi pengkodean tinggi, yang melebihi kapasitas buffer input default. Akibatnya, buffer input terisi, menyebabkan elemen hulu tersumbat dan pipa terhenti.
Untuk informasi selengkapnya, lihat dokumentasi GStreamer.
Resolusi:
Konfigur x264enc asikan dengan opsi zerolatency penyetelan. Ini secara signifikan mengurangi latensi pengkodean dengan mengoptimalkan skenario real-time, memastikan frame diproses dan output lebih cepat.
Contoh konfigurasi:
... ! x264enctune=zerolatencybyte-stream=true speed-preset=ultrafast bframes=0 key-int-max=60 ! ...
catatan
Meskipun solusi ini secara efektif mencegah penghentian pipa, ini dapat memengaruhi efisiensi dan kualitas pengkodean. Untuk skenario yang membutuhkan latensi rendah dan kualitas tinggi, pertimbangkan pendekatan alternatif, seperti menggunakan pengoptimalan perangkat keras atau menemukan web cam yang menghasilkan H.264 secara langsung, melewatkan langkah pengkodean ini.
Untuk informasi selengkapnya, lihat Memanfaatkan perangkat keras.
Tidak dapat menjalankan beberapa pipeline dari perangkat v4l2 yang sama secara bersamaan
Perangkat seperti hanya /dev/video0 dapat diakses oleh satu proses pada satu waktu. Jika beberapa proses mencoba mengaksesnya secara bersamaan, yang kedua menunggu sampai yang pertama selesai.
Resolusi:
Buat perangkat loopback, memungkinkan beberapa proses untuk menggunakan antarmuka loopback secara bersamaan. Untuk informasi selengkapnya, lihat Stack Exchange
Kesalahan aliran data internal
Saat Anda membuat pipeline GStreamer, Anda menghubungkan elemen dengan menghubungkan pad sumber dari satu elemen ke bantalan wastafel elemen lain. Proses penautan ini memungkinkan aliran data dari elemen sumber ke elemen sink, membentuk pipa data.
Pesan kesalahan “Tautan pad gagal” di log menunjukkan bahwa GStreamer mengalami masalah saat mencoba membuat koneksi (tautan) antara bantalan dua elemen dalam pipeline Anda.
Pad link failed
Error received from element udpsrc0: Internal data stream error.
Resolusi:
Tentukan elemen mana yang gagal terhubung satu sama lain. Untuk mempersempit ruang lingkup pipa, lepaskan elemen dari pipa. Ganti elemen paling kanan dengan fakesink dan hapus elemen satu per satu.
Anda mungkin perlu menyesuaikan elemen capsfilter, and/or mengubah
Kasus umum adalah meminta framerate atau resolution yang tidak didukung kamera. Gunakan gst-device-monitor-1.0 di terminal untuk mendapatkan yang didukungframerates,resolutions, danformats. Anda dapat menggunakan elemen GStreamer
Untuk memeriksa format yang didukung untuk elemen GStreamer individual, ketik gst-inspect-1.0 element-name terminal.