配置VS+VLC并播放视频

举报
人才程序员 发表于 2024/09/14 18:56:06 2024/09/14
【摘要】 @TOC 前言在现代多媒体应用开发中,Visual Studio (VS) 和 VLC 播放器是两个强大的工具。Visual Studio 提供了一个全面的开发环境,支持多种编程语言和框架,而 VLC 播放器则是一个开源的多媒体播放器,支持几乎所有的音视频格式,并且可以通过其强大的 API 进行定制和扩展。本文将介绍如何在 Visual Studio 中配置 VLC 并实现视频播放功能。这对...

@TOC


前言

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。