栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

vlc-qt中VlcVideoStream类的简单使用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

vlc-qt中VlcVideoStream类的简单使用

1、处理视频时需要的几个类:

VlcInstance,VlcMedia(连接视频)

VlcMediaPlayer(控制播放)

VlcVideoStream(视频抽帧)

VlcWidgetVideo(显示视频的控件)

2、视频抽帧:

从VlcVideoStream派生一个类,比如VideoStreaming ,实现virtual void frameUpdated(),但是发现控件VlcWidgetVideo上就不显示了,我理解的是图片被VlcVideoStream截获,因此不能在VlcWidgetVideo显示。获得的图是YUV格式的,需要转换为RGB才可以方便自定义的图片处理。

3、VlcVideoStream子类化

class VideoStreaming : public VlcVideoStream
{
    Q_OBJECT
signals:
    void    sendImage(QImage);
public:
    explicit VideoStreaming(Vlc::RenderFormat format, QObject *parent = 0);
    ~VideoStreaming();
    void frameUpdated();
};

4、VideoStreaming

VideoStreaming::VideoStreaming(Vlc::RenderFormat format, QObject *parent)
    : VlcVideoStream(format, parent){
}

VideoStreaming::~VideoStreaming(){
}

void VideoStreaming::frameUpdated()
{
    std::shared_ptr pframe = std::dynamic_pointer_cast(renderframe());
    if (!pframe){
        qDebug()<<"frame err";
        return; // LCOV_EXCL_LINE
    }
    int rows = pframe->height + pframe->height / 2;
    int cols = pframe->width;
    int matType = CV_8UC1 ;
    cv::Mat myuv(rows,cols,matType,(void*)pframe->frameBuffer.data());
    cv::Mat mrgb(pframe->height, pframe->width, CV_8UC3);
    cv::cvtColor(myuv, mrgb, CV_YUV2RGB_I420);
    QImage img((const unsigned char *)(mrgb.data), mrgb.cols, mrgb.rows, mrgb.cols * 3, QImage::Format_RGB888);
    img.rgbSwapped();
    emit sendImage(img);
}

5、创建对象

m_video_stream= new VideoStreaming(Vlc::YUVFormat);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/699265.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号