Qt - Hamparan QGraphicsLihat melalui video vlc

Saya mengalami beberapa masalah dalam mengimplementasikan pemutar VLC ke proyek saya. Saya memerlukan video overlay dengan QgraphicsView (pada dasarnya kanvas) agar saya bisa menggambar sesuatu. Saya sudah mencoba melakukannya dengan cara ini:

  1. Arahkan penunjuk winId ke QgraphicsView. Video dirender dengan baik, tetapi dirender di atas objek, jadi item grafis saya berada di bawah lapisan video. => gagal
  2. Buat objek QGraphics baru sebagai anak dari objek QGraphics utama saya dan kemudian render video ke anak ini. Hasilnya sama seperti di atas. => gagal
  3. Hamparkan QWidget dengan video yang dirender dengan QGraphicsView saya (pos dan ukuran yang sama). Saya telah menyetel latar belakang transparan sehingga saya dapat melihat widget yang dihamparkan tetapi video di bawah lapisan ini tidak dapat dirender. Saya tetap putih tetapi saya bisa mendengarnya diputar. => gagal

Saya telah membaca di forum ini, bahwa seseorang mengekstrak setiap frame, dan menetapkannya sebagai pixmap ke suatu objek. Saya melihat kodenya, tetapi sayangnya, saya tidak mengerti, karena saya bukan profesional C++ :( Saya menggunakan binding Python untuk Qt (PySide) dan untuk VLC. Tolong bantu, itu sangat mengganggu saya :(

http://forum.videolan.org/viewtopic.php?f=32&t=68816&p=228645


person m1lhaus    schedule 27.06.2013    source sumber


Jawaban (2)


Akhir-akhir ini, saya telah menggunakan pemutar Phonon terintegrasi. Dimungkinkan untuk menambahkan widget video Phonon sebagai GraphicsItem melalui QGraphicsProxyWidget. Bekerja seperti pesona dengan paket codec K-Lite di latar belakang Windows.

person m1lhaus    schedule 06.07.2013

Saya tahu pertanyaan ini terjadi beberapa waktu lalu tetapi saya baru saja menemukannya ketika mencoba mencari tahu hari ini dan berpikir saya akan memberikan solusi saya.

cukup banyak upaya ketiga Anda benar tetapi Anda juga harus membuat QGraphicsView yang Anda gunakan transparan karena itulah warna putih yang Anda lihat. Anda hanya perlu memastikan tampilan sesuai dengan jendela Anda secara manual dengan setGeometry dan Anda sudah siap.

#assuming you're inside a main window that is self
scene = QGraphicsScene()
scene.setBackgroundBrush(QBrush(QColor(255, 0,0,90))) #creates a semitransparent red over VLC

view = QGraphicsView(self)
view.setScene(self.scene)
view.setGeometry(0,0,self.width(),self.height())

self.view.setStyleSheet("background: transparent");
person chocolossus    schedule 31.01.2014
comment
Saya tidak bisa membuatnya berfungsi dengan benar. Masih belum ada render. - person m1lhaus; 14.10.2014