我有一个有效的流媒体设备(带有相机模块的树莓派 - 它有一个名为“raspivid”的工具),我使用netcat从中直播视频
raspivid -t 999999 -w 300 -h 300 -hf -fps 20 -o - | nc -l 9999
在Ubuntu中,使用netcat连接到设备并将视频流式传输到mplayer后,一切都像魅力一样......
nc *ip* 9999 | mplayer -fps 200 -demuxer h264es -
现在,我想让这个视频适用于Windows用户(需要最少的设置,可能只有.exe)。 我决定使用Qt 5 - 它有qTcpSocket和QMediaPlayer(根据doc,它支持流输入)。 我已经有一些代码可以从套接字读取数据并播放本地文件。
但播放流似乎不起作用。也许是因为视频格式和一些编解码器? WMP也无法播放我使用raspivid保存的视频,尽管vlc可以完美播放。 我还在raspberry pi中测试了一个简单的.avi文件(Qt在本地光盘中成功播放)并在Qt中播放相同的TcpStream但没有成功。
此外,在从网上进行netcat并在Windows中运行已编译的程序之后,我可以看到覆盆子pi上的wifi加密狗上的LED开始闪烁 - 因此流到达应用程序。
你能不能给我一些建议,下一步做什么/尝试?
我以前没有太多使用C ++的经验,所以如果我问的是什么问题,请不要太过刻意地打击我:)
此外,“SimpleChatClient”来自我开始研究的随机模板..
SimpleChatClient::SimpleChatClient(QWidget* parent, Qt::WindowFlags flags)
: QWidget(parent, flags)
{
QVBoxLayout* main = new QVBoxLayout(this);
player = new QMediaPlayer(this, QMediaPlayer::StreamPlayback);
QVideoWidget* widget = new QVideoWidget;
widget->show();
player->setVideoOutput(widget);
main->addWidget(widget);
setLayout(main);
socket = new QTcpSocket(this);
connect(socket, SIGNAL(connected()), this, SLOT(playStream()));
toggleConnection();
}
SimpleChatClient::~SimpleChatClient()
{
}
void SimpleChatClient::toggleConnection()
{
if (socket->state() == QAbstractSocket::UnconnectedState)
{
socket->connectToHost(SERVER, PORT);
}
else
{
socket->disconnectFromHost();
}
}
void SimpleChatClient::playStream()
{
player->setMedia(QMediaContent(), socket);
//player->setMedia(QUrl::fromLocalFile("C:\\Users\\m\\d.avi")); //This works for local files
if (socket->canReadLine())
{
player->play();
}
}