我正在编写一个应用程序来收听 Mac OS X 上 Qt 4.8.1 中的播客。现在,我将我设置MediaObject
为使用来自播客的 RSS 项目的附件 URL,如下所示:
mediaObj->setCurrentSource(Phonon::MediaSource(QUrl(idx.data(Metadata::Enclosure).toString())));
注意:idx
是QModelIndex
对应QStandardItem
于用户在QTreeView
小部件中单击的我的模型中的。
不过,我现在有两个问题。
- 每当我暂停流并再次启动它时,它都会从头开始。没那么有帮助。:-(
- 如果我使用我的
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 模块的一个长期存在的问题,我可能不得不以其他方式实现流。帮助?