qmediaplayer获取流类型_c – 使用QMediaPlayer播放自定义流

在Qt应用中开发一个视频播放器,遇到问题:如何使用QMediaPlayer播放通过自定义协议接收的视频流。尝试将数据包写入QBuffer,然后通过QMediaPlayer播放,但QMediaPlayer无法检测到新数据包。询问如何通知QMediaPlayer媒体长度已变,或者是否有其他方式实现自定义流播放,以及可能使用的替代库或方法。目前使用的是Qt 5.4。

我彻底搜索了我的问题的答案,但到目前为止还没有其他帖子有用.

我正在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.

在此先感谢您的帮助.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值