2009-12-05 22 views
8

Videonun H264 olarak kodlandığı ve ses içermediği gelen RTP akışlarını çalabilecek bir Qt widget'ı oluşturmak istiyorum. uygulanması içinQt kullanarak RTP video akışı oynatın mı?

Benim temel planı şudur:

  • bir fonon MediaSource nesne (Akış tipi) oluşturun.
  • kullanarak video verilerini elde veri
  • sağlayan bir QIODevice alt sınıf ile bağlayın ya:
    • JRTPLIB istemci kitaplığı
    • GStreamergstrtpbin eklentisi. Bu eklenti paketlerin yükünü boşaltmayı ve videoyu çözmeyi önemsiyor. Belki bu Phonon'un verileri tanıyacağı şansı arttırır.

My çevre:

  • Ubuntu 9.10
  • Qt 4,6

Sorularım:

  • yaklaşımım iyi biri mi? Belki daha açık ya da basit bir çözüme bakıyorum?
  • Şu anda bu sorunu yaşıyorum: video akışını oynatmaya çalışırken MediaObject durumu errorType FatalError ile ErrorState konumuna döner. Bana yanlış yaptığımı söyleyen var mı? Bulduğum

Düzenleme
bir çözüm bu thread içinde öğrendik Qt ile birlikte libVLC kullanıyor. İlgilenen için bir code sample. Hala Fonon tabanlı bir çözüm arıyorum.
İdeal olarak sadece bir SDP dosyası vermem gerekiyor ve iş bitti.

cevap

3

LibVLC çözümünü kullanarak çalışmayı başarabildim. Bundan sonra bakmayı bıraktığımdan, bunun en iyi çözümü olduğunu garanti edemiyorum.

İşte bir link to the libVLC sample.

+0

Bu dosyayı aldığınız anlaşılıyor. Kodu tekrar gönderme şansı var mı, yoksa zaman kaybetmiş mi? – Narcolei

+1

Bana bildirdiğiniz için teşekkür ederiz. URL'ler düzeltildi. Dosyaları kullanarak bir IP Cam'dan akış almak için – StackedCrooked

+0

@StackedCrooked nasıldı? –

2

Phonon'u anladığım şekilde en azından Windows'da çalışır, QT, sizin durumunuzda DirectShow (\ plugins \ phonon_backend \ phonon_ds94.dll) ve GStreamer için bir fonon arka eklentisi sağlar. Ardından, kaynak olarak RTP akışlarını kabul edebilecek kendi DirectShow filtresini elde edersiniz veya yazabilirsiniz. DirectShow, kod çözme işlemine dikkat eder ve Phonon, görüntü işleme ile ilgilenir.

 Phonon::MediaObject *media = new Phonon::MediaObject(); 
     Phonon::VideoWidget *video = new Phonon::VideoWidget(); 
     Phonon::createPath(media, video); 
     media->setCurrentSource(source); 
     media->play(); 

sorun kaynağı olarak RTP kabul Gstreamer arka ucuyla yattığını görünüyor: Arka uçtaki işleri sanki

Yani, uygulama kodu kadar basittir. Bu kaynağı bağımsız GStreamer'da herhangi bir sorun olmadan çalabilir misiniz?

+0

Henüz çalışmaya başlamamıştım. Yerel bir dosya çalınıyor, ancak RTP akışı (RTP paketleri okuyan bir MediaSource (QIODevice) nesnesi aracılığıyla) yüklemeye çalıştığımda, VideoPlayer LoadingState içinde kalır. Şu anda başka bir yaklaşımla deney yapıyorum: Gelen RTP verilerini okumak, video akışının kodunu çözmek ve bir şekilde bir Qt parçacığına bağlamak için GStreamer'ın gstrtpbin eklentisini kullanıyorum. – StackedCrooked

İlgili konular