Merhabalar,
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?
Format dönüşümünde eksik bir yapı mı var?
Çalışan bir örnek pipeline, benzer deneyim yaşayanlar veya çözüm önerileri çok faydalı olur.
Şimdiden teşekkür ederim 🙏