Need Help with GStreamer and Invalid URI in QT Multimedia



  • Hello, I am trying to create a replica of Itunes for my class. I am using taglib to get the tags of a ".mp3" file to populate my application. Also I am trying to create a player using Qtmultimedia but it seems to be giving some sort of error;
    {
    GStreamer; Unable to pause - "/home/xtiwix/Music/Drake Feat Aaliyah - Enough Said.mp3"
    Error: "Invalid URI "/home/xtiwix/Music/Drake%20Feat%20Aaliyah%20-%20Enough%20Said.mp3"."
    }

    I have been working on this for quite a while now, and I seem not to be able to get it right, is there any hints, help or tips that might guide me in the right path.

    here I attached the two function responsible for these tasks.
    void MainWindow::create_player()
    {
    // Create new Media Player
    m_player = new QMediaPlayer(this);

    // Create new playlist
    m_playlist = new QMediaPlaylist(this);
    
    m_playlist->setPlaybackMode(QMediaPlaylist::Loop);
    
    // boolean variable for functions
    m_hasSong = false;
    
    // Create time display of the media
    m_timedisplay = new QLCDNumber;
    m_timedisplay->display("00:00");
    
    // Self defined functions
    connect(m_player, SIGNAL(durationChanged(qint64)), SLOT(durationChanged(qint64)));
    
    // the m_timedisplay updater
    connect(m_player, SIGNAL(positionChanged(qint64)),this, SLOT(tick(qint64)));
    
    // Song Progress slider
    m_songslider = new QSlider(Qt::Horizontal, this);
    
    // the song progress slider updater
    connect(m_player, SIGNAL(positionChanged(qint64)),this, SLOT(progress(qint64)));
    
    // HBoxLayout for songslider(progress) and timedisplay(progress)
    m_songinfo_layout = new QHBoxLayout;
    m_songinfo_layout->addWidget(m_songslider);
    m_songinfo_layout->addWidget(m_timedisplay);
    
    // Another Layout containing buttons and songinfo layout
    m_toplayout = new QVBoxLayout;
    m_topwidget = new QWidget;
    m_toplayout->addLayout(m_switchingbutton_layout);
    m_toplayout->addLayout(m_songinfo_layout);
    
    // final product of the top layout
    m_topwidget->setLayout(m_toplayout);
    

    }

    void MainWindow::traverseDirs(QString path)
    {
    QString key, val;
    QStringList list;

    // init listDirs with subdirectories of path
    QDir dir(path);
    dir.setFilter(QDir::AllDirs | QDir::NoDotAndDotDot);
    QFileInfoList listDirs = dir.entryInfoList();
    
    // init listFiles with all *.mp3 files in path
    
    QDir files(path);
    files.setFilter(QDir::Files);
    files.setNameFilters(QStringList("*.mp3"));
    QFileInfoList listFiles = files.entryInfoList();
    
    for(int i=0; i < listFiles.size(); i++)
    {
        // init list with default values: ""
        for(int j=0; j<=COLS; j++)
            list.insert(j, "");
    
        // store file pathname into 0th position in list
        QFileInfo fileInfo = listFiles.at(i);
        list.replace(PATH, fileInfo.filePath());
    
        qDebug()  << i << "   " << fileInfo.filePath();
    
        QString filePathASCII = fileInfo.filePath();
    
        QByteArray filePatharray = filePathASCII.toLocal8Bit();
        char* filePathchar = filePatharray.data();
    
    
                TagLib::FileRef f(filePathchar);
                TagLib::Tag *tag = f.tag();
    
      qDebug() << tag->genre().to8Bit(true).data();
    
    
                // process all song tags
                // Note: this uses audiere. Replace with function from Qt5 multimedia module
                for(int j=0; j<10; j++) {
                    // get tag key and value
                    key =  j;
                    val =  j;
                    if(val.isEmpty()  ) val = "Unknown";
    
                    // store tag value in proper position in list
                   list.replace(GENRE , tag->genre().to8Bit(true).data());
                   list.replace(ARTIST, tag->artist().to8Bit(true).data());
                   list.replace(ALBUM , tag->album().to8Bit(true).data());
                   list.replace(TITLE , tag->title().to8Bit(true).data());
                   
                }
    
                // append list (song data) into songlist m_listSongs;
                // uninitialized fields are empty strings
                m_listSongs << list;
            }
    
            // base case: no more subdirectories
            if(listDirs.size() == 0) return;
    
            // recursively descend through all subdirectories
            for(int i=0; i<listDirs.size(); i++) {
                QFileInfo fileInfo = listDirs.at(i);
                traverseDirs( fileInfo.filePath() );
            }
    
            // Populate QListWidgets and QTableWidget
            populateListWidgets(m_listSongs);
            populateTableWidget(m_listSongs);
            return;
    

    }


  • Lifetime Qt Champion

    Hi and welcome to devnet,

    IIRC, when passing local file to the media player, you need to use the "file://" scheme so it knows it has to look in to the file system.

    Hope it helps



  • The solution from SGaist helped me out when I had the same error messages, many thanks!



Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.