Qt ile geliştirilen bir kamera görüntüleme ve kayıt sistemi üzerinde çalışıyorum. Sistemim x86_64 (i5-1135G7, 16GB RAM, NVIDIA MX330) üzerinde çalışıyor. Aynı zamanda hedef cihaz olarak i.MX8 işlemcili Yocto tabanlı bir gömülü sistem kullanıyorum. Bu cihaz otomasyon sistemlerinde kullanılmak üzere geliştiriliyor.
Yapmak istediğim şey:
RTSP üzerinden gelen kameraların canlı görüntüsünü appsink aracılığıyla QImage nesneleri olarak alıyorum. Bu görüntüleri yaklaşık 10 saniyelik bir ring buffer (QQueue<QImage>) yapısıyla bellekte tutuyorum. Tetikleme (örneğin hareket algılama) durumunda bu son N kareyi .mkv - .mp4 - .mov formatında diske kaydetmek istiyorum.
Kaydedilen video:
- 10 saniye süreye sahip olmalı
- Renkler doğru görünmeli (yeşil veya bozuk olmamalı)
Sistem bileşenleri:
- Qt 6.6 (Linux Ubuntu 22.04)
- GStreamer 1.20+
- RTSP kameralar (H264 stream)
- Alınan görüntü: QImage::Format_RGBA8888
- Çıktı pipeline:
appsrc ! videoconvert ! x264enc ! matroskamux ! filesink
Karşılaştığım sorunlar:
- Oluşan .mkv video dosyası sadece 34 saniye uzunluğunda, normalde ~300 kareye denk gelmesi gerekiyordu.
- Video tamamen yeşil veya bozuk renkli geliyor.
Denediklerim:
- Tüm görüntüleri QImage::Format_RGBA8888e dönüştürüp appsrc'e gönderdim.
- appsrc caps: video/x-raw, format=RGBA, width=640, height=360, framerate=30/1
- QImage::Format_RGB888 ile de denedim ama sorun yine aynı.
- Görüntülerin kendisi düzgün çünkü GUI üzerinde canlı olarak gösteriliyor.
Sorularım:
- Video neden yeşil veya bozuk başlıyor?
- Neden sadece 34 saniyelik kayıt alıyor, oysa bufferda daha fazla kare var?
Çalışan bir örnek pipeline, benzer deneyim yaşayanlar veya çözüm önerileri çok faydalı olur.
Şimdiden teşekkür ederim 🙏