Mac OS X の Qt 4.8.1 でポッドキャストを聞くアプリケーションを作成しています。現在、MediaObjectポッドキャストの RSS アイテムからエンクロージャー URL を使用するように設定しています。
mediaObj->setCurrentSource(Phonon::MediaSource(QUrl(idx.data(Metadata::Enclosure).toString())));
注:idxは、ユーザーがウィジェットでクリックしたモデル内にQModelIndex対応するです。QStandardItemQTreeView
ただ、現在2つの問題があります。
- ストリームを一時停止して再開すると、最初から開始されます。あまり役に立ちません。:-(
- ウィジェットを使用してPhonon::SeekSlider、まだバッファリングしていないストリームの一部にスキップすると、ストリームの先頭に戻ってしまいます。
私の (潜在的に欠陥のある) 考えではmediaObj、ストリームの特定の時間から再生を開始する方法を見つけられれば、これらの問題の両方を解決できるというものです。それで、私はこれを試しました:
void BrodCastMainWin::pauseStream()
{
    //save the "left off at" point in the stream
    qDebug() << "current time is:" << currentTime;
    qDebug() << "Saving place at" << currentTimeString
             << "in item" << nowPlaying.data(Qt::DisplayRole).toString();
    //need to use QModelIndex for setData()
    QModelIndex nowPlayingHandle = nowPlaying;
    feed.setData(nowPlayingHandle, QVariant(currentTime), Metadata::LeftOffAt);
    //pause the stream
    mediaObj->pause();
}
void BrodCastMainWin::playStream()
{
    //seek to the "left off at" point in the stream
    qDebug() << "Trying to seek to" << convertTime(nowPlaying.data(Metadata::LeftOffAt).toLongLong())
             << "in item" << nowPlaying.data(Qt::DisplayRole).toString();
    mediaObj->seek(nowPlaying.data(Metadata::LeftOffAt).toLongLong());
    //play the file
    mediaObj->play();
}
注:currentTimeは、最後にtick()信号が発信された時点の時間mediaObjです。currentTime()内のメソッドを使用してこのデータを取得しようとしましたがmediaObj、うまくいきませんでした。しかし、それは別の日の戦いです。同様にcurrentTimeString、人間が読める形式の同じ情報です。
残念ながら、動作しません:-(。これは、ストリームを再生すると、そのコードで何が起こるかです:
current time is: 32153 
Saving place at "00:32" in item "Leo Laporte - The Tech Guy 867" 
switching button to 'play'
グルーヴィー。しかし、もう一度プレイしようとすると:
Trying to seek to "00:32" in item "Leo Laporte - The Tech Guy 867" 
Playing/Loading/Buffering; switching button to 'pause' 
current time is: 0 
Saving place at "00:00" in item "Leo Laporte - The Tech Guy 867" 
switching button to 'play' 
Trying to seek to "00:00" in item "Leo Laporte - The Tech Guy 867" 
Playing/Loading/Buffering; switching button to 'pause' 
私は完全に混乱しています。Phonon を望まない方法で動作させようとしているようです。私が恐れているのは、これは Phonon モジュールの長年にわたる問題のように思われることであり、別の方法でストリームを実装する必要があるかもしれません。ヘルプ?