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 Anda
Untuk menjalankan aplikasi sampel, Anda memerlukan informasi berikut:
-
Nama aliran yang Anda buat di Prasyarat bagian ini.
-
Kredensyal akun (ID kunci akses dan kunci akses rahasia) yang Anda buat. Buat 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 ++.
Atur kredensil dan wilayah.
export AWS_ACCESS_KEY_ID=YourAccessKeyexport AWS_SECRET_ACCESS_KEY=YourSecretKeyexport AWS_DEFAULT_REGION=us-west-2Untuk metode otentikasi lainnya, lihatBerikan kredensyal ke kvssink.
catatan
SDK produsen C ++ menggunakan Wilayah AS Barat (Oregon) (
us-west-2) secara default. Untuk menggunakan default, Wilayah AWS buat aliran video Kinesis Anda di Wilayah AS Barat (Oregon).Untuk menggunakan Wilayah yang berbeda untuk aliran video Kinesis Anda, setel variabel lingkungan berikut ke Wilayah Anda (misalnya,
us-east-1):export AWS_DEFAULT_REGION=us-east-1Tergantung pada media masukan 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 memecahkan masalah mereka.
Tidak ada elemen seperti “xxxxxxxxx”
Jika Anda menerima kesalahan seperti berikut ini, 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
x264encperangkat lunak sebagai gantinya.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 pipeline yang digunakan digunakanv4l2src, tetapi seharusnya digunakan libcamerasrc sebagai gantinya.
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 elemen mana yang akan digunakan secara otomatis.
gst-launch-1.0 autovideosrc ! videoconvert ! autovideosink
Resolusi:
Pastikan libcamerasrc yang diinstal dan menggunakannya 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 libcamerasrc alih-alih. v4l2src
Kesalahan bus
Jika Anda menerima kesalahan Bus segera setelah memulai kvssink (biasanya, sekitar waktu panggilan HTTP untuk PutMedia selesai), itu berarti Raspberry Pi Anda tidak mendukung akses memori yang tidak selaras. 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 menyetel flag ALIGNED_MEMORY_MODEL CMake ON saat mengkompilasikvssink, karena default ke. OFF Lihat Unduh dan buat SDK produser Kinesis Video Streams C ++ untuk instruksi lebih rinci.
Stempel waktu membeku dan pipa berhenti
Saat menggunakan x264enc dalam pipeline GStreamer, Anda mungkin mengalami situasi di mana timeline pipeline melambat secara signifikan atau benar-benar berhenti dalam beberapa detik.
Ini terjadi karena pengaturan x264enc default dapat memperkenalkan latensi pengkodean tinggi, yang melebihi kapasitas buffer input default. Akibatnya, buffer input terisi, menyebabkan elemen hulu terblokir dan pipa macet.
Untuk informasi selengkapnya, lihat dokumentasi GStreamer.
Resolusi:
Konfigurasikan x264enc dengan opsi zerolatency penyetelan. Ini secara signifikan mengurangi latensi pengkodean dengan mengoptimalkan skenario waktu nyata, memastikan frame diproses dan dikeluarkan 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 kamera web 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 pada saat yang sama, 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 menautkan 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 “Pad link failed” di log menunjukkan bahwa GStreamer mengalami masalah saat mencoba membuat koneksi (tautan) antara bantalan dua elemen di 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, hapus elemen dari pipa. Ganti elemen paling kanan dengan fakesink dan hapus elemen satu per satu.
Anda mungkin perlu menyesuaikan elemen capsfilter
Kasus umum meminta framerate atau resolution kamera tidak mendukung. Gunakan gst-device-monitor-1.0 di terminal untuk mendapatkan dukunganframerates,resolutions, danformats. Anda dapat menggunakan elemen GStreamer skala video
Untuk memeriksa format yang didukung untuk elemen GStreamer individual, ketik terminalgst-inspect-1.0 element-name.