我想流式传输视频,RTSP, HTTP and UDP
因为它们受vlc
. 我正在使用Qt5
并且Qt
没有那么多好的媒体库,所以我选择开源,现在libvlc
通过VLC-Qt
包装器使用。
我可以在我的程序中接收流视频,接收流视频的源代码如下
void player::on_actionNETWORK_STREAM_triggered()
{
QString url= QInputDialog::getText(this,tr("Open Url"),tr("Enter the URL you want to play"));
if(url.isEmpty())
return;
else
{
m_media=new VlcMedia(url,m_instance);
playlist.append(url);
m_mediaList->addMedia(m_media);
m_player->open(m_media);
}
}
要接收流式视频,我只是将该视频的 url 放入新VlcMedia
实例中,但不知道如何流式传输视频。
在阅读VLC-QT
包装器的文档时,我读到它有一个class
命名VlcVideoStream
但我不知道如何使用该类来进行流式传输。此文档的链接class
如下
https://vlc-qt.tano.si/reference/1.1/classvlcvideostream
编辑 1
我在互联网上搜索了更多关于这个东西的信息,然后我发现了一些关于如何使用的讨论,VlcVideoStream
并且我已经实现了代码。源代码如下
class VideoStreaming : public VlcVideoStream
{
Q_OBJECT
public:
explicit VideoStreaming(QObject *parent = nullptr);
void frameUpdated();
};
void VideoStreaming::frameUpdated()
{
int rows,cols;
std::shared_ptr<const VlcAbstractVideoFrame> frame= renderFrame();
if (!frame)
return; // LCOV_EXCL_LINE
rows = frame->height + frame->height/2;
cols = frame->width;
qDebug()<<"Frame updated gets called";
}
并使用以下行实例化它
m_video_stream= new VideoStreaming(ui->m_video);
m_video_stream->init(m_player);
现在我能够接收YUV
视频的帧,但直到现在还不知道如何流式传输视频。任何帮助表示赞赏。即使我对纯 libvlc
流媒体解决方案持开放态度,因为VLC-QT
包装器并不是支持视频流的好包装器。