千家信息网

Qt如何实现vlc读取和控制

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章给大家分享的是有关Qt如何实现vlc读取和控制的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、前言vlc本身是个全功能的很牛逼的播放器,你能够想到的播放的功能他都
千家信息网最后更新 2026年11月02日Qt如何实现vlc读取和控制

这篇文章给大家分享的是有关Qt如何实现vlc读取和控制的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一、前言

vlc本身是个全功能的很牛逼的播放器,你能够想到的播放的功能他都有,比如获取视频文件的长度、唱片的封面、当前播放进度、设置播放进度、声音控制、静音控制等,这些vlc都给你封装好了,你直接调用对应的api函数即可。

看vlc的官方对vlc的更新频率也是蛮高的,所以在各种新的视频标准和格式出来以后,他也是在不断的更新完善,比如H265,8K视频等,都能正常的播放,查阅vlc的动态库目录可以看见,vlc的部分解码用的就是ffmpeg,所以知道了为啥他这么强大了吧,原来是依赖ffmpeg这个超级牛逼的全功能解码库呢。

用vlc做控制这块有两种处理方式,一种是在线程中来定时读取,比如读取播放进度、当前各种状态、当前音量、静音等,还有一种方式是采用事件回调的形式,默认建议事件回调的机制,能够拿到很多事件消息,效率也更高。你只需要在打开视频以前调用libvlc_event_attach订阅自己感兴趣的事件,在不需要的时候比如关闭的时候调用libvlc_event_detach注销订阅的事件即可。

二、功能特点

  1. 多线程实时播放视频流和本地视频。

  2. 支持windows+linux+mac,支持vlc2和vlc3。

  3. 多线程显示图像,不卡主界面。

  4. 自动重连网络摄像头。

  5. 可设置边框大小即偏移量和边框颜色。

  6. 可设置是否绘制OSD标签即标签文本或图片和标签位置。

  7. 可设置两种OSD位置和风格。

  8. 可设置是否保存到文件以及文件名。

  9. 可直接拖曳文件到vlcwidget控件播放。

  10. 支持h365视频流+rtmp等常见视频流。

  11. 可暂停播放和继续播放。

  12. 支持回调模式和句柄两种模式。

  13. 支持线程读取进度等信息和事件回调两种处理模式。

  14. 自动将当前播放位置和音量大小是否静音以信号发出去。

  15. 提供接口设置播放位置和音量及设置静音。

  16. 支持存储单个视频文件和定时存储视频文件。

  17. 自定义顶部悬浮条,发送单击信号通知,可设置是否启用。

三、效果图

四、相关站点

  1. 国内站点:https://gitee.com/feiyangqingyun/QWidgetDemo

  2. 国际站点:https://github.com/feiyangqingyun/QWidgetDemo

  3. 个人主页:https://blog.csdn.net/feiyangqingyun

  4. 知乎主页:https://www.zhihu.com/people/feiyangqingyun/

  5. 体验地址:https://blog.csdn.net/feiyangqingyun/article/details/97565652

五、核心代码

void VlcThread::setSize(int width, int height){    if (vlcPlayer != NULL) {        QString option = QString("%1:%2").arg(width).arg(height);        QByteArray data = option.toUtf8();        const char *arg = data.constData();        //一旦打开视频以后要动态更改宽高比,值只能是vlc认识的比如 16:9 1:1 之类的        //const char *arg = "4:3";        libvlc_video_set_aspect_ratio(vlcPlayer, arg);    }}bool VlcThread::getIsPlaying(){    bool isPlaying = false;    if (vlcPlayer != NULL) {        int result = libvlc_media_player_is_playing(vlcPlayer);        isPlaying = (result != 0);    }    return isPlaying;}VlcThread::VlcState VlcThread::getState(){    VlcState state = VlcThread::VlcState_NothingSpecial;    if (vlcPlayer != NULL) {        state = (VlcState)libvlc_media_player_get_state(vlcPlayer);    }    return state;}uint VlcThread::getLength(){    uint length = 0;    if (vlcPlayer != NULL) {        length = libvlc_media_player_get_length(vlcPlayer);    }    return length;}uint VlcThread::getPosition(){    uint positon = 0;    if (vlcPlayer != NULL) {        positon = libvlc_media_player_get_time(vlcPlayer);    }    return positon;}void VlcThread::setPosition(int position){    if (vlcPlayer != NULL && !isRtsp) {        libvlc_media_player_set_time(vlcPlayer, position);    }}bool VlcThread::getMute(){    bool ok = false;    if (vlcPlayer != NULL) {        int result = libvlc_audio_get_mute(vlcPlayer);        ok = (result == 0);    }    return ok;}void VlcThread::setMute(bool mute){    if (vlcPlayer != NULL) {        libvlc_audio_set_mute(vlcPlayer, mute ? 1 : 0);    }}int VlcThread::getVolume(){    int volume = 0;    if (vlcPlayer != NULL) {        volume = libvlc_audio_get_volume(vlcPlayer);    }    return volume;}void VlcThread::setVolume(int volume){    if (vlcPlayer != NULL) {        libvlc_audio_set_volume(vlcPlayer, volume);    }}int VlcThread::getTrack(){    int track = 0;    if (vlcPlayer != NULL) {        track = libvlc_audio_get_track(vlcPlayer);    }    return track;}int VlcThread::getTrackCount(){    int trackCount = 0;    if (vlcPlayer != NULL) {        trackCount = libvlc_audio_get_track_count(vlcPlayer);    }    return trackCount;}void VlcThread::setTrack(int track){    if (vlcPlayer != NULL) {        track = libvlc_audio_set_track(vlcPlayer, track);    }}

感谢各位的阅读!关于"Qt如何实现vlc读取和控制"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

视频 事件 文件 支持 控制 可设 位置 功能 线程 进度 静音 标签 模式 站点 视频流 音量 主页 信号 内容 动态 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网与新科技 广州凡科互联网科技 沃里互联网科技 菲比寻常互联网科技 伴你行互联网科技有限公司 互联网科技博客 互联网科技有限公司 翻译 开启互联网科技时代小说 现代科技和互联网有关系吗 昭通云南众福互联网科技有限公司 保险科技服务互联网营销体系 国大互联网教育科技有限公司薪资 上海京穆互联网科技有限公司 皮皮虾互联网科技有限公司 互联网科技资金流入 领航科技大厦互联网公司 易企秀互联网科技是做什么的 互联网金融运营模式中的金融科技 好易买互联网科技 科技互联网专业工作会议发言稿 互联网最新的科技有限公司 奇酷互联网科技 米客互联网科技 菲比寻常互联网科技 恒银科技与互联网金融 团飞科技与伯堂互联网服务平台 辽宁互联网新科技 广西互联网科技孵化中心 领航科技大厦互联网公司 互联网企业和网络科技有限公司
0