首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用VLC-QT包装器流式传输视频

如何使用VLC-QT包装器流式传输视频
EN

Stack Overflow用户
提问于 2020-12-06 01:04:45
回答 1查看 248关注 0票数 0

我想使用RTSP, HTTP and UDP流式视频,因为它们是由vlc支持的。我使用的是Qt5,因为Qt没有那么多好的媒体库,所以我选择了开源,现在通过VLC-Qt包装器使用libvlc

我可以在我的程序中接收流视频,接收流视频的源代码如下所示

代码语言:javascript
复制
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包装器的文档时,我读到它有一个名为VlcVideoStreamclass,但我不知道如何使用该类进行流式传输。下面给出了此class的文档链接

https://vlc-qt.tano.si/reference/1.1/classvlcvideostream

编辑1

我在互联网上搜索了更多关于这个东西的信息,然后我找到了一些关于如何使用VlcVideoStream的讨论,我已经实现了这方面的代码。源代码如下所示

代码语言:javascript
复制
class VideoStreaming : public VlcVideoStream
{
    Q_OBJECT
public:
    explicit VideoStreaming(QObject *parent = nullptr);

    void frameUpdated();
};
代码语言:javascript
复制
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";
}

并用下面的代码行实例化它

代码语言:javascript
复制
    m_video_stream= new VideoStreaming(ui->m_video);
    m_video_stream->init(m_player);

现在我能够接收到视频的YUV帧,但直到现在还不知道如何流式传输视频。任何帮助都是非常感谢的。甚至我也对纯粹的libvlc流媒体解决方案持开放态度,因为VLC-QT包装器并不是支持视频流的好包装器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-07 20:03:57

我只需使用VlcMediasetOption()函数来设置流属性,它就能正常工作。

代码语言:javascript
复制
    m_media = new VlcMedia("file:///home/vinay/Media Library/lion-sample.webm",m_instance);
    m_media->setOption(":sout=#transcode{vcodec=h264,acodec=mpga,ab=128,channels=2,samplerate=44100,scodec=none}:udp{dst=127.0.0.1:1234}");
    m_media->setOption(":no-sout-all");
    m_media->setOption(":sout-keep");

这些字符串参数取自vlc应用程序。当我们通过vlc应用程序流式传输视频时,它会在最后一个窗口中显示您设置的所有这些参数。所以我只是复制这些参数,并将其作为参数传递给setOption(),它就可以工作了。

您可以在此链接中阅读我对此主题的详细讨论

https://forum.qt.io/topic/121483/how-to-stream-the-video-using-vlc-qt-wrapper-or-libvlc/10

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65159652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档