vlc-qt中VlcVideoStream类的简单使用

vlc-qt中VlcVideoStream类的简单使用,第1张

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);

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5699389.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存