配置VS+VLC并播放视频


前言

在现代多媒体应用开发中,Visual Studio (VS) 和 VLC 播放器是两个强大的工具。Visual Studio 提供了一个全面的开发环境,支持多种编程语言和框架,而 VLC 播放器则是一个开源的多媒体播放器,支持几乎所有的音视频格式,并且可以通过其强大的 API 进行定制和扩展。本文将介绍如何在 Visual Studio 中配置 VLC 并实现视频播放功能。这对于那些希望在自己的应用程序中集成视频播放功能的开发者来说,尤其有用。


配置VS+VLC

首先我们需要先创建VS工程
然后把我们之前下载的include和lib放到里面去
在这里插入图片描述
接着我们把这些东西弄到vs里面:
首先把include放进去
在这里插入图片描述
然后把lib目录放进去:
在这里插入图片描述
在里面填上libvlc.lib;libvlccore.lib即可
在这里插入图片描述

VLC播放视频

基本流程

  1. 初始化 VLC 实例:创建一个 VLC 实例,用于后续的媒体播放操作。
  2. 设置日志和用户代理:配置日志详细级别和用户代理信息,以便调试和标识。
  3. 创建媒体对象:从指定的文件路径创建一个媒体对象,准备播放。
  4. 创建媒体播放器:从媒体对象创建一个媒体播放器,用于控制播放。
  5. 开始播放媒体:调用播放函数开始播放媒体。
  6. 等待播放完成:阻塞程序,直到播放结束或发生错误。
  7. 释放资源:释放媒体播放器、媒体对象和 VLC 实例,清理内存。

以下是代码中使用的主要函数的详细介绍,包括函数原型、作用、参数和返回值的含义:

1. libvlc_new

函数原型:

libvlc_instance_t* libvlc_new(int argc, const char *const *argv);

作用:
创建并初始化一个新的 VLC 实例。该实例用于管理 VLC 的全局设置和操作。

参数:

  • argc: 参数的数量(通常为 0)。
  • argv: 参数的数组(通常为 nullptr)。

返回值:

  • 返回一个 libvlc_instance_t* 类型的实例指针。如果创建失败,返回 nullptr

2. libvlc_set_user_agent

函数原型:

void libvlc_set_user_agent(libvlc_instance_t* p_instance, const char *psz_name, const char *psz_version);

作用:
设置 VLC 实例的用户代理信息。这通常用于网络请求中,以便服务器识别客户端。

参数:

  • p_instance: VLC 实例指针。
  • psz_name: 用户代理的名称。
  • psz_version: 用户代理的版本。

返回值:

  • 无返回值。

3. libvlc_set_log_verbosity

函数原型:

void libvlc_set_log_verbosity(libvlc_instance_t* p_instance, int level);

作用:
设置 VLC 实例的日志详细级别。这影响到日志信息的详细程度。

参数:

  • p_instance: VLC 实例指针。
  • level: 日志详细级别(从 054 表示详细日志)。

返回值:

  • 无返回值。

4. libvlc_media_new_path

函数原型:

libvlc_media_t* libvlc_media_new_path(libvlc_instance_t* p_instance, const char *psz_mrl);

作用:
从指定的路径创建一个媒体对象。psz_mrl 是媒体资源定位符(Media Resource Locator)。

参数:

  • p_instance: VLC 实例指针。
  • psz_mrl: 媒体文件的路径。

返回值:

  • 返回一个 libvlc_media_t* 类型的媒体对象指针。如果创建失败,返回 nullptr

5. libvlc_media_player_new_from_media

函数原型:

libvlc_media_player_t* libvlc_media_player_new_from_media(libvlc_media_t* p_md);

作用:
根据给定的媒体对象创建一个新的媒体播放器。

参数:

  • p_md: 媒体对象指针。

返回值:

  • 返回一个 libvlc_media_player_t* 类型的媒体播放器指针。如果创建失败,返回 nullptr

6. libvlc_media_player_play

函数原型:

int libvlc_media_player_play(libvlc_media_player_t* p_mi);

作用:
开始播放媒体。

参数:

  • p_mi: 媒体播放器指针。

返回值:

  • 返回 0 表示成功,返回其他值表示失败。

7. libvlc_media_player_get_state

函数原型:

libvlc_state_t libvlc_media_player_get_state(libvlc_media_player_t* p_mi);

作用:
获取当前媒体播放器的状态。

参数:

  • p_mi: 媒体播放器指针。

返回值:

  • 返回 libvlc_state_t 类型的状态值,如 libvlc_Playing(播放中)、libvlc_Ended(播放结束)、libvlc_Error(错误)等。

8. libvlc_media_release

函数原型:

void libvlc_media_release(libvlc_media_t* p_md);

作用:
释放媒体对象的资源。

参数:

  • p_md: 媒体对象指针。

返回值:

  • 无返回值。

9. libvlc_media_player_release

函数原型:

void libvlc_media_player_release(libvlc_media_player_t* p_mi);

作用:
释放媒体播放器的资源。

参数:

  • p_mi: 媒体播放器指针。

返回值:

  • 无返回值。

10. libvlc_release

函数原型:

void libvlc_release(libvlc_instance_t* p_instance);

作用:
释放 VLC 实例的资源。

参数:

  • p_instance: VLC 实例指针。

返回值:

  • 无返回值。

播放代码

#include <iostream>

// 避免 ssize_t 引发的错误
#if defined(_MSC_VER)
#include <basetsd.h>
typedef SSIZE_T ssize_t;
#endif

#include <vlc/vlc.h>
#include <thread>

using namespace std;



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);
}

int main()
{
    const char* localMrl = "./a.mp4";
    // const char* rtspMrl = "http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8";

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

    // 创建并初始化 libvlc 实例
    instance = libvlc_new(0, nullptr);
    if (!instance) {
        cerr << "Failed to create VLC instance" << endl;
        return -1;
    }

    libvlc_set_user_agent(instance, "VLC", "VLC");
    libvlc_set_log_verbosity(instance, 4);  // 设置详细日志级别

    // 创建一个媒体
    media = libvlc_media_new_path(instance, localMrl);
    // media = libvlc_media_new_location(instance, rtspMrl);
    if (!media) {
        cerr << "Failed to create media from path" << endl;
        libvlc_release(instance);
        return -1;
    }

    // 创建一个媒体播放器
    player = libvlc_media_player_new_from_media(media);
    if (!player) {
        cerr << "Failed to create media player" << endl;
        libvlc_media_release(media);
        libvlc_release(instance);
        return -1;
    }

    if (libvlc_media_player_play(player) != 0) {
        cerr << "Failed to play media" << endl;
        libvlc_media_player_release(player);
        libvlc_media_release(media);
        libvlc_release(instance);
        return -1;
    }

    // 等待播放状态
    waitPlaying(player);

    // 释放 media
    libvlc_media_release(media);

    // 释放 media player
    libvlc_media_player_release(player);

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

    return 0;
}

在这里插入图片描述


总结

通过在 Visual Studio 中配置 VLC 播放器,我们能够充分利用 VLC 的强大功能,在我们的应用程序中实现高效的视频播放。这不仅简化了多媒体应用的开发过程,还增强了应用的多功能性和用户体验。希望本文提供的步骤和指导能够帮助您顺利集成 VLC 播放器,并开发出更出色的多媒体应用。无论是在开发新项目还是改进现有项目,这一过程都将为您的应用增添重要的多媒体功能。

相关推荐

  1. dplayer播放hls格式视频自动开始播放

    2024-07-23 08:48:01       82 阅读
  2. perl:打开文件夹,选择视频文件,播放

    2024-07-23 08:48:01       37 阅读
  3. vue 配合 video.js 实现视频播放

    2024-07-23 08:48:01       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-23 08:48:01       60 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-23 08:48:01       63 阅读
  3. 在Django里面运行非项目文件

    2024-07-23 08:48:01       51 阅读
  4. Python语言-面向对象

    2024-07-23 08:48:01       62 阅读

热门阅读

  1. stm32 io输入中断

    2024-07-23 08:48:01       21 阅读
  2. pytorch lightning报错all tensors to be on the same device

    2024-07-23 08:48:01       14 阅读
  3. 关于正运动学解机器人手臂算法

    2024-07-23 08:48:01       18 阅读
  4. Torus结构代码实现

    2024-07-23 08:48:01       17 阅读
  5. linux命令-touch-修改文件时间

    2024-07-23 08:48:01       15 阅读
  6. Oracle(17)什么是物化视图(Materialized View)?

    2024-07-23 08:48:01       15 阅读
  7. Electron 和 React 开发桌面应用程序

    2024-07-23 08:48:01       19 阅读
  8. (20240721)无机非金属材料工学(3)混凝土

    2024-07-23 08:48:01       16 阅读
  9. golang长连接的误用

    2024-07-23 08:48:01       17 阅读