(源码)在LibVLC中增加录制接口libvlc_media_player_recorder_start

最近在准备看深度学习的算法,翻起两年前的博客,发现有不少的留言和私信在问LibVLC的交叉编译、增加录制函数相关的问题,上次的博客是把方法思路说了,既然大家问代码,那就把具体源码分享一下吧。

在LibVLC中增加录制的接口,需要修改3个文件:

1、在include\vlc\libvlc_media_player.h文件中声明为LIBVLC_API类型的接口函数。找到libvlc_media_player_stop,在后面加两行。

/**
 * Stop (no effect if there is no media)
 *
 * \param p_mi the Media Player
 */
LIBVLC_API void libvlc_media_player_stop ( libvlc_media_player_t *p_mi );

/add by AVSuper/
LIBVLC_API int libvlc_media_player_recorder_start ( libvlc_media_player_t *p_mi, const char *pFileName );
LIBVLC_API int libvlc_media_player_recorder_stop ( libvlc_media_player_t *p_mi);
///

2、还需要将接口在lib/libvlc.sym 文件中添加,否则make编译时会在连接进动态库时变为静态,不可被外部调用。一样的,找到libvlc_media_player_stop在后面加两行。

libvlc_media_player_stop
libvlc_media_player_recorder_start
libvlc_media_player_recorder_stop

3、接下来,在lib\media_player.c增加实际的代码,看好了,就是这段(其实也就几行代码)。

int libvlc_media_player_recorder_start( libvlc_media_player_t *p_mi, const char *pFileName )
{
    input_thread_t *p_input = libvlc_get_input_thread( p_mi );  
    if(p_input == NULL) return -1;    

	var_CreateGetString(p_input, "input-record-path");
    var_SetString( p_input, "input-record-path", pFileName );
	
/*	var_CreateGetString(p_input, "sout-record-dst-prefix");
    var_SetString( p_input, "sout-record-dst-prefix", pFileName );  
*/    
	var_SetBool( p_input, "record", true);  
    
	vlc_object_release(p_input);  
    return 0;
}

int libvlc_media_player_recorder_stop( libvlc_media_player_t *p_mi )  
{  
    input_thread_t *p_input_thread;  
  
    p_input_thread = libvlc_get_input_thread( p_mi );  
    if( !p_input_thread ) return -1;  
  
    var_SetBool( p_input_thread, "record", false );  
  
    vlc_object_release( p_input_thread );  
    return 0;  
}

嗯,然后编译吧。。。

VLC的功能还是很强大的,接口封装得也很好,不过有几个问题是它一直没解决的,比如libvlc _media_player_stop调用的死锁问题,到现在这么多版本了都没解决。所以近期就没再继续研究vlc了,用ffmpeg重新做了完整的播放、录制等接口。大家有兴趣可以探讨沟通。

好了,你们继续聊,我去研究深度学习算法了,哈

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值