最简单的 libVLC 播放器

proginn468312

共 2120字,需浏览 5分钟

 ·

2020-08-21 08:59

libVLC 非常的强大,利用它可以很容易地实现 VLC Media Player 中的任何功能,比如:快速播放媒体、从中提取元数据,甚至是提取单个视频帧 ......


由于 libVLC 是跨平台的,因此在编写程序时,应尽可能的兼容多个系统。除此之外,我们后续还会添加一些 GUI 交互。所以从本节开始,会逐渐引入 Qt(当然了,你也可以选择自己擅长的其他 GUI 框架)。


为了介绍 libVLC 的用法,我们从最简单的播放器开始着手,来播放一个本地媒体或者网络串流,同时也能了解它的主要工作流程。



1

基本配置


配置 libVLC 比较简单,只需要引入相关库和头文件的路径就行了。但是在后续的示例中,这部分配置会被频繁的使用,所以为了方便起见,可以将其定义到一个独立的 pri 文件中(例如:libVLC.pri):


# vlc 相关配置
win32 {
    INCLUDEPATH += $$PWD/../vlc-3.0.8/sdk/include
    LIBS += -L$$PWD/../vlc-3.0.8/sdk/lib -llibvlc -llibvlccore
else {
    INCLUDEPATH += /usr/local/include
    LIBS += -L/usr/local/lib -lvlc -lvlccore
}


然后在使用时,只需要在 pro 文件中包含这个 pri 就可以了:


include($$PWD/../libVLC.pri)



2

工作流程


在使用 VLC API 之前,需要先将 vlc/vlc.h 头文件包含进来:


#include 
#include 

using namespace std;

int main()
{
    // vlc 播放相关代码

    return 0;
}


对于使用 libVLC 的程序来说,必须先通过 libvlc_new() 函数初始化一个 VLC 实例。


当然了,还需要创建一个媒体以及播放器,媒体分为两类:


  • 本地媒体:libvlc_media_new_path() 创建,参数为本地媒体路径。

  • 网络媒体:由 libvlc_media_new_location() 创建,网络流可以是 HTTP、RTSP 等。


const char * localMrl = "F:\\Videos\\Sample.mkv";
const char * rtspMrl = "http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8";

libvlc_instance_t *instance;
libvlc_media_player_t *player;
libvlc_media_t *media;

// 创建并初始化 libvlc 实例
instance = libvlc_new(0nullptr);

// 创建一个媒体
media = libvlc_media_new_path(instance, localMrl);
// media = libvlc_media_new_location(instance, rtspMrl);

// 创建一个媒体播放器
player = libvlc_media_player_new_from_media(media);


一旦准备就绪,就可以开始播放了:


libvlc_media_player_play(player);


但是这里有个问题,播放是异步的,因此要想办法等一会儿,否则程序很快就会退出:


waitPlaying(player);


注意:这里是等待播放结束(完整播放),你也可以使用 sleep() 等待若干秒。


最后,在程序结束之前,建议释放下 libVLC 的相关资源:


// 释放 media
libvlc_media_release(media);

// 释放 media player
libvlc_media_player_release(player);

// 释放 libvlc 实例
libvlc_release(instance);


切记,这是一个很好的习惯!


等待的具体实现如下,只要不出错、不结束,就一直等着吧:


void waitPlaying(libvlc_media_player_t *mp)
{
    libvlc_state_t state;
    do {
        state = libvlc_media_player_get_state(mp);
    } while (state != libvlc_Error && state != libvlc_Ended);
}



3

测试程序


运行程序,来看看效果吧:



看什么看,没想到你是这样的大熊兔 O(∩_∩)O哈哈~!


·END·
 

作者:一去、二三里
爱学习,爱编程,爱生活。
欢迎来撩,一起畅谈程序人生!

点个在看,么么哒!

浏览 97
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报