- 
                Notifications
    You must be signed in to change notification settings 
- Fork 1.5k
FAQ
vo->receive(VideoFrame(qt_image));. Main event loop is required to show the image. So if you want to show when startup, you can QTimer::singleShot(0, [=](){vo->receive(VideoFrame(qt_image));});
In QML, you can use multiple Subtitle objects and corresponding SubtitleItem, and set property Subtitle.fuzzyMatch to false, Subtitle.file to a subtitle path.
C++ app is almost the same, using multiple SubtitleFilter objects and set properties. Actually each QML Subtitle object use an C++ VideoFilter internally.
see https://github.com/wang-bin/QtAV/issues/637
    m_player->setStartPosition(1);
connect(m_player, SIGNAL(seekFinished(qint64)), this, SLOT(pauseOnSeek()));
    ...
    void PlayerWindow::pauseOnSeek() {
        m_player->pause(true);
        disconnect(m_player, SIGNAL(seekFinished(qint64)), this, SLOT(pauseOnSeek()));
    }
Since 1.11.0, QtAVWidgets is loaded dynamically in VideoOutput constroctor. All QWidget based renderers are registered when QtAVWidgets module is loaded. On windows, it should work without problem. On linux, you may have to add LD_LIBRARY_PATH including libQtAVWidgets1.so. For static build, you have to use QtAV::Widgets::registerRenderers() manually to ensure QtAVWidgets code is compiled in to your app.
The simplest solution for all is call QtAV::Widgets::registerRenderers() before new VideoOutput()
- use AVPlayer.videoCapture()->capture()
- use VideoFilter installed to AVPlayer
    class CaptureFilter : public VideoFilter
    {
    ...
    protected:
        void process(Statistics* statistics, VideoFrame* frame = 0) override {
            if (!no_capture_was_requested)
                return;
            if (!frame)
                return;
            Q_EMIT captured(frame->toImage());
        }
    };
    ...
    CaptureFilter *f = new CaptureFilter();
    player->installFilter(f);
    ...