vlc 2.2.6 實現錄像/取消錄像功能

此方法 不用 修改源碼重新編譯

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章