我彻底搜索了我的问题的答案,但到目前为止还没有其他帖子有用.
我正在Qt中开发一个应用程序,我需要播放通过自定义协议接收的视频流.我发现自己试图以各种可能的方式在QMediaPlayer中提供这些数据包而没有成功.我的想法是在QBuffer中写入传入的数据包,然后从QMediaPlayer读取它们.按照我的试用:
/// VideoPlayer.h
class VideoPlayer : public QWidget
{
public slots:
void play();
void handlePacket(QByteArray);
[...]
private:
QMediaPlayer mediaPlayer;
QBuffer buffer;
};
/// VideoPlayer.cpp
VideoPlayer::VideoPlayer(QWidget *parent)
: QWidget(parent)
, mediaPlayer(0, (QMediaPlayer::StreamPlayback))
{
buffer.open(QBuffer::ReadWrite);
}
void VideoPlayer::handlePacket(QByteArray packet)
{
buffer.buffer().append(packet);
}
void VideoPlayer::play()
{
mediaPlayer.setMedia(QMediaContent(), &buffer);
mediaPlayer.play();
}
使用上面的QMediaPlayer在调用mediaPlayer.setMedia(QMediaContent(),& buffer)时播放缓冲区中的数据,但似乎忽略了新的数据包被附加到缓冲区.可能是因为我正在直接访问内部QByteArray(我检查了QIODevice :: readyRead信号是否被发出而且是)?我发现除了再次调用setMedia之外,没有办法让QMediaPlayer播放新的传入数据.有没有办法通知QMediaPlayer媒体长度已经改变?
有没有更简单的方法来做到这一点?我想创建自己的QIODevice或以某种方式将我的数据包接收器集成到Qt框架中以提供我的自定义流作为QMediaContent?
是否有其他库或方法可以让我完成这项任务?
我正在使用Qt 5.4.
在此先感谢您的帮助.
在Qt应用中开发一个视频播放器,遇到问题:如何使用QMediaPlayer播放通过自定义协议接收的视频流。尝试将数据包写入QBuffer,然后通过QMediaPlayer播放,但QMediaPlayer无法检测到新数据包。询问如何通知QMediaPlayer媒体长度已变,或者是否有其他方式实现自定义流播放,以及可能使用的替代库或方法。目前使用的是Qt 5.4。
946

被折叠的 条评论
为什么被折叠?



