pcm vlc 文件_libvlc —— 播放器示例程序[C++代码实现攫取 RGB图像 和 PCM音频 数据功能]...

本文档详细介绍了如何使用C++封装libvlc库,实现一个简单的播放器,包括视频回调、音频回调和事件回调的设置。通过libvlc接口,可以捕获RGB图像和PCM音频数据,适用于图像分析和音频处理等应用场景。文中还提供了源码下载地址,以及具体使用步骤和关键API的介绍。
摘要由CSDN通过智能技术生成

在我以前的实际项目中,曾利用 libvlc 去解码音视频媒体数据(如 RTSP、本地文件 等),通过其提供的回调函数接口,攫取 RGB图像 进行图像分析,如 人脸识别、运动检测 等一类的产品应用。除此之外,只要提供适当的 MRL,配合选项参数,VLC 还可以进行屏幕录制、摄像头图像采集、麦克风音频采集 等功能。

我在网上参看过很多人提供的示例源码,实现流程都很初潜,只适合当作学习的 Demo 来看,与实际的项目应用还有很多问题要解决。为此,在这里公开我封装 libvlc 的 C++ 类,方便TA人吧!

一、获取源码

1. 下载地址

2. 编译提醒

这个测试程序,是使用 QtCreator 写的 Qt 界面程序,调用我封装好的 vlc_mgrabber_t 类实现了一个简单的播放器。MFC的我也写过相应的测试程序,这里就不重复提供代码了。

因 libvlc 库相关的 dll 文件太多、太大,上传不易,所以在完成编译后,需要另外将 libvlc 的 dll 拷贝至 exe 程序目录中才能运行,我使用的 libvlc 版本是 vlc-3.0.7.1 版,下面是下载地址:

拿到下载后的压缩文件,解压出来,将 libvlc.dll、libvlccore.dll 和 plugins 整个目录 这几个拷贝到 exe 程序目录即可。另外,有一点需要特别提醒,压缩包中的 sdk 目录 是我们开发时需要用到的头文件和链接文件。

3. 测试程序截图

二、如何使用

使用 vlc_mgrabber_t 很简单,我们只需实现主要的 视频回调、音频回调、事件回调 三个接口,然后调用其基本操作接口进行 打开、关闭 操作,就可完成基本的工作流程。下面,我逐个说明这些接口的调用方式。

1. 基本操作流程

主要操作接口的声明如下:

class vlc_mgrabber_t

{

......

public:

/**********************************************************/

/**

* @brief Startup the libvlc.

*/

static x_int32_t startup(x_int32_t xit_argc, const x_char_t * const * xct_argv;

/**********************************************************/

/**

* @brief Cleanup the libvlc.

*/

static x_void_t cleanup(void);

public:

/**********************************************************/

/**

* @brief 设置回调接口。

*

* @param [in ] xfunc_vptr : 视频图像的回调函数接口。

* @param [in ] xfunc_aptr : 音频数据的回调函数接口。

* @param [in ] xfunc_eptr : 操作事件的回调函数接口。

* @param [in ] xpvt_context : 回调的用户上下文描述信息。

*/

inline x_void_t set_callback(xfunc_video_cbk_t xfunc_vptr,

xfunc_audio_cbk_t xfunc_aptr,

xfunc_event_cbk_t xfunc_eptr,

x_pvoid_t xpvt_context)

{

m_xfunc_video_cbk = xfunc_vptr;

m_xfunc_audio_cbk = xfunc_aptr;

m_xfunc_event_cbk = xfunc_eptr;

m_xpvt_xfunc_ctxt = xpvt_context;

}

/**********************************************************/

/**

* @brief 打开工作流程(操作前请先调用 set_callback() 设置好回调参数)。

*

* @param [in ] xht_instance : 关联的 libvlc 实例句柄(若为 X_NULL,则取全局的实例句柄)。

* @param [in ] xszt_media_file : 音视频文件路径名。

* @param [in ] xszt_options : 附加的参数选项(使用 " :" (空格+':')进行分隔的字符串集,为 X_NULL 时,则忽略)。

* @param [in ] xut_video_nbits : 视频回调操作时的 RGB 图像位数(24 或 32)。

*

* @return x_int32_t

* - 成功,返回 0;

* - 失败,返回 错误码。

*/

x_int32_t open(x_handle_t xht_instance,

x_cstring_t xszt_media_file,

x_cstring_t xszt_options,

x_uint32_t xut_video_nbits);

/**********************************************************/

/**

* @brief 关闭工作流程。

*/

x_void_t close(void);

......

public:

......

/**

* Set movie position as percentage between 0.0 and 1.0.

* This has no effect if playback is not enabled.

* This might not work depending on the underlying input format and protocol.

*

* \param xft_pos the position

*/

x_void_t set_position(x_float_t xft_pos);

......

/**

* Set mute status.

*

* \param xbt_status If status is X_TRUE then mute, otherwise unmute

* \warning This function does not always work. If there are no active audio

* playback stream, the mute status might not be available. If digital

* pass-through (S/PDIF, HDMI...) is in use, muting may be unapplicable. Also

* some audio output plugins do not support muting at all.

* \note To force silent playback, disable all audio tracks. This is more

* efficient and reliable t

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值