首页 > 解决方案 > 如何获取在 QWebEnginePage 中点击的媒体的 URL,以及页面上的所有其他媒体链接

问题描述

我不能用专有的编解码器编译我自己的 Qt,更不用说从这个 Qt 版本编译 PyQt5,所以我有一个解决方法的想法,以便能够在我的浏览器上显示这些类型的媒体文件,即 h.264(我假设我仍然需要获得许可证等)。我想到的是将网页上的所有媒体链接都获取,并将它们放入一个QMediaPlaylist,然后在网页上单击时选择正确的视频。

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtMultimedia import *
from PyQt5.QtMultimediaWidgets import *
import sys

class Player(QMainWindow):
  def __init__(self,parent=None,*args,**kwargs):
    QMainWindow.__init__(self,parent,*args,**kwargs)

    self._player = QMediaPlayer(self)
    self._player.setAudioRole(QAudio.VideoRole)
    
    self._playlist = QMediaPlaylist()
    self._playlist.addMedia(QMediaContent(QUrl("http://techslides.com/demos/sample-videos/small.mp4")))
    self._player.setPlaylist(self._playlist)

    self._videoWidget = VideoWidget(self)
    self._player.setVideoOutput(self._videoWidget)

    self._playlist.setCurrentIndex(0)
    self._player.play()

    self.setCentralWidget(self._videoWidget)
    self.showMaximized()

class VideoWidget(QVideoWidget):
  def __init__(self,parent,*args,**kwargs):
    QVideoWidget.__init__(self,parent,*args,**kwargs)

  def keyPressEvent(self,event):
    if event.key() == Qt.Key_Escape and self.isFullScreen():
      self.setFullScreen(False)
      event.accept()
      
    elif event.key() == Qt.Key_Enter and event.modifiers() == Qt.Key_Alt:
      self.setFullScreen(not self.isFullScreen())
      event.accept()
      
    else:
      super().keyPressEvent(event)

  def mouseDoubleClickEvent(event):
    self.setFullScreen(not self.isFullScreen())
    event.accept()

def exceptHook(self,e,v,t):
  sys.__excepthook__(e,v,t)

sys.excepthook = exceptHook
app = QApplication(sys.argv)
mainWindow = Player()
app.exec_()

在此示例中,媒体播放列表中只有一个 .mp4 链接用于测试,而对于我的浏览器,我希望能够添加网页所有媒体文件的 URL。当在网页上点击视频时,我希望能够在播放列表中定位到 URL,切换到相应的索引,然后将视频小部件覆盖到网页上,然后播放。我不知道如何:

我已经尝试使用triggerAction并拦截事件,但是没有任何操作可以让我获取点击的视频 URL。我想我可以使用 获取网页 html .toHtml(callback),并且可以通过使用 过滤从那里获取链接beautifulSoup4,但是根据.toHtml我的经验,调用速度很慢。我假设我可以运行一些 Javascript 来获取视频的坐标位置(可能还有链接),但我没有使用 Javascript 的经验。

标签: pythonpyqtpyqt5qtwebengineqmediaplayer

解决方案


推荐阅读