Merhaba hocam.
Video neden yeşil ve bozuk başlıyor?
Bunun nedeni çıktı formatın ile girdi formatının uyumsuzluğundan kaynaklanıyor. Aşağıdaki kod ile yayın yapmayı dener misiniz?
Aşağıdaki kodda formatı I420 yaptım. x264enc ile uyumlu ve muhtemelen istediğiniz görüntüyü alacaksınız. tune="zerolatency" speed-preset="ultrafast" bu iki komutu da ben ne olursa olsun ekliyorum. Video aktarımını gözle görülür şekilde hızlandırıyor. Gerçi siz canlı yayın yapmyacaksınız galiba ama olsun zararı olmaz.
appsrc caps="video/x-raw, format=RGBA, width=640, height=360, framerate=30/1" ! videoconvert ! video/x-raw, format=I420
! x264enc tune="zerolatency" speed-preset="ultrafast" ! matroskamux ! filesink
Ben de direkt QT den video almakta zorlanıyordum. Önce OpenCV den alıp sonra QT ye atmıştım. OpenCV için de BGR formatı kullanılıyor. Bilginiz olsun. Belki denemek istersiniz.
appsrc caps="video/x-raw, format=RGBA, width=640, height=360, framerate=30/1" ! videoconvert ! video/x-raw, format=BGR
! x264enc tune="zerolatency" speed-preset="ultrafast" ! matroskamux ! filesink
Zaten "Tüm görüntüleri QImage::Format_RGBA8888e dönüştürüp appsrc'e gönderdim." demişsiniz. Bundan dolayı
birde Format_RGB8888 'yi deneyebilir misiniz? Sizin yaptığınız yanlış değil hatta doğru ancak çalışmadıysa birde benim yazdığımı denemenizde fayda var.
Neden sadece 34 saniyelik kayıt alıyor, oysa bufferda daha fazla kare var?
Bunun sebebi zaman damgası vermemiş olmanız. Gstreamde
is-live=true do-timestamp=true şeklinde komut vardır. Bunlar zamanın düzgün işlenmesini sağlar. Yani kod şu tarz bir şey olacak. (Virgül hatam olabilir siz yine kontrol edersiniz.)
appsrc caps="video/x-raw is-live=true do-timestamp=true format=RGBA, width=640, height=360, framerate=30/1" ! videoconvert ! video/x-raw, format=I420
! x264enc tune="zerolatency" speed-preset="ultrafast" ! matroskamux ! filesink
Çıktıyı QT üzerinden yapıyorsunu aşağıdaki komut ile EOS sinyali gönderebilirsiniz. Böylece videonun bittiği anlaşılır. Direkt gstreamden yapıyorsanız bu eos sinyal olayını araştırmak lazım.
gst_app_src_end_of_stream(GST_APP_SRC(appsrc));