使用VLC开发播放器,分为如下几步:

1. 下载VLC开源库

下载VLC开源库,可在官网上下载,

地址如下:http://download.videolan.org/pub/videolan/vlc/

可以在该网站下载想要的版本(32位或64位,Release或Debug等)

2. 建立项目工程以及相关播放界面开发

以建立Qt项目为例,根据VS向导进行创建工程,并通过Qt的Designer布局绘制播放的窗口(其他如MFC界面库同理,根据VS向导生成),这里主要是通过界面要拿到播放窗口的句柄,供图像的绘制。

3. 配置开发环境

注:本教程配置的VS环境,如果是Linux环境,请自行配置环境变量和链接路径。

前提:将VLC的库和头文件放在.sln同级目录下的VlcSDK目录下

首先,需要在工程属性中,C/C++ > 常规 > 附加包含目录中添加 $(SolutionDir)VlcSDK供编译时能够找到VLC的相关头文件。

其次,需要配置链接时的库目录和库文件,需要在工程属性中,链接器 > 常规 中添加$(SolutionDir)VlcSDK供链接时能够找到相关的.lib文件,还需要在 链接器 > 输入 中添加libvlc.lib和libvlccore.lib 文件供链接使用(注意:该方式为静态链接动态库,也可以通过动态链接动态库的方式,此时就不要想配置链接库目录和链接库lib文件了)。

如下图:

4. VLC的API查找与使用

使用Vlc开源库的主要API如下:

//创建实例,引入头文件#include "vlc/vlc.h"

m_vlcInstance = libvlc_new(0, NULL);

//创建媒体对象实例以及传入播放文件的路径

libvlc_media_t* media = libvlc_media_new_path(m_vlcInstance, filepath.toUtf8().data());

//创建播放器实例

libvlc_media_player_t* mediaPlayer = libvlc_media_player_new_from_media(media);

//设置事件回调

libvlc_event_manager_t *em = libvlc_media_player_event_manager(mediaPlayer);

libvlc_event_attach(em, libvlc_MediaPlayerTimeChanged, vlcEvents, this);

libvlc_event_attach(em, libvlc_MediaPlayerEndReached, vlcEvents, this);

libvlc_event_attach(em, libvlc_MediaPlayerStopped, vlcEvents, this);

libvlc_event_attach(em, libvlc_MediaPlayerPlaying, vlcEvents, this);

libvlc_event_attach(em, libvlc_MediaPlayerPaused, vlcEvents, this);

其中vlcEvents 为回调函数,原形为void vlcEvents(const libvlc_event_t *ev, void *param);可根据ev->type判断当前播放的状态,如libvlc_MediaPlayerStopped、libvlc_MediaPlayerPaused、libvlc_MediaPlayerEndReached等等状态。

//设置播放比例与播放窗口的句柄

libvlc_video_set_aspect_ratio(mediaPlayer, "1:1");

libvlc_video_set_mouse_input(mediaPlayer, false);

libvlc_video_set_key_input(mediaPlayer, false);

libvlc_media_player_set_hwnd(mediaPlayer, (void *)wid);

注:上述wid为播放窗口的句柄;设置libvlc_video_set_mouse_input(mediaPlayer, false);和libvlc_video_set_key_input(mediaPlayer, false);即表示vlc不接收键盘事件和鼠标事件,只有这样设置,才不影响我们自己通过接收鼠标和键盘控制相关操作,否则,自己没发控制对播放界面的操作,包括双击放大,右键菜单等等。

5. 运行控制与释放

运行程序后,可通过如下API进行控制操作:

//开始播放
libvlc_media_player_play(mediaPlayer);

//暂停播放

libvlc_media_player_set_pause(mediaPlayer);

//停止播放

libvlc_media_player_stop(mediaPlayer);

//判断是否正在播放

libvlc_media_player_is_playing(mediaPlayer);

推出程序或切换播放实例时,需要释放之前创建的实例,注意调用如下API:

libvlc_media_release(media);

libvlc_media_player_release(mediaPlayer);

libvlc_release(m_vlcInstance);

以上释放操作,需要先调用停止播放的接口,将播放中的播放器停止后,才能释放相关实例。

6. 完成以上操作后,基本的播放器即已成型,接下来就是都界面的各种美化以及操作的各种完善,例如:播放进度可通过libvlc_time_t libvlc_media_player_get_length( libvlc_media_player_t *p_mi );、libvlc_time_t libvlc_media_player_get_time( libvlc_media_player_t *p_mi );以及void libvlc_media_player_set_time( libvlc_media_player_t *p_mi, libvlc_time_t i_time );等API进行控制,在这里就不再赘述。

其开发出来的效果如下:

使用VLC开源库开发播放器相关推荐

  1. 网易云信亮相LiveVideoStackCon2022,解构基于WebRTC的开源低延时播放器实践

    8 月 5 日- 6 日,LiveVideoStackCon 2022 音视频技术大会上海站隆重召开,作为音视频领域颇具影响力的技术大会,此次大会吸引了众多行业专家,融汇新概念.新技术.新趋势和新思想 ...

  2. iOS 开发 - 播放器Demo开发记录

    iOS 开发 - 播放器Demo开发记录 标签: ios 2014-12-22 14:14 518人阅读 评论(0) 收藏 举报  分类: Mac OS X(50)  版权声明:本文为博主原创文章,未 ...

  3. 开源ckplayer 网页播放器, 跨平台 html5 mobile ,flv f4v mp4 rtmp协议

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 开源ck ...

  4. C++基于ffmpeg和QT开发播放器~学习笔记

    C++基于ffmpeg和QT开发播放器 B站网址 https://www.bilibili.com/video/BV1h44y1t7D8?p=2&spm_id_from=pageDriver ...

  5. 乐库网页播放器与动态切换图片新闻

    乐库网页播放器: <html> <head> </head> <body> <script type="text/javascript& ...

  6. 开源ckplayer 网页播放器, 跨平台(html5, mobile),flv, f4v, mp4, rtmp协议. webm, ogg, m3u8 !

    开源ckplayer 网页播放器, 跨平台(html5, mobile),flv, f4v, mp4, rtmp协议. webm, ogg, m3u8 ! 博客分类: Javascript /Jque ...

  7. java音乐播放器脚本之家,分享|3 个开源的音乐播放器:Aqulung、Lollypop 和 GogglesMM...

    音乐是生活的一部分.维基百科关于音乐发展历史的文章有这样一段不错的描述说:"全世界所有的人们,包括哪怕是最孤立.与世隔绝的部落,都会有自己的特色音乐--"好吧,我们开源人就构成了一 ...

  8. 【超详细】开源JZVideo饺子播放器播放器配置使用以及其自定义

    文章目录 特点 配置 添加依赖 添加布局 添加逻辑 修改AndroidManifest.xml 小问题 展示图 自定义 自定义UI 编写自定义类 重新应用控件 应用 总结 参考链接 继续找播放器,找到 ...

  9. 软件经验|GDAL空间数据开源库开发介绍

    GDAL(Geospatial Data Abstraction Library)是使用C/C++语言编写的用于读写空间数据的一套跨平台开源库.GDAL库可以读取.写入.转换.处理各种栅格数据格式,它 ...

最新文章

  1. 最先进的图像分类算法:FixEfficientNet-L2
  2. 【Python-ML】SKlearn库RANSAC拟合高鲁棒性回归模型
  3. Array.of()方法
  4. 【codevs2492】【Tyvj1941】上帝造题的七分钟2,线段树的特别技巧
  5. 泛型的应用-vue3之ref
  6. Zookeeper概念介绍
  7. iphone11主卡在上还是下
  8. 小程序体验版白屏(已解决)
  9. Comma Separated Values Format
  10. ThinkPad L13笔记本怎么U盘重装系统教学
  11. 儿童汽车拼图游戏 - 儿童游戏拼图2岁-5岁
  12. 电脑耳机电流声的消除2021-09-11
  13. 企查查移动端技术总监李骁:以数据之力赋能企业信息服务平台的技术提效
  14. FreeRTOS简介
  15. oracle条件查询数量统计,Oracle多条件的统计查询(case when)
  16. 基于java的电子病历管理系统ssh框架
  17. docker架构的详解
  18. 实现打印日历的一种方式(-,-)
  19. 微透镜阵列的主要应用_阵列的应用
  20. uniapp微信小程序不强制登陆的逻辑(模仿大厂登陆)

热门文章

  1. windows下redis主从配置
  2. 优秀文章收藏(慢慢消化)持续更新~
  3. oracle streams缺点,streams 日差治理及监控
  4. xmind收费与免费的区别_免费版与付费版地比较有何区别.PDF
  5. java中的向上取整和向下取整
  6. 在Spring中一个bean依赖于另外一个bean,如何解决?
  7. centos7删除符号链接_【已解决】Linux中如何删除软连接
  8. 正则表达式详解-值得收藏
  9. 智能穿戴+人工智能,华米科技向大健康领域进军
  10. C++后台服务崩溃堆栈日志