Saya sedang mengembangkan pemutar media menggunakan vlc-qt , Sebenarnya saya ingin tombol yang akan memutar melakukan operasi mundur cepat. Saya tidak memiliki masalah dengan operasi maju cepat tetapi tidak dapat menerapkan operasi mundur cepat, Apakah ada fungsi di vlc-qt yang akan memutar video mundur. Berikut adalah kode tombol yang saya gunakan untuk operasi maju cepat dan mundur cepat

void expPlayer::on_pushButton_2_clicked()
{
    m_player->setPlaybackRate(m_player->playbackRate()+1);
}

void expPlayer::on_pushButton_3_clicked()
{
    //It should play the video backward with more playback rate.
}

Ini kode lengkap saya

#ifndef EXPPLAYER_H
#define EXPPLAYER_H

#include <QMainWindow>
#include "VLCQtCore/Instance.h"
#include "VLCQtCore/MediaPlayer.h"
#include "VLCQtCore/Media.h"
#include "VLCQtCore/Common.h"
#include "VLCQtCore/Config.h"
#include "QPushButton"
#include "QtMultimedia/QMediaPlaylist"
#include "VLCQtWidgets/WidgetVideo.h"
#include "VLCQtWidgets/WidgetSeekProgress.h"
#include "QSlider"
#include "QFileDialog"
#include "QInputDialog"
#include "QLabel"
#include "QListView"
#include "QBoxLayout"
#include "VLCQtWidgets/WidgetSeek.h"
QT_BEGIN_NAMESPACE
namespace Ui { class expPlayer; }
QT_END_NAMESPACE

class expPlayer : public QMainWindow
{
    Q_OBJECT

public:
    expPlayer(QWidget *parent = nullptr);
    ~expPlayer();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();
    
    void on_pushButton_3_clicked();
    
private:
    Ui::expPlayer *ui;

    VlcInstance *m_instance;
    VlcMedia *m_media;
    VlcMediaPlayer *m_player;
    VlcWidgetSeekProgress *m_progressBar;
};
#endif // EXPPLAYER_H

#include "expplayer.h"
#include "ui_expplayer.h"

expPlayer::expPlayer(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::expPlayer)
{
    ui->setupUi(this);
    m_instance = new VlcInstance(VlcCommon::args(), this);
    m_player = new VlcMediaPlayer(m_instance);

    m_player->setVideoWidget(ui->m_video);
    ui->m_video->setMediaPlayer(m_player);
    m_progressBar=new VlcWidgetSeekProgress(this);
    m_progressBar->setMediaPlayer(m_player);
    ui->m_video->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
    ui->m_video->show();

    m_media = new VlcMedia("http://www.youtube.com/watch?v=Btv7G0BV45g",m_instance);
    m_player->open(m_media);
    qDebug()<<"m_player->video():"<<m_player->video();
    m_player->play();

    m_progressBar->resize(ui->m_video->width(),30);
    m_progressBar->move(ui->m_video->x(),ui->m_video->y()+ui->m_video->height()+20);
    m_progressBar->show();

}

expPlayer::~expPlayer()
{
    delete ui;
}


void expPlayer::on_pushButton_clicked()
{



}

void expPlayer::on_pushButton_2_clicked()
{
    m_player->setPlaybackRate(m_player->playbackRate()+1);
}

void expPlayer::on_pushButton_3_clicked()
{
    //It should play the video backward with more playback rate.
}
qt 
5
Vinay Kumar Shukla 31 Oktober 2020, 06:54

3 jawaban

Jawaban Terbaik

VLC tidak memiliki kemampuan ini. Sebagai solusinya, Anda dapat mencoba VLC dengan ffmpeg. Saya tidak pernah menggunakannya, tetapi:

  1. Anda dapat menggunakan ffmpeg untuk membalikkan video, lihat ini dan Membalikkan pemutaran video melalui ffmpeg, mis.
  2. Anda dapat menggunakan ffmepg dengan VLC, lihat ini, mis.

Jadi saya kira Anda bisa mencapai apa yang Anda butuhkan dengan solusi ini.

Sumber terkait lainnya, yang saya tidak yakin akan membantu Anda

  1. Anda dapat mencoba menggabungkan alternatif sumber terbuka lainnya dengan VLC, sama seperti yang disarankan di atas untuk ffmpeg.

    1.1. Anda dapat mencoba menggunakan AviSynth dengan VLC.

    1.2. Anda dapat mencoba menggunakan Avidemux dengan VLC. Dulu video bisa dibalik dengan itu (lihat juga ini) , tapi Saya tidak yakin itu mungkin saat ini. Saya juga tidak yakin apakah mungkin untuk menggabungkan VLC dengan Avidemux.

    1.3. Pemutar video yang memiliki fitur pemutaran bingkai demi bingkai

    1.4. Pemutar video dengan langkah mundur bingkai demi bingkai untuk Linux, termasuk ekstensi Bingkai Sebelumnya.

    1.5. Gstreamer

  2. Bagaimana cara membalikkan klip video?

  3. https://forum.videolan.org/viewtopic.php?t=139871

  4. https: //forum.videohelp.com/threads/345380-video-player-that-can-step-forward-backwards-and-change-play-speed

Catatan: OpenShot adalah perangkat lunak open source lain yang dapat diputar mundur... beranikah Anda mencoba menggabungkannya dengan VLC?

1
sancho.s ReinstateMonicaCellio 13 Desember 2020, 09:34

Ini sebenarnya bukan solusi untuk masalah Anda, melainkan sedikit info tentang mengapa Anda mungkin tidak menemukan jawaban yang memuaskan.

Alasan mengapa fungsi ini biasanya tidak didukung terletak pada sifat codec video itu sendiri. Bukan kebetulan bahwa pada dasarnya tidak ada pemutar video yang menawarkan opsi itu, saya memeriksa VLC Media Player, Media Player Classic, Windows Films & TV, dan Windows Media Player, tidak ada yang mendukungnya. Satu-satunya perangkat lunak yang saya coba yang dapat melakukannya adalah perangkat lunak pengeditan video DaVinci Resolve, dan bahkan di sana, masalahnya jelas: pemutaran maju mulus, dan mundur anehnya berombak (kecuali ketika memutar file resolusi rendah, di mana itu berhasil baik).

Jadi apa masalahnya?

Di sebagian besar codec video, data video terdiri dari beberapa bingkai utama yang dipisahkan oleh banyak bingkai perantara. Frame perantara ini sebenarnya tidak berisi semua data yang diperlukan untuk merendernya sendiri, hanya berisi sedikit data yang memungkinkannya dihitung berdasarkan frame sebelumnya. Penjelasan dasar yang bagus tentang cara kerjanya dapat ditemukan di video ini. Pada titik ini, seharusnya sudah jelas mengapa membalikkan proses ini mungkin bermasalah.

Untuk benar-benar menerapkan ini, pada dasarnya Anda harus terlebih dahulu menghitung semua bingkai antara dua bingkai utama dalam mode "maju", dan kemudian membalik urutannya. Karena decoding video biasanya melibatkan banyak akselerasi perangkat keras, mengimplementasikan hal seperti ini sama sekali tidak sepele. Pendekatan "naif" kemungkinan akan menghasilkan kinerja yang buruk.

Karena tampaknya vlc-qt tidak mendukungnya, menurut saya opsi Anda bergantung pada apa yang ingin Anda capai.

  1. Jika Anda hanya ingin sedikit bermain-main, Anda dapat mencoba menerapkan pembalik sendiri:

    Sayangnya, saya tidak dapat menemukan dokumentasi vlc-qt online saat ini (situs mereka tampaknya sedang down?) jadi saya memeriksa apa lagi yang ditawarkan QT. Saya belum pernah bekerja dengan ini sendiri, jadi ambil ini dengan sebutir garam ...

    Ada kelas bernama QVideoFrame yang pada dasarnya merangkum data piksel dari bingkai video yang didekodekan. Perhatikan bahwa data video yang didekodekan menempati urutan yang lebih besar, lebih banyak memori daripada file yang disandikan, jadi saya sarankan untuk membagi video menjadi bagian-bagian yang lebih kecil (kecuali file video yang ingin Anda putar sangat, sangat kecil), kemudian memuat semua frame dari salah satu bagian mungkin menjadi vektor objek QVideoFrame, kemudian membalik vektor itu dan memutar ulang urutan frame yang dihasilkan. Bahkan jika ini berhasil, kinerjanya kemungkinan akan mengerikan ...

  2. Oleh karena itu, jika Anda lebih serius dengan proyek Anda, saya sarankan mencari perpustakaan yang mendukung fitur seperti itu atau hanya melakukan apa yang dilakukan hampir semua pemutar video lainnya, cepat kembali ke langkah kecil...

1
GWD 12 Desember 2020, 03:14

LibVLC tidak mendukung pemutaran video mundur.

Anda dapat mengubah properti posisi atau waktu.

-1
mfkl 2 November 2020, 03:54