此方法 不用 修改源码重新编译
#define LIBVLC_USE_PTHREAD_CANCEL 1
#include "vlc.h"
#include <vlc/vlc.h>
#include <vlc/plugins/vlc_common.h>
#include <vlc/plugins/vlc_modules.h>
#include <vlc/plugins/vlc_charset.h>
#include <vlc/plugins/vlc_input.h>
// 记住自己使用的vlc版本,去源码中 把这个结构体的内容拷贝到此处, vlc2 vlc3内容不一样
struct libvlc_media_player_t
{
VLC_COMMON_MEMBERS
int i_refcount;
vlc_mutex_t object_lock;
struct
{
input_thread_t *p_thread;
input_resource_t *p_resource;
vlc_mutex_t lock;
} input;
struct libvlc_instance_t * p_libvlc_instance; /* Parent instance */
libvlc_media_t * p_md; /* current media descriptor */
libvlc_event_manager_t * p_event_manager;
libvlc_state_t state;
};
libvlc_instance_t *p_instance = nullptr;
libvlc_media_t *p_md = nullptr;
libvlc_media_player_t *p_mi = nullptr;
input_thread_t *libvlc_get_input_thread( libvlc_media_player_t *p_mi );
void record()
{
input_thread_t *p_input = libvlc_get_input_thread(p_mi);
if(p_input == NULL)
{
return;
}
static bool isRecord = false;
isRecord = !isRecord;
if(isRecord) // 结束录制
{
var_CreateGetString(p_input, "input-record-path");
//如果没有 abc 目录,则生成abc.mp4, 否则生成vlc自定义的名字
var_SetString( p_input, "input-record-path", "f:/abc" );
}
var_ToggleBool(p_input, "record");
vlc_object_release(p_input);
}
input_thread_t *libvlc_get_input_thread( libvlc_media_player_t *p_mi )
{
input_thread_t *p_input_thread;
p_input_thread = p_mi->input.p_thread;
if( p_input_thread )
vlc_object_hold( p_input_thread );
return p_input_thread;
}