一、前言

上一个作品是ffmpeg内核做的,由于ffmpeg太过于强大,很多初学者会看的云里雾里懵逼状态,也有很多用户只需要一个简单的播放视频流即可,根本不需要涉及到负责的解码转码等,于是vlc就上场了,他就是直接对ffmpeg做了深层次的封装,提供了友好的接口,具备这种境界的还有个mpv之类的,mpv相比于vlc还更牛逼在库文件就一个,貌似是封装成了静态库,不想vlc还要带一堆的动态库文件和插件文件,当然vlc的简单在于只需要几行代码就可以撸起来,让初学者看到效果很重要,很兴奋,可以更快速的进行下一步的编码中,体验编码的乐趣。

二、代码思路

第一步:引入vlc的头文件

# ifdef __cplusplus
extern "C" {
# endif #ifdef vlc3
#include <libvlc.h>
#include <libvlc_renderer_discoverer.h>
#include <libvlc_media.h>
#include <libvlc_media_player.h>
#include <libvlc_media_list.h>
#include <libvlc_media_list_player.h>
#include <libvlc_media_library.h>
#include <libvlc_media_discoverer.h>
#include <libvlc_events.h>
#include <libvlc_dialog.h>
#include <libvlc_vlm.h>
#include <deprecated.h>
#else
#include <libvlc.h>
#include <libvlc_structures.h>
#include <libvlc_media.h>
#include <libvlc_media_player.h>
#include <libvlc_media_list.h>
#include <libvlc_media_list_player.h>
#include <libvlc_media_library.h>
#include <libvlc_media_discoverer.h>
#include <libvlc_events.h>
#include <libvlc_vlm.h>
#include <deprecated.h>
#endif # ifdef __cplusplus
}
# endif

第二步:设置句柄打开视频流

bool VlcThread::init()
{
const char *tempArg = "";
const char *vlc_args[9] = {"-I", "dummy", "--no-osd", "--no-stats", "--ignore-config", "--no-video-on-top", "--no-video-title-show", "--no-snapshot-preview", tempArg};
vlcInst = libvlc_new(sizeof(vlc_args) / sizeof(vlc_args[0]), vlc_args);
if (vlcInst == NULL) {
return false;
} vlcMedia = libvlc_media_new_location(vlcInst, url.toUtf8().constData());
vlcPlayer = libvlc_media_player_new_from_media(vlcMedia);
if (vlcPlayer == NULL) {
return false;
} //设置播放句柄
VlcWidget *w = (VlcWidget *)this->parent();
#if defined(Q_OS_WIN)
libvlc_media_player_set_hwnd(vlcPlayer, (void *)w->winId());
#elif defined(Q_OS_LINUX)
libvlc_media_player_set_xwindow(vlcPlayer, w->winId());
#elif defined(Q_OS_MAC)
libvlc_media_player_set_nsobject(vlcPlayer, (void *)w->winId());
#endif //设置硬件加速 none auto any d3d11va dxva2
setOption(QString(":avcodec-hw=%1").arg("none"));
//设置通信协议 tcp udp
setOption(QString(":rtsp-%1").arg("tcp"));
//设置缓存时间 默认500毫秒
setOption(QString(":network-caching=%1").arg(300)); libvlc_media_player_play(vlcPlayer);
//qDebug() << TIMEMS << "init vlc finsh";
return true;
}

第三步:暂停及释放资源

void VlcThread::pause()
{
if (vlcPlayer != NULL) {
libvlc_media_player_pause(vlcPlayer);
}
} void VlcThread::next()
{
if (vlcPlayer != NULL) {
libvlc_media_player_pause(vlcPlayer);
}
} void VlcThread::free()
{
if (vlcInst != NULL) {
libvlc_release(vlcInst);
vlcInst = NULL;
} if (vlcMedia != NULL) {
libvlc_media_release(vlcMedia);
vlcMedia = NULL;
} if (vlcPlayer != NULL) {
libvlc_media_player_release(vlcPlayer);
vlcPlayer = NULL;
} //qDebug() << TIMEMS << "close vlc ok";
}

三、效果图

四、开源主页

  • 以上作品完整源码下载都在开源主页,会持续不断更新作品数量和质量,欢迎各位关注。
  • 本开源项目已经成功升级到V2.0版本,分门别类,图文并茂,保你爽到爆。
  • Qt开源武林秘籍开发经验,看完学完,20K起薪,没有找我!
  1. 国内站点:https://gitee.com/feiyangqingyun/QWidgetDemo
  2. 国际站点:https://github.com/feiyangqingyun/QWidgetDemo
  3. 开源秘籍:https://gitee.com/feiyangqingyun/qtkaifajingyan
  4. 个人主页:https://qtchina.blog.csdn.net/
  5. 知乎主页:https://www.zhihu.com/people/feiyangqingyun/

Qt开源作品2-视频流播放vlc内核的更多相关文章

  1. Qt开源作品38-无边框窗体方案(无抖动,支持win、linux、mac等系统,侧边半屏顶部全屏)

    一 前言 不知道各位程序员有没有遇到过这样一种困惑,好不容易在开源网站找到了类似的想要的项目代码,结果down下来一编译,我勒个去,几百个错误,根本没法用,熟悉的人还好可以直接阅读代码进行修改(有些只 ...

  2. Qt编写视频播放器(vlc内核)

    在研究qt+vlc的过程中,就想直接做个播放器用于独立的项目,vlc还支持硬件加速,不过部分电脑硬件不支持除外.用vlc的内核写播放器就是快,直接调用api就行,逻辑处理和ui展示基本上分分钟的事情, ...

  3. Github上的一些高分Qt开源项目【多图】

    游戏2D地图编辑器: 著名的TileMap编辑器,做2D游戏开发的一定不会陌生. Go 语言的IDE: Go语言的集成开发环境. Clementine Music Player: 功能很完善且跨平台支 ...

  4. js插件---10个免费开源的JS音乐播放器插件

    js插件---10个免费开源的JS音乐播放器插件 一.总结 一句话总结:各种插件都有很多,多去找. 二.js插件---10个免费开源的JS音乐播放器插件 亲测可用 音乐播放器在网页设计中有时候会用到, ...

  5. 我的第一个开源作品Kiwis2 Mock Server

    我的第一个开源作品Kiwis2 Mock Server,目前公测中,欢迎大家提供宝贵意见. 代码:https://github.com/kiwis2/mockserver 主页:https://kiw ...

  6. VLC和Qt结合编写流媒体rtsp播放器

            VLC播放器是一款功能强大且小巧的播放器,它支持多种多样的音视频格式,比如MPEG1,2以及mp3等等.并且通过Qt和VLC的结合能让每个开发者写出自己的视频流媒体播放器.     Q ...

  7. vs2008编译QT开源项目三国杀(五篇文章)

    请参看 http://tieba.baidu.com/f?kz=1508964881 按照上面的网址教程,下载三国杀源码,swig工具,并下载最新的QT4.8.2 for vs2008.我本机已经安装 ...

  8. EasyPlayer开源流媒体移动端播放器推出RTSP-RTMP-HTTP-HLS全功能Pro版

    EasyPlayerPro介绍 Android EasyPlayerPro专业版全功能播放器,是由EasyDarwin开源团队维护的一款支持RTSP.RTMP.HTTP.HLS多种流媒体协议的播放器版 ...

  9. 基于Qt Phonon模块实现音乐播放器

    这次使用Qt实现的是一个本地音乐播放器,可以播放下载在计算机本地的音乐,提供了添加歌曲,歌曲列表,清空列表的功能.默认歌曲列表循环播放.音乐播放的实现主要依赖的是Qt 的多媒体框架phonon.该音乐 ...

  10. 个人开源作品,即时通讯App支持文本、语音、图片聊天

    开源一个即时通讯类App,支持纯文本.语音.地理位置.图片聊天,同时还加入了好友圈功能,支持分享动态和发送图片,支持搜索附近的人,使用的百度地图定位功能:由Bmob后端云提供服务器支持,欢迎喜欢的伙伴 ...

随机推荐

  1. 0602-nn.Module

    0602-nn.Module 目录 一.nn.Module 1.1 构建一层网络--全连接层 1.2 构建多层网络--多层感知机 pytorch完整教程目录:https://www.cnblogs.c ...

  2. 6.19 成都站云原生 Meetup,KubeSphere 和 APISIX 等你来!

    以容器技术和容器编排为基础的云原生应用,被越来越多的企业用户接受和使用,并且在生产环境中使用容器技术的比例逐年增加.KubeSphere 作为一款面向应用的开源容器混合云,经过 3 年的发展和 10 ...

  3. 花生好车基于 KubeSphere 的微服务架构实践

    公司简介 花生好车成立于 2015 年 6 月,致力于打造下沉市场汽车出行解决方案第一品牌.通过自建直营渠道,瞄准下沉市场,现形成以直租.批售.回租.新能源汽车零售,四大业务为核心驱动力的汽车新零售平 ...

  4. Machine Learning Week_3 Classification Model

    目录 1 Classification and Representation 1.1 Classification unfamiliar words 1.2 Hypothesis Representa ...

  5. 函数(C语言)

    目录 1. 函数的概念 2. 库函数 2.1 标准库和头文件 2.2 库函数的使用方法 3. 自定义函数 3.1 函数的语法形式 3.2 函数的举例 4. 形参和实参 4.1 实参 4.2 形参 4. ...

  6. 怎样在Linux 环境 (红帽 rhel 7.3) 安装 Python 3

    自己装的虚拟机(红帽 7),默认安装的python2.7,更新为python 3.8  自己做个记录,方便日后查看 注意:红帽的yum 需要注册才能使用,必须要替换yum,替换方法请参见:怎样替换 r ...

  7. 4.3 Linux压缩文件或目录为.zip格式(zip命令)

    我们经常会在 Windows 系统上使用 ".zip"格式压缩文件,其实".zip"格式文件是 Windows 和 Linux 系统都通用的压缩文件类型,属于几 ...

  8. 3.5 Linux命令行下如何识别文件类型?

    对于第一次使用 Linux 命令行的用户,可能真的搞不清楚哪个是文件,哪个是目录,究其原因是很难直接通过名字看出来目录和文件的区别. 虽然从名称上不容易分辨,但是可以从颜色上进行区分.一般情况下,Li ...

  9. Python文件读取和写入方法

    读取 # 通过单字符串空格分隔 def count_words(filepath): with open(filepath, 'r') as file: string = file.read() st ...

  10. 2024 AH CSP-S 迷惑行为大赏

    洛谷专栏阅读:https://www.luogu.com.cn/article/0atx674s 一.概述 观前提示:本届CSP-S安徽省整活相较于其他省份不是那么"群英荟萃",观 ...