使用VLC开源库开发播放器


***【在线视频教程】***

好文章,来自【福优学苑@音视频+流媒体】

使用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文件了)。


如下图:


image.png


 


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.各种美化以及操作的各种完善

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进行控制,在这里就不再赘述。


 


其开发出来的效果如下:

image.png

好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***