配置VS+VLC并播放视频

文章目录

  • 前言
    • 配置VS+VLC
    • VLC播放视频
      • 基本流程
      • [1. `libvlc_new`](#1. libvlc_new)
      • [2. `libvlc_set_user_agent`](#2. libvlc_set_user_agent)
      • [3. `libvlc_set_log_verbosity`](#3. libvlc_set_log_verbosity)
      • [4. `libvlc_media_new_path`](#4. libvlc_media_new_path)
      • [5. `libvlc_media_player_new_from_media`](#5. libvlc_media_player_new_from_media)
      • [6. `libvlc_media_player_play`](#6. libvlc_media_player_play)
      • [7. `libvlc_media_player_get_state`](#7. libvlc_media_player_get_state)
      • [8. `libvlc_media_release`](#8. libvlc_media_release)
      • [9. `libvlc_media_player_release`](#9. libvlc_media_player_release)
      • [10. `libvlc_release`](#10. libvlc_release)
      • 播放代码
  • 总结

前言

在现代多媒体应用开发中,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

函数原型:

c 复制代码
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

函数原型:

c 复制代码
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

函数原型:

c 复制代码
void libvlc_set_log_verbosity(libvlc_instance_t* p_instance, int level);

作用:

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

参数:

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

返回值:

  • 无返回值。

4. libvlc_media_new_path

函数原型:

c 复制代码
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

函数原型:

c 复制代码
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

函数原型:

c 复制代码
int libvlc_media_player_play(libvlc_media_player_t* p_mi);

作用:

开始播放媒体。

参数:

  • p_mi: 媒体播放器指针。

返回值:

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

7. libvlc_media_player_get_state

函数原型:

c 复制代码
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

函数原型:

c 复制代码
void libvlc_media_release(libvlc_media_t* p_md);

作用:

释放媒体对象的资源。

参数:

  • p_md: 媒体对象指针。

返回值:

  • 无返回值。

9. libvlc_media_player_release

函数原型:

c 复制代码
void libvlc_media_player_release(libvlc_media_player_t* p_mi);

作用:

释放媒体播放器的资源。

参数:

  • p_mi: 媒体播放器指针。

返回值:

  • 无返回值。

10. libvlc_release

函数原型:

c 复制代码
void libvlc_release(libvlc_instance_t* p_instance);

作用:

释放 VLC 实例的资源。

参数:

  • p_instance: VLC 实例指针。

返回值:

  • 无返回值。

播放代码

cpp 复制代码
#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 播放器,并开发出更出色的多媒体应用。无论是在开发新项目还是改进现有项目,这一过程都将为您的应用增添重要的多媒体功能。

相关推荐
小东来11 小时前
电脑端视频剪辑软件哪个好用,十多款剪辑软件分享
音视频
cuijiecheng201813 小时前
音视频入门基础:AAC专题(8)——FFmpeg源码中计算AAC裸流AVStream的time_base的实现
ffmpeg·音视频·aac
Mr数据杨13 小时前
我的AI工具箱Tauri版-VideoIntroductionClipCut视频介绍混剪
人工智能·音视频
神一样的老师13 小时前
基于环境音频和振动数据的人类活动识别
人工智能·音视频
启明云端wireless-tag13 小时前
设备稳定流畅视频体验,乐鑫ESP32-S3芯片方案无线音视频传输通信
物联网·音视频·交互·乐鑫·wifi模组
中关村科金16 小时前
中关村科金推出得助音视频鸿蒙SDK,助力金融业务系统鸿蒙化提速
华为·音视频·harmonyos
DisonTangor17 小时前
上海人工智能实验室开源视频生成模型Vchitect 2.0 可生成20秒高清视频
人工智能·音视频
美狐美颜sdk17 小时前
探索视频美颜SDK与直播美颜工具的开发实践方案
人工智能·计算机视觉·音视频·直播美颜sdk·视频美颜sdk
Mr数据杨17 小时前
我的AI工具箱Tauri版-FasterWhisper音频转文本
音视频
Mr数据杨18 小时前
我的AI工具箱Tauri版-FunAsr音频转文本
音视频