2009-12-05 31 views
8

Tôi muốn tạo tiện ích Qt có thể phát các luồng RTP đến nơi video được mã hóa thành H264 và không chứa âm thanh.Phát luồng video RTP bằng Qt?

kế hoạch cơ bản của tôi để thực hiện là:

  • Tạo một Phonon MediaSource đối tượng (loại Stream).
  • Kết nối nó với một lớp con QIODevice cung cấp các dữ liệu
  • Lấy dữ liệu hình ảnh bằng cách sử dụng:
    • Thư viện JRTPLIB client
    • Các GStreamergstrtpbin plugin. Plugin này sẽ chăm sóc depayloading các gói và giải mã video. Có lẽ điều này cải thiện cơ hội mà Phonon sẽ nhận ra dữ liệu.

môi trường của tôi:

  • Ubuntu 9.10
  • Qt 4,6

Câu hỏi của tôi:

  • Là cách tiếp cận tôi một tốt nhất? Có lẽ tôi đang xem xét một giải pháp rõ ràng hơn hoặc đơn giản hơn?
  • Tôi hiện đang gặp sự cố này: khi cố gắng phát luồng video, trạng thái của MediaObject chuyển thành ErrorState với errorType FatalError. Bất cứ ai có thể cho tôi biết những gì tôi đang làm sai?

Sửa
Một giải pháp tôi thấy đang sử dụng libVLC kết hợp với Qt, mà tôi học được về trong thread này. Đây là số code sample cho người quan tâm. Tôi vẫn đang tìm giải pháp dựa trên Phonon.
Lý tưởng nhất là tôi chỉ cần cung cấp tệp SDP và công việc được thực hiện.

Trả lời

3

Tôi có thể làm cho nó hoạt động bằng cách sử dụng giải pháp libVLC. Tôi không thể garantuee rằng đây là giải pháp tốt nhất tốt nhất mặc dù như tôi chỉ đơn giản là ngừng tìm kiếm sau đó.

Đây là link to the libVLC sample.

+0

Có vẻ như bạn đã gỡ tệp này xuống. Bất kỳ cơ hội đăng mã một lần nữa, hoặc nó đã bị mất thời gian? – Narcolei

+1

Cảm ơn bạn đã cho tôi biết. Đã sửa các url. – StackedCrooked

+0

@StackedCrooked để nhận luồng từ IP Cam bằng các tệp? –

2

Cách tôi hiểu Phonon hoạt động ít nhất trong Windows là QT cung cấp plugin phụ trợ phonon cho DirectShow (\ plugins \ phonon_backend \ phonon_ds94.dll) và GStreamer trong trường hợp của bạn. Sau đó, bạn có thể lấy hoặc viết bộ lọc DirectShow của riêng mình để có thể chấp nhận luồng RTP làm nguồn. DirectShow sẽ giải quyết vấn đề giải mã và Phonon sẽ xử lý hiển thị.

Vì vậy, nếu phụ trợ hoạt động, mã ứng dụng cũng đơn giản như:

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

vẻ như là vấn đề nằm với backend GStreamer chấp nhận RTP như một nguồn. Bạn có thể phát lại nguồn đó trong GStreamer độc lập mà không gặp bất kỳ sự cố nào không?

+0

Tôi chưa quản lý để làm cho nó hoạt động được nêu ra. Chơi một tệp cục bộ hoạt động, nhưng khi tôi cố tải một luồng RTP (thông qua một đối tượng MediaSource (QIODevice) đọc các gói RTP) thì VideoPlayer vẫn ở trong LoadingState. Hiện tại tôi đang thử nghiệm một cách tiếp cận khác: Tôi đang sử dụng plugin gstrtpbin của GStreamer để đọc dữ liệu RTP đến, giải mã luồng video và bằng cách nào đó kết nối nó với tiện ích Qt. – StackedCrooked

Các vấn đề liên quan