Pi B + ve Pi kamera aldım ve şimdi kameradan ev sunucuma H.264 kodlu video akışı için en verimli (düşük CPU) ve en düşük gecikmeli yapılandırmayı bulmaya çalışıyorum.
Aşağıdakileri okudum:
(Tüm bağlantılarda gstreamer-1.0 kullanılır deb http://vontaene.de/raspbian-updates/ . main
.)
Geçtiğimiz yıllarda bu konuda çok şey yapıldı.
Başlangıçta, biz borusuna çıktısını vardı raspivid
INTO gst-launch-1.0
(linki 1'e bakınız).
Daha sonra (bağlantı 2) artık standart olan resmi V4L2 sürücüsü oluşturuldu ve sadece gstreamer kullanarak doğrudan bir boru olmadan veri elde etmeyi sağlar (özellikle towolf tarafından yazılan »Sat 07 Aralık 2013 15:34 bağlantıda 2):
Gönderen (Pi): gst-launch-1.0 -e v4l2src do-timestamp=true ! video/x-h264,width=640,height=480,framerate=30/1 ! h264parse ! rtph264pay config-interval=1 ! gdppay ! udpsink host=192.168.178.20 port=5000
Alıcı: gst-launch-1.0 -v udpsrc port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false
Doğru anlarsam, her iki yol da H264 kod çözme işlemini yapmak için GPU'yu kullanır, ancak ikincisi biraz daha etkilidir çünkü ilgili işlemler arasında boru olmadığından çekirdeğe başka bir zaman geçmesi gerekmez.
Şimdi bununla ilgili bazı sorularım var.
İkincisi hala H264'ü kameradan verimli bir şekilde almanın en yeni yolu mu?
gst-omx
Gstreamer boru hatlarına izin veren hakkında okudum... video/x-raw ! omxh264enc ! ...
. Bu sadece kullanmaktan farklı bir şey yapıyor muvideo/x-h264
, yoksa daha verimli olabilir mi? Fark ne?video/x-h264 ...
Boru hattını kullandığımda gerçekte hangi gstreamer kodlama eklentisinin kullanıldığını nasıl öğrenebilirim ? Bu, açıkça (kod) bileşenini (h264parse
veya gibi) adlandırdığım diğer boru hattı parçalarına kıyasla, yalnızca istediğim formatı belirtiyor gibi görünüyorfpsdisplaysink
.Gelen linke 1'e bu cevapta Mikael Lepistö bahseder "Ben yan akış itibaren bir gereksiz filtre geçişi kaldırıldı" diye kesip yani
gdppay
vegdpdepay
. Bunlar ne yapıyor? Neden ihtiyaç duyulur? Onları gerçekten çıkarabilir miyim?Ayrıca alıcı taraf
caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96"
için parametreler belirterekudpsrc
akışın ortasındaki akışı başlatabildiğini / devam ettirebildiğini belirtir. Bu sınırlar ne elde ediyor, neden bu özel seçimler, onlar hakkında daha fazla bilgiyi nereden okuyabilirim?Soru 3 ve 4'te önerilenleri yaptığımda (ekleyerek
caps
, bırakarakgdppay
ve ekleyerekgdpdepay
) video gecikmem çok daha kötü hale geliyor (ve birikiyor gibi görünüyor, gecikme zamanla artar ve birkaç dakika sonra video durur)! Neden olabilir? Orijinal komutla elde ettiğim gecikmeyi elde etmek istiyorum, ancak aynı zamanda akışa herhangi bir zamanda katılabilme özelliğine de sahibim.RTSP + RTP'nin genellikle TCP ve UDP'nin bir kombinasyonunu kullandığını okudum: kontrol mesajları ve kaybolmaması gereken diğer şeyler için TCP ve gerçek video veri iletimi için UDP. Yukarıdaki kurulumlarda, bunu gerçekten mi kullanıyorum yoksa sadece UDP mi kullanıyorum? Gstreamer'ın bununla ilgilenip ilgilenmediği benim için biraz opak.
Bu sorulardan herhangi birine bile herhangi bir cevabı takdir ediyorum!
cat file | grep ...
bunun yerine gerekli olmadığı ve bazı ek yükleri olduğu gibi grep ... file
. Boru, özellikle düşük bellek bant genişliğine sahip cihazlarda kolayca ölçülebilen çekirdeğe ve çekirdekten başka bir kopyalama katmanı ekler. Gstreamer aygıt dosyasından doğrudan okuyabilirse, neden kullanmıyorsunuz? Senin İlişkin raspivid | cvlc
öneri: Ben gstreamer tabanlı bir çözüm geçiş yapmadan önce bu kullanıyordum, o (neden bilmiyorum) gstreamer daha gecikmeli 3 saniyeye kadar vardır.
cvlc
~% 45 kullanır, ancak sadece veri hızında bir borudan geçerek (tekrar akılda tutmak , boru yavaşlamıyor ) iğneyi zorlukla hareket ettireceğini düşünüyorum. <% 5 gibi. Bunu mümkün olduğunca verimli bir şekilde yapmak istiyorsanız tamamen önemsiz değil ...
raspivid | cvlc
tek kişi% 40-50. İnsanlar, belirli bir figür üzerinde gelişmelerine meydan okuyan bir soruya daha iyi yanıt verebilirler. Şu anda, neden her birinin neden önemli olduğunu açıklamadan çok fazla neden soruyorsunuz.
|
bu bağlamda herhangi bir sorun yarattığı fikri inanılmaz bir BS parçasıdır Herhangi birraspivid | cvlc
yöntem denediniz mi? Kamerayla oynamak için çok uzun veya çok fazla zamanım olmadı, ancak bir http akışı (diğer ucunda w / linux üzerinde görüntülenebilir) üretmek için bunu kullanmakvlc
iyi çalışıyor gibi görünüyor.