vlc开源播放器其实是自带录制功能的,只是其导出库中未包含该接口,下面我们为该库添加录制功能的导出接口。

1、在libvlc_media_player.h头文件中加入以下函数

LIBVLC_API
int libvlc_video_toggle_record(libvlc_media_player_t *p_mi,const char *psz_filepath,const char *psz_filename);

2、在lib/video.c下面加入实现函数

int
libvlc_video_toggle_record( libvlc_media_player_t *p_mi,const char *psz_filepath, const char *psz_filename )
{assert( psz_filepath );assert( psz_filename );input_thread_t *p_input = libvlc_get_input_thread(p_mi);if(p_input == NULL)return -1;  var_Create( p_input, "input-record-path", VLC_VAR_STRING );var_SetString( p_input, "input-record-path", psz_filepath );    var_Create( p_input, "record-video-name", VLC_VAR_STRING );var_SetString( p_input, "record-video-name", psz_filename );var_ToggleBool( p_input, "record");vlc_object_release(p_input);return 0;
}

添加input-record-path 参数和record-video-name参数,然后调用var_ToggleBool( p_input, "record");切换开始和停止。

3、在src/input/es_out.c中修改输出位置

static int EsOutSetRecord(  es_out_t *out, bool b_record )
{es_out_sys_t   *p_sys = out->p_sys;input_thread_t *p_input = p_sys->p_input;assert( ( b_record && !p_sys->p_sout_record ) || ( !b_record && p_sys->p_sout_record ) );if( b_record ){char *psz_path = var_CreateGetNonEmptyString( p_input, "input-record-path" );if( !psz_path ){if( var_CountChoices( p_input, "video-es" ) )psz_path = config_GetUserDir( VLC_VIDEOS_DIR );else if( var_CountChoices( p_input, "audio-es" ) )psz_path = config_GetUserDir( VLC_MUSIC_DIR );elsepsz_path = config_GetUserDir( VLC_DOWNLOAD_DIR );}char *psz_sout = NULL;  // TODO confif( !psz_sout && psz_path ){//char *psz_file = input_CreateFilename( p_input, psz_path, INPUT_RECORD_PREFIX, NULL );char *psz_file = NULL;//读取记录名前缀char *psz_recordVideoFileName = var_CreateGetNonEmptyString( p_input, "record-video-name" );if(psz_recordVideoFileName == NULL){psz_file = input_CreateFilename( p_input, psz_path, INPUT_RECORD_PREFIX, NULL );}else{//修改为自己的前缀char szName[512] = {0};snprintf(szName,512,"%s%s",psz_recordVideoFileName,"-%Y-%m-%d-%Hh%Mm%Ss-$ N-$ p");psz_file = input_CreateFilename( p_input, psz_path, szName, NULL );}if( psz_file ){char* psz_file_esc = config_StringEscape( psz_file );if ( psz_file_esc ){if( asprintf( &psz_sout, "#record{dst-prefix='%s'}", psz_file_esc ) < 0 )psz_sout = NULL;free( psz_file_esc );}free( psz_file );}//释放内存if(psz_recordVideoFileName)free( psz_recordVideoFileName );}free( psz_path );......}

4、modules/stream_filter/record.c中也加入输出文件名修改

/***************************************************************************** Helpers****************************************************************************/
static int Start( stream_t *s, const char *psz_extension )
{stream_sys_t *p_sys = s->p_sys;char *psz_file;FILE *f;/* */if( !psz_extension )psz_extension = "dat";/* Retreive path */char *psz_path = var_CreateGetNonEmptyString( s, "input-record-path" );if( !psz_path )psz_path = config_GetUserDir( VLC_DOWNLOAD_DIR );if( !psz_path )return VLC_ENOMEM;//获取输入的名称参数char *psz_recordVideoFileName = var_CreateGetNonEmptyString( s->p_input, "record-video-name" );if(psz_recordVideoFileName == NULL){/* Create file name* TODO allow prefix configuration */ psz_file = input_CreateFilename( s->p_input, psz_path, INPUT_RECORD_PREFIX, psz_extension );}else{//修改为自己的前缀char szName[512] = {0};snprintf(szName,512,"%s%s",psz_recordVideoFileName,"-%Y-%m-%d-%Hh%Mm%Ss-$ N-$ p");psz_file = input_CreateFilename( s->p_input, psz_path, szName, psz_extension );}free( psz_path );//释放内存if(psz_recordVideoFileName)free( psz_recordVideoFileName );if( !psz_file )return VLC_ENOMEM;f = vlc_fopen( psz_file, "wb" );if( !f ){free( psz_file );return VLC_EGENERIC;}/* signal new record file */var_SetString( s->obj.libvlc, "record-file", psz_file );msg_Dbg( s, "Recording into %s", psz_file );free( psz_file );/* */p_sys->f = f;p_sys->b_error = false;return VLC_SUCCESS;
}

libvlc添加视频录制接口相关推荐

  1. 安卓手机 8.0系统以上 webview添加视频录制功能报错

    Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on 解决方案:WebChromeClient中重写 ...

  2. Android仿微信小视频录制功能

    还没看完,应该还不错,先收藏,觉得可以开拓 https://blog.csdn.net/u012227600/article/details/50835633 -------------------- ...

  3. Java集成腾讯云音视频录制功能

    Java集成腾讯云音视频录制功能 为什么要实现音视频录制功能 因为我们做的是一个医院的项目,医生和患者可能进行视频通话和语音通话,为了保证通话的质量以及后续的问题, 我们就需要进行音视频录制,以便后续 ...

  4. 公众号视频查找接口,支持自定义接口,支持水印

    首先准备一个公众号 公众号注册地址: 微信公众平台 订阅号 服务号都可以 接着进入公众号-基本配置-明文模式 URL(服务器地址) :http://api.yaosg.cn/api.php?id=5 ...

  5. 基于Libvlc库的视频录制功能简述(C#)

    最近在学习libvlc库,如下讲述如何播放网络或本地视频并进行视频录制的功能: 一.先看效果: 1-1.主界面:首先Init环境初始化,然后可选择播放网络流或是本地视频文件: 1-2.若播放网络流,则 ...

  6. java 采用腾讯云直播实现多方视频录制并每路画面添加相应的水印

    这是我第一篇文章,本人也是菜鸟,如果有什么不对,也请大神多多指点 话不多说,进入正题. 首先录制视频的前提是推流和拉流同时是连接上才能进行录制工作.否则腾讯云不会给你返回录制的视频地址. 如果你不知道 ...

  7. Flex与.NET互操作(十三):FluorineFx.Net实现视频录制与视频回放

    本文主要介绍使用FluorineFx.Net来实现视频录制与视频回放,FluorineFx如同FMS一样,除了有AMF通信,RTMP协议,RPC和远程共享对象外,它同样具备视频流服务的功能.通过它我们 ...

  8. alsa 放的声音和录制的声音之间的延时_webrtc视频录制总结

    背景:要在视频通话中进行相关录制,具体要求如下: (1) 视频通话录像,并保存为AVI格式,并上传到服务端,服务端下发给设备message部分,但是管理机本身不存储录像: (2) 能监控其他的设备,并 ...

  9. android gpu 视频编码,Android Mp4视频录制(OpenGL实现篇,附DEMO)

    上一篇中(http://www.jianshu.com/p/113e4eedb752),我们已经了解了视频录制的大概流程,以及部分关键代码,在这一篇,我给大家介绍借助OpenGL来对视频图像进行处理的 ...

  10. 利用FFmpeg玩转Android视频录制与压缩(二)

    请尊重原创,转载请注明出处:http://blog.csdn.net/mabeijianxi/article/details/72983362 预热 时光荏苒,光阴如梭,离上一次吹牛逼已经过去了两三个 ...

最新文章

  1. 高文院士:为什么中国的AI发展必须要有开源开放平台?
  2. 中国决定以“六大政策”推动新一代人工智能发展
  3. [转]PHP用mysql数据库存储session
  4. 关于nginx信号控制的“故障”案例
  5. 如何把VS Code打造成Java开发IDE?
  6. JAVA vo pojo javabean dto区别
  7. Facebook去年从中国获50亿美元广告收入 占营收10%
  8. 前端开发技巧:网页切图图片格式选择GIF、JPEG 和 PNG区别和对比
  9. matplotlib出图细节以及提高出图质量(高dpi)
  10. [转发] 我的一年中台实战录 - 何少甫
  11. 给树莓派刷入OpenWrt
  12. 用双重for循环打印正三角形和倒三角形的思路
  13. 什么是“荷花定律”?
  14. 沉痛悼念张孝祥老师逝世
  15. Burp Suite之Scaner模块(三)
  16. stm32中的或运算 ||
  17. style 标签属性 scoped 的作用和原理
  18. 浪潮受邀出席“市长论坛-深圳智慧城市国际圆桌研讨会”
  19. 理解D3中的数据连接(data join)和选取(selection)是怎么工作的
  20. 【大咖有约】1号店周航:1号店搜索实时更新架构实践

热门文章

  1. python实现奇异值分解_奇异值分解原理及Python实例
  2. 软件研发成本构成中的间接成本包括哪些?
  3. 利用企业微信/飞书/钉钉扫码认证连接办公WiFi无线网络解决方案
  4. FINSTCP python2.5
  5. 运动目标检测算法ViBe原理学习
  6. 前端基础——html5新增标签
  7. stata进行无交互效应模型选择—混合模型,个体效应固定,时间效应固定,双向固定和随机效应
  8. 凹点匹配 matlab源码,基于凹点搜索的重叠粉体颗粒的自动分离算法
  9. MATLAB图例设置为透明
  10. 2022年安全员-A证考题模拟考试平台操作